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>
This commit is contained in:
parent
d48472c20f
commit
18069523f8
24
lib/fs.js
24
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;
|
||||
} catch (err) {
|
||||
try {
|
||||
fs.closeSync(fd);
|
||||
} catch (ignore) {}
|
||||
throw err;
|
||||
}
|
||||
try {
|
||||
fs.closeSync(fd);
|
||||
} catch (er) {
|
||||
err2 = er;
|
||||
}
|
||||
if (err || err2) throw (err || err2);
|
||||
fs.closeSync(fd);
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user