aboutsummaryrefslogtreecommitdiffstats
path: root/lib/modules
diff options
context:
space:
mode:
authorYuri Per <yuri@acronis.com>2019-11-03 11:44:31 +0200
committerNikolaus Rath <Nikolaus@rath.org>2019-11-03 09:44:31 +0000
commitd735af94fa54a5555ce725f1d4e6b97b812b6603 (patch)
treecb21ee1eceb66e1c85a5c78ae7aa4a5f9438274a /lib/modules
parentb9c584370aa489ac00b1e8a0454c61f30c0531af (diff)
downloadlibfuse-d735af94fa54a5555ce725f1d4e6b97b812b6603.tar.gz
Implement lseek operation (#457)
Diffstat (limited to 'lib/modules')
-rw-r--r--lib/modules/iconv.c14
-rw-r--r--lib/modules/subdir.c14
2 files changed, 28 insertions, 0 deletions
diff --git a/lib/modules/iconv.c b/lib/modules/iconv.c
index 431d02c..eb5edd8 100644
--- a/lib/modules/iconv.c
+++ b/lib/modules/iconv.c
@@ -554,6 +554,19 @@ static int iconv_bmap(const char *path, size_t blocksize, uint64_t *idx)
return err;
}
+static off_t iconv_lseek(const char *path, off_t off, int whence,
+ struct fuse_file_info *fi)
+{
+ struct iconv *ic = iconv_get();
+ char *newpath;
+ int res = iconv_convpath(ic, path, &newpath, 0);
+ if (!res) {
+ res = fuse_fs_lseek(ic->next, newpath, off, whence, fi);
+ free(newpath);
+ }
+ return res;
+}
+
static void *iconv_init(struct fuse_conn_info *conn,
struct fuse_config *cfg)
{
@@ -612,6 +625,7 @@ static const struct fuse_operations iconv_oper = {
.lock = iconv_lock,
.flock = iconv_flock,
.bmap = iconv_bmap,
+ .lseek = iconv_lseek,
};
static const struct fuse_opt iconv_opts[] = {
diff --git a/lib/modules/subdir.c b/lib/modules/subdir.c
index 23f58f8..616c0ee 100644
--- a/lib/modules/subdir.c
+++ b/lib/modules/subdir.c
@@ -540,6 +540,19 @@ static int subdir_bmap(const char *path, size_t blocksize, uint64_t *idx)
return err;
}
+static off_t subdir_lseek(const char *path, off_t off, int whence,
+ struct fuse_file_info *fi)
+{
+ struct subdir *ic = subdir_get();
+ char *newpath;
+ int res = subdir_addpath(ic, path, &newpath);
+ if (!res) {
+ res = fuse_fs_lseek(ic->next, newpath, off, whence, fi);
+ free(newpath);
+ }
+ return res;
+}
+
static void *subdir_init(struct fuse_conn_info *conn,
struct fuse_config *cfg)
{
@@ -594,6 +607,7 @@ static const struct fuse_operations subdir_oper = {
.lock = subdir_lock,
.flock = subdir_flock,
.bmap = subdir_bmap,
+ .lseek = subdir_lseek,
};
static const struct fuse_opt subdir_opts[] = {