aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Miklos Szeredi <miklos@szeredi.hu>2005-03-21 12:09:04 +0000
committerGravatar Miklos Szeredi <miklos@szeredi.hu>2005-03-21 12:09:04 +0000
commit4283ee7760e3fd5146750fc6f039c7db1504e742 (patch)
tree352062213a2e7213c0084753b122214526672770 /lib
parentd17da46055903a517274b7823d41fdd866f48d8d (diff)
fix
Diffstat (limited to 'lib')
-rw-r--r--lib/fuse.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/fuse.c b/lib/fuse.c
index b1aab25..9694239 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -103,6 +103,7 @@ static const char *opname(enum fuse_opcode opcode)
case FUSE_OPENDIR: return "OPENDIR";
case FUSE_READDIR: return "READDIR";
case FUSE_RELEASEDIR: return "RELEASEDIR";
+ case FUSE_FSYNCDIR: return "FSYNCDIR";
default: return "???";
}
}
@@ -1598,6 +1599,24 @@ static void do_releasedir(struct fuse *f, struct fuse_in_header *in,
send_reply(f, in, 0, NULL, 0);
}
+static void do_fsyncdir(struct fuse *f, struct fuse_in_header *in,
+ struct fuse_fsync_in *inarg)
+{
+ int res;
+ char *path;
+ struct fuse_file_info fi;
+
+ memset(&fi, 0, sizeof(fi));
+ res = -ENOENT;
+ path = get_path(f, in->nodeid);
+ if (path != NULL) {
+ res = -ENOSYS;
+ if (f->op.fsyncdir)
+ res = f->op.fsyncdir(path, inarg->fsync_flags & 1, &fi);
+ free(path);
+ }
+ send_reply(f, in, res, NULL, 0);
+}
static void free_cmd(struct fuse_cmd *cmd)
{
@@ -1741,6 +1760,10 @@ void fuse_process_cmd(struct fuse *f, struct fuse_cmd *cmd)
do_releasedir(f, in, (struct fuse_release_in *) inarg);
break;
+ case FUSE_FSYNCDIR:
+ do_fsyncdir(f, in, (struct fuse_fsync_in *) inarg);
+ break;
+
default:
send_reply(f, in, -ENOSYS, NULL, 0);
}