diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2005-11-07 15:30:48 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2005-11-07 15:30:48 +0000 |
commit | c706ad9ca07dff0ef4abd69b008bb7819d3bf1f7 (patch) | |
tree | cdbf03a011c517ea2a1cded0ad96e93395f6ca78 /lib | |
parent | 52cb09d16ed7e233c35c0c33e72a952211a056b3 (diff) | |
download | libfuse-c706ad9ca07dff0ef4abd69b008bb7819d3bf1f7.tar.gz |
fix
Diffstat (limited to 'lib')
-rw-r--r-- | lib/fuse.c | 4 | ||||
-rw-r--r-- | lib/fuse_lowlevel.c | 25 | ||||
-rw-r--r-- | lib/fuse_versionscript | 12 |
3 files changed, 36 insertions, 5 deletions
@@ -1569,7 +1569,7 @@ static void fuse_statfs(fuse_req_t req) } else if (f->op.statfs_old) { if (!f->compat || f->compat > 11) { struct statfs oldbuf; - err = f->op.statfs_old("/", &oldbuf); + err = ((struct fuse_operations_compat22 *) &f->op)->statfs("/", &oldbuf); if (!err) convert_statfs_old(&oldbuf, &buf); } else { @@ -1578,7 +1578,7 @@ static void fuse_statfs(fuse_req_t req) err = ((struct fuse_operations_compat1 *) &f->op)->statfs(&compatbuf); if (!err) convert_statfs_compat(&compatbuf, &buf); - } + } } else err = default_statfs(&buf); diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c index 9edef54..ad6b241 100644 --- a/lib/fuse_lowlevel.c +++ b/lib/fuse_lowlevel.c @@ -17,6 +17,7 @@ #include <limits.h> #include <errno.h> #include <stdint.h> +#include <sys/statfs.h> #define PARAM(inarg) (((char *)(inarg)) + sizeof(*(inarg))) @@ -197,6 +198,18 @@ static void convert_statfs(const struct statvfs *stbuf, kstatfs->namelen = stbuf->f_namemax; } +static void convert_statfs_compat(const struct statfs *stbuf, + struct fuse_kstatfs *kstatfs) +{ + kstatfs->bsize = stbuf->f_bsize; + kstatfs->blocks = stbuf->f_blocks; + kstatfs->bfree = stbuf->f_bfree; + kstatfs->bavail = stbuf->f_bavail; + kstatfs->files = stbuf->f_files; + kstatfs->ffree = stbuf->f_ffree; + kstatfs->namelen = stbuf->f_namelen; +} + static int send_reply_ok(fuse_req_t req, const void *arg, size_t argsize) { return send_reply(req, 0, arg, argsize); @@ -330,6 +343,16 @@ int fuse_reply_statfs(fuse_req_t req, const struct statvfs *stbuf) return send_reply_ok(req, &arg, sizeof(arg)); } +int fuse_reply_statfs_compat(fuse_req_t req, const struct statfs *stbuf) +{ + struct fuse_statfs_out arg; + + memset(&arg, 0, sizeof(arg)); + convert_statfs_compat(stbuf, &arg.st); + + return send_reply_ok(req, &arg, sizeof(arg)); +} + int fuse_reply_xattr(fuse_req_t req, size_t count) { struct fuse_getxattr_out arg; @@ -954,3 +977,5 @@ struct fuse_session *fuse_lowlevel_new(const char *opts, out: return NULL; } + +__asm__(".symver fuse_reply_statfs_compat,fuse_reply_statfs@FUSE_2.4"); diff --git a/lib/fuse_versionscript b/lib/fuse_versionscript index 3969c42..9f17c99 100644 --- a/lib/fuse_versionscript +++ b/lib/fuse_versionscript @@ -46,11 +46,9 @@ FUSE_2.4 { fuse_reply_buf; fuse_reply_entry; fuse_reply_err; - fuse_reply_getlk; fuse_reply_none; fuse_reply_open; fuse_reply_readlink; - fuse_reply_statfs; fuse_reply_write; fuse_reply_xattr; fuse_req_ctx; @@ -65,6 +63,14 @@ FUSE_2.4 { fuse_session_next_chan; fuse_session_process; fuse_session_reset; +} FUSE_2.2; + +FUSE_2.5 { + global: + fuse_reply_statfs; + fuse_reply_create; + fuse_reply_statfs_compat; + local: *; -} FUSE_2.2; +} FUSE_2.4; |