Browse Source

src,fs: calculate fs times without truncation

also added some missing bits that didn't make it into #12818

PR-URL: https://github.com/nodejs/node/pull/12607
Refs: https://github.com/nodejs/node/pull/12818
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
v6
Daniel Pihlstrom 8 years ago
committed by Refael Ackermann
parent
commit
a109032260
  1. 2
      lib/fs.js
  2. 6
      src/node_file.cc
  3. 14
      test/parallel/test-fs-utimes.js

2
lib/fs.js

@ -206,6 +206,8 @@ fs.Stats = Stats;
// defining the properties in this fashion (explicitly with no loop or factory)
// has been shown to be the most performant on V8 contemp.
// Ref: https://github.com/nodejs/node/pull/12818
// + 0.5 is added to the Dates to protect values from being rounded down
// Ref: https://github.com/nodejs/node/pull/12607
Object.defineProperties(Stats.prototype, {
atime: {
configurable: true,

6
src/node_file.cc

@ -479,9 +479,9 @@ void FillStatsArray(double* fields, const uv_stat_t* s) {
fields[9] = -1;
#endif
// Dates.
#define X(idx, name) \
fields[idx] = (static_cast<double>(s->st_##name.tv_sec) * 1000) + \
(static_cast<double>(s->st_##name.tv_nsec / 1000000)); \
#define X(idx, name) \
fields[idx] = (s->st_##name.tv_sec * 1e3) + \
(s->st_##name.tv_nsec / 1e6); \
X(10, atim)
X(11, mtim)

14
test/parallel/test-fs-utimes.js

@ -143,15 +143,21 @@ function testIt(atime, mtime, callback) {
const stats = fs.statSync(__filename);
// run tests
const runTest = common.mustCall(testIt, 5);
const runTest = common.mustCall(testIt, 6);
runTest(new Date('1982-09-10 13:37'), new Date('1982-09-10 13:37'), function() {
runTest(new Date(), new Date(), function() {
runTest(123456.789, 123456.789, function() {
runTest(stats.mtime, stats.mtime, function() {
runTest('123456', -1, common.mustCall(function() {
// done
}));
runTest('123456', -1, function() {
runTest(
new Date('2017-04-08T17:59:38.008Z'),
new Date('2017-04-08T17:59:38.008Z'),
common.mustCall(function() {
// done
})
);
});
});
});
});

Loading…
Cancel
Save