From f88a285cf28b41064f0ed4c5a7e360c97059f942 Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Tue, 22 Aug 2017 13:46:14 +0200 Subject: Make passthrough_fh work under FreeBSD. --- example/passthrough_fh.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'example/passthrough_fh.c') 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; -- cgit v1.2.3