fix up statfs interface
diff --git a/lib/fuse.c b/lib/fuse.c
index 9cc7028..3557c3b 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -77,9 +77,9 @@
pthread_mutex_t lock;
pthread_rwlock_t tree_lock;
void *user_data;
- uid_t uid;
- gid_t gid;
- mode_t umask;
+ unsigned int uid;
+ unsigned int gid;
+ unsigned int umask;
double entry_timeout;
double attr_timeout;
};
@@ -1527,15 +1527,15 @@
reply_err(req, err);
}
-static int default_statfs(struct statfs *buf)
+static int default_statfs(struct statvfs *buf)
{
- buf->f_namelen = 255;
+ buf->f_namemax = 255;
buf->f_bsize = 512;
return 0;
}
static void convert_statfs_compat(struct fuse_statfs_compat1 *compatbuf,
- struct statfs *stbuf)
+ struct statvfs *stbuf)
{
stbuf->f_bsize = compatbuf->block_size;
stbuf->f_blocks = compatbuf->blocks;
@@ -1543,28 +1543,43 @@
stbuf->f_bavail = compatbuf->blocks_free;
stbuf->f_files = compatbuf->files;
stbuf->f_ffree = compatbuf->files_free;
- stbuf->f_namelen = compatbuf->namelen;
+ stbuf->f_namemax = compatbuf->namelen;
+}
+
+static void convert_statfs_old(struct statfs *oldbuf, struct statvfs *stbuf)
+{
+ stbuf->f_bsize = oldbuf->f_bsize;
+ stbuf->f_blocks = oldbuf->f_blocks;
+ stbuf->f_bfree = oldbuf->f_bfree;
+ stbuf->f_bavail = oldbuf->f_bavail;
+ stbuf->f_files = oldbuf->f_files;
+ stbuf->f_ffree = oldbuf->f_ffree;
+ stbuf->f_namemax = oldbuf->f_namelen;
}
static void fuse_statfs(fuse_req_t req)
{
struct fuse *f = req_fuse_prepare(req);
- struct statfs buf;
+ struct statvfs buf;
int err;
- memset(&buf, 0, sizeof(struct statfs));
+ memset(&buf, 0, sizeof(buf));
if (f->op.statfs) {
- if (!f->compat || f->compat > 11)
- err = f->op.statfs("/", &buf);
- else {
+ err = f->op.statfs("/", &buf);
+ } else if (f->op.statfs_old) {
+ if (!f->compat || f->compat > 11) {
+ struct statfs oldbuf;
+ err = f->op.statfs_old("/", &oldbuf);
+ if (!err)
+ convert_statfs_old(&oldbuf, &buf);
+ } else {
struct fuse_statfs_compat1 compatbuf;
memset(&compatbuf, 0, sizeof(struct fuse_statfs_compat1));
err = ((struct fuse_operations_compat1 *) &f->op)->statfs(&compatbuf);
if (!err)
convert_statfs_compat(&compatbuf, &buf);
- }
- }
- else
+ }
+ } else
err = default_statfs(&buf);
if (!err)