From: Nikolaus Rath Date: Tue, 22 Aug 2017 11:46:14 +0000 (+0200) Subject: Make passthrough_fh work under FreeBSD. X-Git-Tag: fuse-3.2.0~23 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=f88a285cf28b41064f0ed4c5a7e360c97059f942;p=qemu-gpiodev%2Flibfuse.git Make passthrough_fh work under FreeBSD. --- 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;