diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2014-07-15 18:02:19 +0200 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2014-07-15 18:02:19 +0200 |
commit | b49cf754f9d2db3a426aeb6111fa94d90270fb93 (patch) | |
tree | 18aca31da248e19e1072e6c40d21cb198d05c5ac /lib/fuse_lowlevel.c | |
parent | 978d10a42b2cfccf6bfc4df1cfad480ac3bbcb3d (diff) |
libfuse: add flags to ->rename()
See renameat2() system call in linux-3.15 and later kernels.
Diffstat (limited to 'lib/fuse_lowlevel.c')
-rwxr-xr-x | lib/fuse_lowlevel.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c index 9131811..1911863 100755 --- a/lib/fuse_lowlevel.c +++ b/lib/fuse_lowlevel.c @@ -1270,7 +1270,21 @@ static void do_rename(fuse_req_t req, fuse_ino_t nodeid, const void *inarg) char *newname = oldname + strlen(oldname) + 1; if (req->f->op.rename) - req->f->op.rename(req, nodeid, oldname, arg->newdir, newname); + req->f->op.rename(req, nodeid, oldname, arg->newdir, newname, + 0); + else + fuse_reply_err(req, ENOSYS); +} + +static void do_rename2(fuse_req_t req, fuse_ino_t nodeid, const void *inarg) +{ + struct fuse_rename2_in *arg = (struct fuse_rename2_in *) inarg; + char *oldname = PARAM(arg); + char *newname = oldname + strlen(oldname) + 1; + + if (req->f->op.rename) + req->f->op.rename(req, nodeid, oldname, arg->newdir, newname, + arg->flags); else fuse_reply_err(req, ENOSYS); } @@ -2431,6 +2445,7 @@ static struct { [FUSE_NOTIFY_REPLY] = { (void *) 1, "NOTIFY_REPLY" }, [FUSE_BATCH_FORGET] = { do_batch_forget, "BATCH_FORGET" }, [FUSE_READDIRPLUS] = { do_readdirplus, "READDIRPLUS"}, + [FUSE_RENAME2] = { do_rename2, "RENAME2" }, [CUSE_INIT] = { cuse_lowlevel_init, "CUSE_INIT" }, }; |