fs, src, lib: fix blksize
& blocks
on Windows
libuv returns values for `blksize` and `blocks` on stat calls so do not coerce them into `undefined` on Windows. PR-URL: https://github.com/nodejs/node/pull/26056 Fixes: https://github.com/nodejs/node/issues/25913 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
8e68dc53b3
commit
51d20b6a8f
@ -3427,8 +3427,7 @@ to compare `curr.mtime` and `prev.mtime`.
|
|||||||
|
|
||||||
When an `fs.watchFile` operation results in an `ENOENT` error, it
|
When an `fs.watchFile` operation results in an `ENOENT` error, it
|
||||||
will invoke the listener once, with all the fields zeroed (or, for dates, the
|
will invoke the listener once, with all the fields zeroed (or, for dates, the
|
||||||
Unix Epoch). In Windows, `blksize` and `blocks` fields will be `undefined`,
|
Unix Epoch). If the file is created later on, the listener will be called
|
||||||
instead of zero. If the file is created later on, the listener will be called
|
|
||||||
again, with the latest stat objects. This is a change in functionality since
|
again, with the latest stat objects. This is a change in functionality since
|
||||||
v0.10.
|
v0.10.
|
||||||
|
|
||||||
|
@ -315,9 +315,9 @@ Stats.prototype.isSocket = function() {
|
|||||||
function getStatsFromBinding(stats, offset = 0) {
|
function getStatsFromBinding(stats, offset = 0) {
|
||||||
return new Stats(stats[0 + offset], stats[1 + offset], stats[2 + offset],
|
return new Stats(stats[0 + offset], stats[1 + offset], stats[2 + offset],
|
||||||
stats[3 + offset], stats[4 + offset], stats[5 + offset],
|
stats[3 + offset], stats[4 + offset], stats[5 + offset],
|
||||||
isWindows ? undefined : stats[6 + offset], // blksize
|
stats[6 + offset], // blksize
|
||||||
stats[7 + offset], stats[8 + offset],
|
stats[7 + offset], stats[8 + offset],
|
||||||
isWindows ? undefined : stats[9 + offset], // blocks
|
stats[9 + offset], // blocks
|
||||||
stats[10 + offset], stats[11 + offset],
|
stats[10 + offset], stats[11 + offset],
|
||||||
stats[12 + offset], stats[13 + offset]);
|
stats[12 + offset], stats[13 + offset]);
|
||||||
}
|
}
|
||||||
|
@ -199,18 +199,10 @@ constexpr void FillStatsArray(AliasedBuffer<NativeT, V8T>* fields,
|
|||||||
fields->SetValue(offset + 3, s->st_uid);
|
fields->SetValue(offset + 3, s->st_uid);
|
||||||
fields->SetValue(offset + 4, s->st_gid);
|
fields->SetValue(offset + 4, s->st_gid);
|
||||||
fields->SetValue(offset + 5, s->st_rdev);
|
fields->SetValue(offset + 5, s->st_rdev);
|
||||||
#if defined(__POSIX__)
|
|
||||||
fields->SetValue(offset + 6, s->st_blksize);
|
fields->SetValue(offset + 6, s->st_blksize);
|
||||||
#else
|
|
||||||
fields->SetValue(offset + 6, 0);
|
|
||||||
#endif
|
|
||||||
fields->SetValue(offset + 7, s->st_ino);
|
fields->SetValue(offset + 7, s->st_ino);
|
||||||
fields->SetValue(offset + 8, s->st_size);
|
fields->SetValue(offset + 8, s->st_size);
|
||||||
#if defined(__POSIX__)
|
|
||||||
fields->SetValue(offset + 9, s->st_blocks);
|
fields->SetValue(offset + 9, s->st_blocks);
|
||||||
#else
|
|
||||||
fields->SetValue(offset + 9, 0);
|
|
||||||
#endif
|
|
||||||
// Dates.
|
// Dates.
|
||||||
fields->SetValue(offset + 10, ToNative<NativeT>(s->st_atim));
|
fields->SetValue(offset + 10, ToNative<NativeT>(s->st_atim));
|
||||||
fields->SetValue(offset + 11, ToNative<NativeT>(s->st_mtim));
|
fields->SetValue(offset + 11, ToNative<NativeT>(s->st_mtim));
|
||||||
|
@ -59,9 +59,6 @@ function verifyStats(bigintStats, numStats) {
|
|||||||
bigintStats.isSymbolicLink(),
|
bigintStats.isSymbolicLink(),
|
||||||
numStats.isSymbolicLink()
|
numStats.isSymbolicLink()
|
||||||
);
|
);
|
||||||
} else if (common.isWindows && (key === 'blksize' || key === 'blocks')) {
|
|
||||||
assert.strictEqual(bigintStats[key], undefined);
|
|
||||||
assert.strictEqual(numStats[key], undefined);
|
|
||||||
} else if (Number.isSafeInteger(val)) {
|
} else if (Number.isSafeInteger(val)) {
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
bigintStats[key], BigInt(val),
|
bigintStats[key], BigInt(val),
|
||||||
|
@ -94,16 +94,13 @@ fs.stat(__filename, common.mustCall(function(err, s) {
|
|||||||
assert.strictEqual(s.isSymbolicLink(), false);
|
assert.strictEqual(s.isSymbolicLink(), false);
|
||||||
const keys = [
|
const keys = [
|
||||||
'dev', 'mode', 'nlink', 'uid',
|
'dev', 'mode', 'nlink', 'uid',
|
||||||
'gid', 'rdev', 'ino', 'size',
|
'gid', 'rdev', 'blksize', 'ino', 'size', 'blocks',
|
||||||
'atime', 'mtime', 'ctime', 'birthtime',
|
'atime', 'mtime', 'ctime', 'birthtime',
|
||||||
'atimeMs', 'mtimeMs', 'ctimeMs', 'birthtimeMs'
|
'atimeMs', 'mtimeMs', 'ctimeMs', 'birthtimeMs'
|
||||||
];
|
];
|
||||||
if (!common.isWindows) {
|
|
||||||
keys.push('blocks', 'blksize');
|
|
||||||
}
|
|
||||||
const numberFields = [
|
const numberFields = [
|
||||||
'dev', 'mode', 'nlink', 'uid', 'gid', 'rdev', 'ino', 'size',
|
'dev', 'mode', 'nlink', 'uid', 'gid', 'rdev', 'blksize', 'ino', 'size',
|
||||||
'atimeMs', 'mtimeMs', 'ctimeMs', 'birthtimeMs'
|
'blocks', 'atimeMs', 'mtimeMs', 'ctimeMs', 'birthtimeMs'
|
||||||
];
|
];
|
||||||
const dateFields = ['atime', 'mtime', 'ctime', 'birthtime'];
|
const dateFields = ['atime', 'mtime', 'ctime', 'birthtime'];
|
||||||
keys.forEach(function(k) {
|
keys.forEach(function(k) {
|
||||||
|
@ -15,10 +15,10 @@ const expectedStatObject = new fs.Stats(
|
|||||||
0n, // uid
|
0n, // uid
|
||||||
0n, // gid
|
0n, // gid
|
||||||
0n, // rdev
|
0n, // rdev
|
||||||
common.isWindows ? undefined : 0n, // blksize
|
0n, // blksize
|
||||||
0n, // ino
|
0n, // ino
|
||||||
0n, // size
|
0n, // size
|
||||||
common.isWindows ? undefined : 0n, // blocks
|
0n, // blocks
|
||||||
0n, // atim_msec
|
0n, // atim_msec
|
||||||
0n, // mtim_msec
|
0n, // mtim_msec
|
||||||
0n, // ctim_msec
|
0n, // ctim_msec
|
||||||
|
@ -38,10 +38,10 @@ const expectedStatObject = new fs.Stats(
|
|||||||
0, // uid
|
0, // uid
|
||||||
0, // gid
|
0, // gid
|
||||||
0, // rdev
|
0, // rdev
|
||||||
common.isWindows ? undefined : 0, // blksize
|
0, // blksize
|
||||||
0, // ino
|
0, // ino
|
||||||
0, // size
|
0, // size
|
||||||
common.isWindows ? undefined : 0, // blocks
|
0, // blocks
|
||||||
Date.UTC(1970, 0, 1, 0, 0, 0), // atime
|
Date.UTC(1970, 0, 1, 0, 0, 0), // atime
|
||||||
Date.UTC(1970, 0, 1, 0, 0, 0), // mtime
|
Date.UTC(1970, 0, 1, 0, 0, 0), // mtime
|
||||||
Date.UTC(1970, 0, 1, 0, 0, 0), // ctime
|
Date.UTC(1970, 0, 1, 0, 0, 0), // ctime
|
||||||
|
Loading…
x
Reference in New Issue
Block a user