From 1087371fc4fd5faa0368a81e7b3c8e204ae99d5c Mon Sep 17 00:00:00 2001 From: David Humphrey Date: Tue, 29 May 2018 13:47:16 -0400 Subject: [PATCH] Deal with file type bits in mode when setting permissions via chmod --- src/filesystem/implementation.js | 2 +- src/node.js | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/filesystem/implementation.js b/src/filesystem/implementation.js index 4869e0a..fbccc1f 100644 --- a/src/filesystem/implementation.js +++ b/src/filesystem/implementation.js @@ -1953,7 +1953,7 @@ function chmod_file(context, path, mode, callback) { if (error) { callback(error); } else { - node.mode = mode; + Node.setMode(mode, node); update_node_times(context, path, node, { mtime: Date.now() }, callback); } } diff --git a/src/node.js b/src/node.js index a8be4c7..9c15166 100644 --- a/src/node.js +++ b/src/node.js @@ -12,17 +12,17 @@ var S_IFLNK = require('./constants.js').S_IFLNK; var DEFAULT_FILE_PERMISSIONS = require('./constants.js').DEFAULT_FILE_PERMISSIONS; var DEFAULT_DIR_PERMISSIONS = require('./constants.js').DEFAULT_DIR_PERMISSIONS; -function getMode(type) { +function getMode(type, mode) { switch(type) { case NODE_TYPE_DIRECTORY: - return DEFAULT_DIR_PERMISSIONS | S_IFDIR; + return (mode || DEFAULT_DIR_PERMISSIONS) | S_IFDIR; case NODE_TYPE_SYMBOLIC_LINK: - return DEFAULT_FILE_PERMISSIONS | S_IFLNK; + return (mode || DEFAULT_FILE_PERMISSIONS) | S_IFLNK; /* jshint -W086 */ case NODE_TYPE_FILE: // falls through default: - return DEFAULT_FILE_PERMISSIONS | S_IFREG; + return (mode || DEFAULT_FILE_PERMISSIONS) | S_IFREG; } } @@ -79,4 +79,9 @@ Node.create = function(options, callback) { }); }; +// Update the node's mode (permissions), taking file type bits into account. +Node.setMode = function(mode, node) { + node.mode = getMode(node.type, mode); +}; + module.exports = Node;