From: Dmitry Volyntsev Date: Sat, 30 Sep 2023 04:41:34 +0000 (-0700) Subject: FS: introduced fs.existsSync(). X-Git-Tag: 0.8.2~13 X-Git-Url: http://www.kaiwu.me/postgresql/commit/static/gitweb.js?a=commitdiff_plain;h=5a384fc044e753eacc695b534a856e895b892780;p=njs.git FS: introduced fs.existsSync(). --- diff --git a/external/njs_fs_module.c b/external/njs_fs_module.c index b92e7b89..819feafb 100644 --- a/external/njs_fs_module.c +++ b/external/njs_fs_module.c @@ -146,6 +146,8 @@ typedef njs_int_t (*njs_file_tree_walk_cb_t)(const char *, const struct stat *, static njs_int_t njs_fs_access(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t calltype, njs_value_t *retval); +static njs_int_t njs_fs_exists_sync(njs_vm_t *vm, njs_value_t *args, + njs_uint_t nargs, njs_index_t calltype, njs_value_t *retval); static njs_int_t njs_fs_mkdir(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t calltype, njs_value_t *retval); static njs_int_t njs_fs_open(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, @@ -581,6 +583,16 @@ static njs_external_t njs_ext_fs[] = { } }, + { + .flags = NJS_EXTERN_METHOD, + .name.string = njs_str("existsSync"), + .writable = 1, + .configurable = 1, + .u.method = { + .native = njs_fs_exists_sync, + } + }, + { .flags = NJS_EXTERN_METHOD, .name.string = njs_str("fstatSync"), @@ -1469,6 +1481,24 @@ njs_fs_access(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, } +static njs_int_t +njs_fs_exists_sync(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, + njs_index_t calltype, njs_value_t *retval) +{ + const char *path; + char path_buf[NJS_MAX_PATH + 1]; + + path = njs_fs_path(vm, path_buf, njs_arg(args, nargs, 1), "path"); + if (njs_slow_path(path == NULL)) { + return NJS_ERROR; + } + + njs_value_boolean_set(retval, access(path, F_OK) == 0); + + return NJS_OK; +} + + static njs_int_t njs_fs_open(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, njs_index_t calltype, njs_value_t *retval) diff --git a/test/fs/methods.t.js b/test/fs/methods.t.js index 9b836ad2..cc840c6c 100644 --- a/test/fs/methods.t.js +++ b/test/fs/methods.t.js @@ -359,6 +359,36 @@ let appendFileP_tsuite = { get tests() { return append_tests() }, }; +async function exists_test(params) { + let res = await method("exists", params); + + if (res !== params.expected) { + throw Error(`exists failed check`); + } + + return 'SUCCESS'; +} + +let exists_tests = () => [ + { args: ["test/fs/ascii"], + expected: true }, + { args: ["test/fs"], + expected: true }, + { args: ["test/fs_NONEXISTENT/ascii"], + expected: false }, + { args: ["test/fs/ascii_NONEXISTENT"], + expected: false }, +]; + +let existsSync_tsuite = { + name: "fs existsSync", + skip: () => (!has_fs() || !has_buffer()), + T: exists_test, + prepare_args: p, + opts: { type: "sync" }, + get tests() { return exists_tests() }, +}; + async function realpath_test(params) { let data = await method("realpath", params); @@ -1153,6 +1183,7 @@ run([ appendFile_tsuite, appendFileSync_tsuite, appendFileP_tsuite, + existsSync_tsuite, realpath_tsuite, realpathSync_tsuite, realpathP_tsuite,