diff options
author | Nikolaus Rath <Nikolaus@rath.org> | 2017-06-05 07:00:56 -0400 |
---|---|---|
committer | Nikolaus Rath <Nikolaus@rath.org> | 2017-06-05 07:01:30 -0400 |
commit | f13526ed66d76bb36dc8a145d803f4913d772a2c (patch) | |
tree | 4878923ec4a6c76351ca6f49b95cf033b0f66be2 /example | |
parent | bb3770f38a01f4032a717b4a07087a166482d0fe (diff) |
examples/passthrough_ll: added support for create()
Diffstat (limited to 'example')
-rw-r--r-- | example/passthrough_ll.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/example/passthrough_ll.c b/example/passthrough_ll.c index dd3166a..84dd847 100644 --- a/example/passthrough_ll.c +++ b/example/passthrough_ll.c @@ -429,8 +429,29 @@ static void lo_releasedir(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info fuse_reply_err(req, 0); } +static void lo_create(fuse_req_t req, fuse_ino_t parent, const char *name, + mode_t mode, struct fuse_file_info *fi) +{ + int fd; + struct fuse_entry_param e; + int err; + + fd = openat(lo_fd(req, parent), name, + (fi->flags | O_CREAT) & ~O_NOFOLLOW, mode); + if (fd == -1) + return (void) fuse_reply_err(req, errno); + + fi->fh = fd; + + err = lo_do_lookup(req, parent, name, &e); + if (err) + fuse_reply_err(req, err); + else + fuse_reply_create(req, &e, fi); +} + static void lo_open(fuse_req_t req, fuse_ino_t ino, - struct fuse_file_info *fi) + struct fuse_file_info *fi) { int fd; char buf[64]; @@ -495,6 +516,7 @@ static struct fuse_lowlevel_ops lo_oper = { .readdir = lo_readdir, .readdirplus = lo_readdirplus, .releasedir = lo_releasedir, + .create = lo_create, .open = lo_open, .release = lo_release, .read = lo_read, |