From 73b6ff4b75cf1228ea61262c293fcb2fda5dfeea Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Sat, 15 Oct 2016 18:46:27 -0700 Subject: Pass fuse_file_info to getattr, chown, chmod, truncate, utimens handlers This obsoletes the ftruncate & fgetattr handlers. Fixes #58. --- lib/modules/iconv.c | 51 ++++++++++++++------------------------------------ lib/modules/subdir.c | 53 +++++++++++++++------------------------------------- 2 files changed, 29 insertions(+), 75 deletions(-) (limited to 'lib/modules') diff --git a/lib/modules/iconv.c b/lib/modules/iconv.c index 174e2b9..41a072c 100644 --- a/lib/modules/iconv.c +++ b/lib/modules/iconv.c @@ -101,26 +101,14 @@ err: return err; } -static int iconv_getattr(const char *path, struct stat *stbuf) +static int iconv_getattr(const char *path, struct stat *stbuf, + struct fuse_file_info *fi) { struct iconv *ic = iconv_get(); char *newpath; int err = iconv_convpath(ic, path, &newpath, 0); if (!err) { - err = fuse_fs_getattr(ic->next, newpath, stbuf); - free(newpath); - } - return err; -} - -static int iconv_fgetattr(const char *path, struct stat *stbuf, - struct fuse_file_info *fi) -{ - struct iconv *ic = iconv_get(); - char *newpath; - int err = iconv_convpath(ic, path, &newpath, 0); - if (!err) { - err = fuse_fs_fgetattr(ic->next, newpath, stbuf, fi); + err = fuse_fs_getattr(ic->next, newpath, stbuf, fi); free(newpath); } return err; @@ -315,62 +303,53 @@ static int iconv_link(const char *from, const char *to) return err; } -static int iconv_chmod(const char *path, mode_t mode) -{ - struct iconv *ic = iconv_get(); - char *newpath; - int err = iconv_convpath(ic, path, &newpath, 0); - if (!err) { - err = fuse_fs_chmod(ic->next, newpath, mode); - free(newpath); - } - return err; -} - -static int iconv_chown(const char *path, uid_t uid, gid_t gid) +static int iconv_chmod(const char *path, mode_t mode, + struct fuse_file_info *fi) { struct iconv *ic = iconv_get(); char *newpath; int err = iconv_convpath(ic, path, &newpath, 0); if (!err) { - err = fuse_fs_chown(ic->next, newpath, uid, gid); + err = fuse_fs_chmod(ic->next, newpath, mode, fi); free(newpath); } return err; } -static int iconv_truncate(const char *path, off_t size) +static int iconv_chown(const char *path, uid_t uid, gid_t gid, + struct fuse_file_info *fi) { struct iconv *ic = iconv_get(); char *newpath; int err = iconv_convpath(ic, path, &newpath, 0); if (!err) { - err = fuse_fs_truncate(ic->next, newpath, size); + err = fuse_fs_chown(ic->next, newpath, uid, gid, fi); free(newpath); } return err; } -static int iconv_ftruncate(const char *path, off_t size, +static int iconv_truncate(const char *path, off_t size, struct fuse_file_info *fi) { struct iconv *ic = iconv_get(); char *newpath; int err = iconv_convpath(ic, path, &newpath, 0); if (!err) { - err = fuse_fs_ftruncate(ic->next, newpath, size, fi); + err = fuse_fs_truncate(ic->next, newpath, size, fi); free(newpath); } return err; } -static int iconv_utimens(const char *path, const struct timespec ts[2]) +static int iconv_utimens(const char *path, const struct timespec ts[2], + struct fuse_file_info *fi) { struct iconv *ic = iconv_get(); char *newpath; int err = iconv_convpath(ic, path, &newpath, 0); if (!err) { - err = fuse_fs_utimens(ic->next, newpath, ts); + err = fuse_fs_utimens(ic->next, newpath, ts, fi); free(newpath); } return err; @@ -600,7 +579,6 @@ static const struct fuse_operations iconv_oper = { .destroy = iconv_destroy, .init = iconv_init, .getattr = iconv_getattr, - .fgetattr = iconv_fgetattr, .access = iconv_access, .readlink = iconv_readlink, .opendir = iconv_opendir, @@ -616,7 +594,6 @@ static const struct fuse_operations iconv_oper = { .chmod = iconv_chmod, .chown = iconv_chown, .truncate = iconv_truncate, - .ftruncate = iconv_ftruncate, .utimens = iconv_utimens, .create = iconv_create, .open = iconv_open_file, diff --git a/lib/modules/subdir.c b/lib/modules/subdir.c index a039b3c..c264fb4 100644 --- a/lib/modules/subdir.c +++ b/lib/modules/subdir.c @@ -52,26 +52,14 @@ static int subdir_addpath(struct subdir *d, const char *path, char **newpathp) return 0; } -static int subdir_getattr(const char *path, struct stat *stbuf) +static int subdir_getattr(const char *path, struct stat *stbuf, + struct fuse_file_info *fi) { struct subdir *d = subdir_get(); char *newpath; int err = subdir_addpath(d, path, &newpath); if (!err) { - err = fuse_fs_getattr(d->next, newpath, stbuf); - free(newpath); - } - return err; -} - -static int subdir_fgetattr(const char *path, struct stat *stbuf, - struct fuse_file_info *fi) -{ - struct subdir *d = subdir_get(); - char *newpath; - int err = subdir_addpath(d, path, &newpath); - if (!err) { - err = fuse_fs_fgetattr(d->next, newpath, stbuf, fi); + err = fuse_fs_getattr(d->next, newpath, stbuf, fi); free(newpath); } return err; @@ -301,62 +289,53 @@ static int subdir_link(const char *from, const char *to) return err; } -static int subdir_chmod(const char *path, mode_t mode) -{ - struct subdir *d = subdir_get(); - char *newpath; - int err = subdir_addpath(d, path, &newpath); - if (!err) { - err = fuse_fs_chmod(d->next, newpath, mode); - free(newpath); - } - return err; -} - -static int subdir_chown(const char *path, uid_t uid, gid_t gid) +static int subdir_chmod(const char *path, mode_t mode, + struct fuse_file_info *fi) { struct subdir *d = subdir_get(); char *newpath; int err = subdir_addpath(d, path, &newpath); if (!err) { - err = fuse_fs_chown(d->next, newpath, uid, gid); + err = fuse_fs_chmod(d->next, newpath, mode, fi); free(newpath); } return err; } -static int subdir_truncate(const char *path, off_t size) +static int subdir_chown(const char *path, uid_t uid, gid_t gid, + struct fuse_file_info *fi) { struct subdir *d = subdir_get(); char *newpath; int err = subdir_addpath(d, path, &newpath); if (!err) { - err = fuse_fs_truncate(d->next, newpath, size); + err = fuse_fs_chown(d->next, newpath, uid, gid, fi); free(newpath); } return err; } -static int subdir_ftruncate(const char *path, off_t size, - struct fuse_file_info *fi) +static int subdir_truncate(const char *path, off_t size, + struct fuse_file_info *fi) { struct subdir *d = subdir_get(); char *newpath; int err = subdir_addpath(d, path, &newpath); if (!err) { - err = fuse_fs_ftruncate(d->next, newpath, size, fi); + err = fuse_fs_truncate(d->next, newpath, size, fi); free(newpath); } return err; } -static int subdir_utimens(const char *path, const struct timespec ts[2]) +static int subdir_utimens(const char *path, const struct timespec ts[2], + struct fuse_file_info *fi) { struct subdir *d = subdir_get(); char *newpath; int err = subdir_addpath(d, path, &newpath); if (!err) { - err = fuse_fs_utimens(d->next, newpath, ts); + err = fuse_fs_utimens(d->next, newpath, ts, fi); free(newpath); } return err; @@ -582,7 +561,6 @@ static const struct fuse_operations subdir_oper = { .destroy = subdir_destroy, .init = subdir_init, .getattr = subdir_getattr, - .fgetattr = subdir_fgetattr, .access = subdir_access, .readlink = subdir_readlink, .opendir = subdir_opendir, @@ -598,7 +576,6 @@ static const struct fuse_operations subdir_oper = { .chmod = subdir_chmod, .chown = subdir_chown, .truncate = subdir_truncate, - .ftruncate = subdir_ftruncate, .utimens = subdir_utimens, .create = subdir_create, .open = subdir_open, -- cgit v1.2.3