From f88a285cf28b41064f0ed4c5a7e360c97059f942 Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Tue, 22 Aug 2017 13:46:14 +0200 Subject: [PATCH] Make passthrough_fh work under FreeBSD. --- ChangeLog.rst | 2 ++ example/passthrough_fh.c | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/ChangeLog.rst b/ChangeLog.rst index a724709..396b2d6 100644 --- a/ChangeLog.rst +++ b/ChangeLog.rst @@ -4,6 +4,8 @@ Unreleased Changes * Documented the special meaning of the *zero* offset for the fuse_fill_dir_t function. +* The `passthrough_fh` example now works under FreeBSD. + * libfuse can now be build without libiconv. * Fixed support for `FUSE_CAP_POSIX_ACL`: setting this capability diff --git a/example/passthrough_fh.c b/example/passthrough_fh.c index 909422a..2b1ed1c 100644 --- a/example/passthrough_fh.c +++ b/example/passthrough_fh.c @@ -151,7 +151,13 @@ static int xmp_readdir(const char *path, void *buf, fuse_fill_dir_t filler, (void) path; if (offset != d->offset) { +#ifndef __FreeBSD__ seekdir(d->dp, offset); +#else + /* Subtract the one that we add when calling + telldir() below */ + seekdir(d->dp, offset-1); +#endif d->entry = NULL; d->offset = offset; } @@ -181,6 +187,13 @@ static int xmp_readdir(const char *path, void *buf, fuse_fill_dir_t filler, st.st_mode = d->entry->d_type << 12; } nextoff = telldir(d->dp); +#ifdef __FreeBSD__ + /* Under FreeBSD, telldir() may return 0 the first time + it is called. But for libfuse, an offset of zero + means that offsets are not supported, so we shift + everything by one. */ + nextoff++; +#endif if (filler(buf, d->entry->d_name, &st, nextoff, fill_flags)) break; -- 2.30.2