From 2a02868934923adab4e19c56403f42afb05a0763 Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Mon, 3 Jul 2017 09:20:32 -0400 Subject: [PATCH] fs: two minor optimizations * tryStatSync should not return any value If the function threw, it would never reach that code path. * only use try catch if necessary lchmodSync does not need the second try catch in most cases. PR-URL: https://github.com/nodejs/node/pull/14055 Reviewed-By: Luigi Pinca Reviewed-By: Benjamin Gruenbaum Reviewed-By: Refael Ackermann --- lib/fs.js | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/lib/fs.js b/lib/fs.js index 91489f816652c9..a5403d50f91f3c 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -521,7 +521,6 @@ function tryStatSync(fd, isUserFd) { } finally { if (threw && !isUserFd) fs.closeSync(fd); } - return !threw; } function tryCreateBuffer(size, fd, isUserFd) { @@ -553,10 +552,11 @@ fs.readFileSync = function(path, options) { var isUserFd = isFd(path); // file descriptor ownership var fd = isUserFd ? path : fs.openSync(path, options.flag || 'r', 0o666); + tryStatSync(fd, isUserFd); // Use stats array directly to avoid creating an fs.Stats instance just for // our internal use. var size; - if (tryStatSync(fd, isUserFd) && (statValues[1/*mode*/] & S_IFMT) === S_IFREG) + if ((statValues[1/*mode*/] & S_IFMT) === S_IFREG) size = statValues[8/*size*/]; else size = 0; @@ -1085,7 +1085,7 @@ if (constants.O_SYMLINK !== undefined) { callback(err); return; } - // prefer to return the chmod error, if one occurs, + // Prefer to return the chmod error, if one occurs, // but still try to close, and report closing errors if they occur. fs.fchmod(fd, mode, function(err) { fs.close(fd, function(err2) { @@ -1098,20 +1098,18 @@ if (constants.O_SYMLINK !== undefined) { fs.lchmodSync = function(path, mode) { var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK); - // prefer to return the chmod error, if one occurs, + // Prefer to return the chmod error, if one occurs, // but still try to close, and report closing errors if they occur. - var err, err2, ret; + var ret; try { ret = fs.fchmodSync(fd, mode); - } catch (er) { - err = er; - } - try { - fs.closeSync(fd); - } catch (er) { - err2 = er; + } catch (err) { + try { + fs.closeSync(fd); + } catch (ignore) {} + throw err; } - if (err || err2) throw (err || err2); + fs.closeSync(fd); return ret; }; }