◐ Shell
clean mode source ↗

fs: support BigInt in fs.*stat and fs.watchFile · nodejs/node@04e8f07

@@ -248,7 +248,7 @@ function readFileAfterOpen(err, fd) {

248248

const req = new FSReqWrap();

249249

req.oncomplete = readFileAfterStat;

250250

req.context = context;

251-

binding.fstat(fd, req);

251+

binding.fstat(fd, false, req);

252252

}

253253254254

function readFileAfterStat(err, stats) {

@@ -307,7 +307,7 @@ function readFile(path, options, callback) {

307307308308

function tryStatSync(fd, isUserFd) {

309309

const ctx = {};

310-

const stats = binding.fstat(fd, undefined, ctx);

310+

const stats = binding.fstat(fd, false, undefined, ctx);

311311

if (ctx.errno !== undefined && !isUserFd) {

312312

fs.closeSync(fd);

313313

throw errors.uvException(ctx);

@@ -760,55 +760,67 @@ function readdirSync(path, options) {

760760

return result;

761761

}

762762763-

function fstat(fd, callback) {

763+

function fstat(fd, options, callback) {

764+

if (arguments.length < 3) {

765+

callback = options;

766+

options = {};

767+

}

764768

validateUint32(fd, 'fd');

765-

const req = new FSReqWrap();

769+

const req = new FSReqWrap(options.bigint);

766770

req.oncomplete = makeStatsCallback(callback);

767-

binding.fstat(fd, req);

771+

binding.fstat(fd, options.bigint, req);

768772

}

769773770-

function lstat(path, callback) {

774+

function lstat(path, options, callback) {

775+

if (arguments.length < 3) {

776+

callback = options;

777+

options = {};

778+

}

771779

callback = makeStatsCallback(callback);

772780

path = getPathFromURL(path);

773781

validatePath(path);

774-

const req = new FSReqWrap();

782+

const req = new FSReqWrap(options.bigint);

775783

req.oncomplete = callback;

776-

binding.lstat(pathModule.toNamespacedPath(path), req);

784+

binding.lstat(pathModule.toNamespacedPath(path), options.bigint, req);

777785

}

778786779-

function stat(path, callback) {

787+

function stat(path, options, callback) {

788+

if (arguments.length < 3) {

789+

callback = options;

790+

options = {};

791+

}

780792

callback = makeStatsCallback(callback);

781793

path = getPathFromURL(path);

782794

validatePath(path);

783-

const req = new FSReqWrap();

795+

const req = new FSReqWrap(options.bigint);

784796

req.oncomplete = callback;

785-

binding.stat(pathModule.toNamespacedPath(path), req);

797+

binding.stat(pathModule.toNamespacedPath(path), options.bigint, req);

786798

}

787799788-

function fstatSync(fd) {

800+

function fstatSync(fd, options = {}) {

789801

validateUint32(fd, 'fd');

790802

const ctx = { fd };

791-

const stats = binding.fstat(fd, undefined, ctx);

803+

const stats = binding.fstat(fd, options.bigint, undefined, ctx);

792804

handleErrorFromBinding(ctx);

793805

return getStatsFromBinding(stats);

794806

}

795807796-

function lstatSync(path) {

808+

function lstatSync(path, options = {}) {

797809

path = getPathFromURL(path);

798810

validatePath(path);

799811

const ctx = { path };

800812

const stats = binding.lstat(pathModule.toNamespacedPath(path),

801-

undefined, ctx);

813+

options.bigint, undefined, ctx);

802814

handleErrorFromBinding(ctx);

803815

return getStatsFromBinding(stats);

804816

}

805817806-

function statSync(path) {

818+

function statSync(path, options = {}) {

807819

path = getPathFromURL(path);

808820

validatePath(path);

809821

const ctx = { path };

810822

const stats = binding.stat(pathModule.toNamespacedPath(path),

811-

undefined, ctx);

823+

options.bigint, undefined, ctx);

812824

handleErrorFromBinding(ctx);

813825

return getStatsFromBinding(stats);

814826

}

@@ -1264,7 +1276,7 @@ function watchFile(filename, options, listener) {

12641276

if (stat === undefined) {

12651277

if (!watchers)

12661278

watchers = require('internal/fs/watchers');

1267-

stat = new watchers.StatWatcher();

1279+

stat = new watchers.StatWatcher(options.bigint);

12681280

stat.start(filename, options.persistent, options.interval);

12691281

statWatchers.set(filename, stat);

12701282

}

@@ -1379,7 +1391,7 @@ function realpathSync(p, options) {

13791391

// On windows, check that the root exists. On unix there is no need.

13801392

if (isWindows && !knownHard[base]) {

13811393

const ctx = { path: base };

1382-

binding.lstat(pathModule.toNamespacedPath(base), undefined, ctx);

1394+

binding.lstat(pathModule.toNamespacedPath(base), false, undefined, ctx);

13831395

handleErrorFromBinding(ctx);

13841396

knownHard[base] = true;

13851397

}

@@ -1421,7 +1433,7 @@ function realpathSync(p, options) {

1421143314221434

const baseLong = pathModule.toNamespacedPath(base);

14231435

const ctx = { path: base };

1424-

const stats = binding.lstat(baseLong, undefined, ctx);

1436+

const stats = binding.lstat(baseLong, false, undefined, ctx);

14251437

handleErrorFromBinding(ctx);

1426143814271439

if (!isFileType(stats, S_IFLNK)) {

@@ -1444,7 +1456,7 @@ function realpathSync(p, options) {

14441456

}

14451457

if (linkTarget === null) {

14461458

const ctx = { path: base };

1447-

binding.stat(baseLong, undefined, ctx);

1459+

binding.stat(baseLong, false, undefined, ctx);

14481460

handleErrorFromBinding(ctx);

14491461

linkTarget = binding.readlink(baseLong, undefined, undefined, ctx);

14501462

handleErrorFromBinding(ctx);

@@ -1465,7 +1477,7 @@ function realpathSync(p, options) {

14651477

// On windows, check that the root exists. On unix there is no need.

14661478

if (isWindows && !knownHard[base]) {

14671479

const ctx = { path: base };

1468-

binding.lstat(pathModule.toNamespacedPath(base), undefined, ctx);

1480+

binding.lstat(pathModule.toNamespacedPath(base), false, undefined, ctx);

14691481

handleErrorFromBinding(ctx);

14701482

knownHard[base] = true;

14711483

}