fix
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 @@
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_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 @@
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: