From 73b897dfe7f120c7ab8c10e279a97d2112c8225b Mon Sep 17 00:00:00 2001 From: Andrew Osheroff Date: Tue, 6 Aug 2019 11:24:04 +0200 Subject: [PATCH] bug fixes --- fuse-native.c | 15 +++++++++------ index.js | 8 +++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/fuse-native.c b/fuse-native.c index 91354d4..ab24496 100644 --- a/fuse-native.c +++ b/fuse-native.c @@ -35,6 +35,11 @@ blk\ uv_async_send(&(l->async));\ uv_sem_wait(&(l->sem));\ + if (l->ret != NULL) {\ + void *tmp = l->ret;\ + l->ret = NULL;\ + return tmp;\ + }\ return l->res; #define FUSE_METHOD(name, callbackArgs, signalArgs, signature, callBlk, callbackBlk, signalBlk)\ @@ -52,11 +57,9 @@ NAPI_ARGV(signalArgs + 2)\ NAPI_ARGV_BUFFER_CAST(fuse_thread_locals_t *, l, 0);\ NAPI_ARGV_INT32(res, 1);\ - int ret = NULL;\ signalBlk\ - l->res = ret ? ret : res;\ + l->res = res;\ uv_sem_post(&(l->sem));\ - return ret;\ }\ static int fuse_native_##name signature {\ FUSE_NATIVE_HANDLER(name, callBlk)\ @@ -140,6 +143,7 @@ typedef struct { gid_t gid; uint32_t atim[2]; uint32_t mtim[2]; + void *ret; int32_t res; // Extended attributes @@ -408,7 +412,7 @@ FUSE_METHOD(write, 5, 1, (const char *path, const char *buf, size_t len, off_t o // TODO: handle bytes processed? }) -FUSE_METHOD(readdir, 1, 1, (const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *info), { +FUSE_METHOD(readdir, 1, 2, (const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *info), { l->buf = buf; l->path = path; l->offset = offset; @@ -548,7 +552,7 @@ FUSE_METHOD(removexattr, 2, 0, (const char *path, const char *name), { FUSE_METHOD(init, 0, 0, (struct fuse_conn_info *conn, struct fuse_config *cfg), { }, { }, { - ret = (int) l->fuse; + l->ret = (int) l->fuse; }) FUSE_METHOD(error, 0, 0, (), {}, {}, {}) @@ -631,7 +635,6 @@ FUSE_METHOD(readlink, 1, 1, (const char *path, char *linkname, size_t len), { }, { NAPI_ARGV_UTF8(linkname, l->len, 2) strncpy(l->linkname, linkname, l->len); - ret = 0; }) FUSE_METHOD(chown, 3, 0, (const char *path, uid_t uid, gid_t gid), { diff --git a/index.js b/index.js index 06171c1..e8e2856 100644 --- a/index.js +++ b/index.js @@ -43,7 +43,8 @@ const OpcodesAndDefaults = new Map([ op: binding.op_fsyncdir }], ['readdir', { - op: binding.op_readdir + op: binding.op_readdir, + defaults: [[], []] }], ['truncate', { op: binding.op_truncate @@ -102,7 +103,8 @@ const OpcodesAndDefaults = new Map([ op: binding.op_releasedir }], ['create', { - op: binding.op_create + op: binding.op_create, + defaults: [0] }], ['unlink', { op: binding.op_unlink @@ -216,7 +218,7 @@ class Fuse extends Nanoresource { function signal (nativeHandler, err, ...args) { const arr = [nativeHandler, err, ...args] if (defaults && (!args || !args.length)) arr.concat(defaults) - return nativeSignal(...arr) + return process.nextTick(nativeSignal, ...arr) } } }