aboutsummaryrefslogtreecommitdiffstats
path: root/lib/fuse_lowlevel.c
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@suse.cz>2011-12-05 15:21:28 +0100
committerMiklos Szeredi <mszeredi@suse.cz>2011-12-05 15:21:28 +0100
commite3f95263a703d45f091dcf9655806978d2577797 (patch)
treee08304ea520ec59e9a2b86b2d04b9b09ba152da8 /lib/fuse_lowlevel.c
parent6b12905b10b15c046b825c48eb8b9e677952d607 (diff)
downloadandroid_external_fuse-e3f95263a703d45f091dcf9655806978d2577797.tar.gz
android_external_fuse-e3f95263a703d45f091dcf9655806978d2577797.tar.bz2
android_external_fuse-e3f95263a703d45f091dcf9655806978d2577797.zip
Add support for ioctl on directories
Reported by Antonio SJ Musumeci
Diffstat (limited to 'lib/fuse_lowlevel.c')
-rw-r--r--lib/fuse_lowlevel.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index 885522f..8012d49 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -1647,6 +1647,12 @@ static void do_ioctl(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
void *in_buf = arg->in_size ? PARAM(arg) : NULL;
struct fuse_file_info fi;
+ if (flags & FUSE_IOCTL_DIR &&
+ !(req->f->conn.want & FUSE_CAP_IOCTL_DIR)) {
+ fuse_reply_err(req, ENOTTY);
+ return;
+ }
+
memset(&fi, 0, sizeof(fi));
fi.fh = arg->fh;
fi.fh_old = fi.fh;
@@ -1774,6 +1780,8 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
f->conn.want |= FUSE_CAP_SPLICE_READ;
#endif
}
+ if (req->f->conn.proto_minor >= 18)
+ f->conn.capable |= FUSE_CAP_IOCTL_DIR;
if (f->atomic_o_trunc)
f->conn.want |= FUSE_CAP_ATOMIC_O_TRUNC;