diff options
author | Liviu Ionescu <ilg@livius.net> | 2022-04-21 07:29:31 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-21 05:29:31 +0100 |
commit | c6547c5362f39dd07cd2e609f34c7f586a3b222d (patch) | |
tree | dfcd65762dc7172e28aec134b48fa2818cef7e79 | |
parent | 61fefe1959a8ab9e796f409346ff619c14036c81 (diff) | |
download | node-new-c6547c5362f39dd07cd2e609f34c7f586a3b222d.tar.gz |
src: define fs.constants.S_IWUSR & S_IRUSR for Win
On Windows, most of the POSIX file mode definitions are not available.
However, functionally equivalent read/write definitions exists, and
chmod() can use them. This patch defines two aliases, so that these
definintions are issued in fs.constants.
fixes: https://github.com/nodejs/node/issues/41591
PR-URL: https://github.com/nodejs/node/pull/42757
Refs: https://github.com/nodejs/node/issues/41591
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r-- | doc/api/fs.md | 18 | ||||
-rw-r--r-- | src/node_constants.cc | 10 | ||||
-rw-r--r-- | test/parallel/test-fs-constants.js | 8 |
3 files changed, 35 insertions, 1 deletions
diff --git a/doc/api/fs.md b/doc/api/fs.md index 246b369f31..46a15ba547 100644 --- a/doc/api/fs.md +++ b/doc/api/fs.md @@ -6771,7 +6771,11 @@ operations. The following constants are exported by `fs.constants`. -Not every constant will be available on every operating system. +Not every constant will be available on every operating system; +this is especially important for Windows, where many of the POSIX specific +definitions are not available. +For portable applications it is recommended to check for their presence +before use. To use more than one constant, use the bitwise OR `|` operator. @@ -6824,6 +6828,8 @@ The following constants are meant for use as the `mode` parameter passed to </tr> </table> +The definitions are also available on Windows. + ##### File copy constants The following constants are meant for use with [`fs.copyFile()`][]. @@ -6852,6 +6858,8 @@ The following constants are meant for use with [`fs.copyFile()`][]. </tr> </table> +The definitions are also available on Windows. + ##### File open constants The following constants are meant for use with `fs.open()`. @@ -6946,6 +6954,9 @@ The following constants are meant for use with `fs.open()`. </tr> </table> +On Windows, only `O_APPEND`, `O_CREAT`, `O_EXCL`, `O_RDONLY`, `O_RDWR`, +`O_TRUNC`, `O_WRONLY` and `UV_FS_O_FILEMAP` are available. + ##### File type constants The following constants are meant for use with the {fs.Stats} object's @@ -6990,6 +7001,9 @@ The following constants are meant for use with the {fs.Stats} object's </tr> </table> +On Windows, only `S_IFCHR`, `S_IFDIR`, `S_IFLNK`, `S_IFMT`, and `S_IFREG`, +are available. + ##### File mode constants The following constants are meant for use with the {fs.Stats} object's @@ -7050,6 +7064,8 @@ The following constants are meant for use with the {fs.Stats} object's </tr> </table> +On Windows, only `S_IRUSR` and `S_IWUSR` are available. + ## Notes ### Ordering of callback and promise-based operations diff --git a/src/node_constants.cc b/src/node_constants.cc index 38c8f2738b..3269e3003a 100644 --- a/src/node_constants.cc +++ b/src/node_constants.cc @@ -47,6 +47,16 @@ #include <dlfcn.h> #endif +#if defined(_WIN32) +#include <io.h> // _S_IREAD _S_IWRITE +#ifndef S_IRUSR +#define S_IRUSR _S_IREAD +#endif // S_IRUSR +#ifndef S_IWUSR +#define S_IWUSR _S_IWRITE +#endif // S_IWUSR +#endif + #include <cerrno> #include <csignal> #include <limits> diff --git a/test/parallel/test-fs-constants.js b/test/parallel/test-fs-constants.js new file mode 100644 index 0000000000..49bcabd808 --- /dev/null +++ b/test/parallel/test-fs-constants.js @@ -0,0 +1,8 @@ +'use strict'; +require('../common'); +const fs = require('fs'); +const assert = require('assert'); + +// Check if the two constants accepted by chmod() on Windows are defined. +assert.notStrictEqual(fs.constants.S_IRUSR, undefined); +assert.notStrictEqual(fs.constants.S_IWUSR, undefined); |