Browse Source

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 <luigipinca@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
v6
Ruben Bridgewater 8 years ago
committed by Refael Ackermann
parent
commit
18069523f8
No known key found for this signature in database GPG Key ID: CD704BD80FDDDB64
  1. 24
      lib/fs.js

24
lib/fs.js

@ -521,7 +521,6 @@ function tryStatSync(fd, isUserFd) {
} finally { } finally {
if (threw && !isUserFd) fs.closeSync(fd); if (threw && !isUserFd) fs.closeSync(fd);
} }
return !threw;
} }
function tryCreateBuffer(size, fd, isUserFd) { function tryCreateBuffer(size, fd, isUserFd) {
@ -553,10 +552,11 @@ fs.readFileSync = function(path, options) {
var isUserFd = isFd(path); // file descriptor ownership var isUserFd = isFd(path); // file descriptor ownership
var fd = isUserFd ? path : fs.openSync(path, options.flag || 'r', 0o666); 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 // Use stats array directly to avoid creating an fs.Stats instance just for
// our internal use. // our internal use.
var size; 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*/]; size = statValues[8/*size*/];
else else
size = 0; size = 0;
@ -1085,7 +1085,7 @@ if (constants.O_SYMLINK !== undefined) {
callback(err); callback(err);
return; 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. // but still try to close, and report closing errors if they occur.
fs.fchmod(fd, mode, function(err) { fs.fchmod(fd, mode, function(err) {
fs.close(fd, function(err2) { fs.close(fd, function(err2) {
@ -1098,20 +1098,18 @@ if (constants.O_SYMLINK !== undefined) {
fs.lchmodSync = function(path, mode) { fs.lchmodSync = function(path, mode) {
var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK); 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. // but still try to close, and report closing errors if they occur.
var err, err2, ret; var ret;
try { try {
ret = fs.fchmodSync(fd, mode); ret = fs.fchmodSync(fd, mode);
} catch (er) { } catch (err) {
err = er; try {
} fs.closeSync(fd);
try { } catch (ignore) {}
fs.closeSync(fd); throw err;
} catch (er) {
err2 = er;
} }
if (err || err2) throw (err || err2); fs.closeSync(fd);
return ret; return ret;
}; };
} }

Loading…
Cancel
Save