diff options
-rw-r--r-- | lib/fs.js | 4 | ||||
-rw-r--r-- | src/node_file.cc | 16 |
2 files changed, 13 insertions, 7 deletions
@@ -1054,7 +1054,9 @@ fs.chmodSync = function(path, mode) { validatePath(path); mode = modeNum(mode); validateUint32(mode, 'mode'); - return binding.chmod(pathModule.toNamespacedPath(path), mode); + const ctx = { path }; + binding.chmod(pathModule.toNamespacedPath(path), mode, undefined, ctx); + handleErrorFromBinding(ctx); }; if (constants.O_SYMLINK !== undefined) { diff --git a/src/node_file.cc b/src/node_file.cc index 5e8f9ee168..4e99953b62 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -1458,20 +1458,24 @@ static void Read(const FunctionCallbackInfo<Value>& args) { static void Chmod(const FunctionCallbackInfo<Value>& args) { Environment* env = Environment::GetCurrent(args); - CHECK_GE(args.Length(), 2); - CHECK(args[1]->IsInt32()); + const int argc = args.Length(); + CHECK_GE(argc, 2); BufferValue path(env->isolate(), args[0]); CHECK_NE(*path, nullptr); - int mode = static_cast<int>(args[1]->Int32Value()); + CHECK(args[1]->IsInt32()); + int mode = args[1].As<Int32>()->Value(); FSReqBase* req_wrap = GetReqWrap(env, args[2]); - if (req_wrap != nullptr) { + if (req_wrap != nullptr) { // chmod(path, mode, req) AsyncCall(env, req_wrap, args, "chmod", UTF8, AfterNoArgs, uv_fs_chmod, *path, mode); - } else { - SYNC_CALL(chmod, *path, *path, mode); + } else { // chmod(path, mode, undefined, ctx) + CHECK_EQ(argc, 4); + fs_req_wrap req_wrap; + SyncCall(env, args[3], &req_wrap, "chmod", + uv_fs_chmod, *path, mode); } } |