diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2005-08-25 15:19:06 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2005-08-25 15:19:06 +0000 |
commit | ecce1bf2ff73eb37048a784df0fa97ad041c6bdd (patch) | |
tree | 21d192874d6e9ad229f3fbd74abd9e6cb0abe61b /lib/fuse_lowlevel.c | |
parent | b0c52c59f710b4619949adfc359dabfca005fe0d (diff) | |
download | libfuse-ecce1bf2ff73eb37048a784df0fa97ad041c6bdd.tar.gz |
fix
Diffstat (limited to 'lib/fuse_lowlevel.c')
-rw-r--r-- | lib/fuse_lowlevel.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c index 893f723..3bbc296 100644 --- a/lib/fuse_lowlevel.c +++ b/lib/fuse_lowlevel.c @@ -74,6 +74,7 @@ static const char *opname(enum fuse_opcode opcode) case FUSE_SETLKW: return "SETLKW"; case FUSE_ACCESS: return "ACCESS"; case FUSE_CREATE: return "CREATE"; + case FUSE_FSETATTR: return "FSETATTR"; default: return "???"; } } @@ -394,23 +395,33 @@ static void do_forget(fuse_req_t req, fuse_ino_t nodeid, static void do_getattr(fuse_req_t req, fuse_ino_t nodeid) { if (req->f->op.getattr) - req->f->op.getattr(req, nodeid); + req->f->op.getattr(req, nodeid, NULL); else fuse_reply_err(req, ENOSYS); } static void do_setattr(fuse_req_t req, fuse_ino_t nodeid, - struct fuse_setattr_in *arg) + struct fuse_setattr_in *arg, struct fuse_file_info *fi) { if (req->f->op.setattr) { struct stat stbuf; memset(&stbuf, 0, sizeof(stbuf)); convert_attr(&arg->attr, &stbuf); - req->f->op.setattr(req, nodeid, &stbuf, arg->valid); + req->f->op.setattr(req, nodeid, &stbuf, arg->valid, fi); } else fuse_reply_err(req, ENOSYS); } +static void do_fsetattr(fuse_req_t req, fuse_ino_t nodeid, + struct fuse_fsetattr_in *arg) +{ + struct fuse_file_info fi; + + memset(&fi, 0, sizeof(fi)); + fi.fh = arg->fh; + do_setattr(req, nodeid, &arg->setattr, &fi); +} + static void do_access(fuse_req_t req, fuse_ino_t nodeid, struct fuse_access_in *arg) { @@ -813,7 +824,11 @@ static void fuse_ll_process(void *data, const char *buf, size_t len, break; case FUSE_SETATTR: - do_setattr(req, in->nodeid, (struct fuse_setattr_in *) inarg); + do_setattr(req, in->nodeid, (struct fuse_setattr_in *) inarg, NULL); + break; + + case FUSE_FSETATTR: + do_fsetattr(req, in->nodeid, (struct fuse_fsetattr_in *) inarg); break; case FUSE_READLINK: |