aboutsummaryrefslogtreecommitdiff
path: root/lib/fuse_lowlevel.c
diff options
context:
space:
mode:
authorGravatar Miklos Szeredi <mszeredi@suse.cz>2014-07-15 18:02:19 +0200
committerGravatar Miklos Szeredi <mszeredi@suse.cz>2014-07-15 18:02:19 +0200
commitb49cf754f9d2db3a426aeb6111fa94d90270fb93 (patch)
tree18aca31da248e19e1072e6c40d21cb198d05c5ac /lib/fuse_lowlevel.c
parent978d10a42b2cfccf6bfc4df1cfad480ac3bbcb3d (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-xlib/fuse_lowlevel.c17
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" },
};