From: Nikolaus Rath Date: Thu, 25 May 2017 19:48:27 +0000 (-0700) Subject: passthrough_ll: document that fuse_ino_t and uintptr_t sizes must match X-Git-Tag: fuse-3.1.0~26 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=8641db4af724682fb1c922cbecf6c7e1dfe1a71c;p=qemu-gpiodev%2Flibfuse.git passthrough_ll: document that fuse_ino_t and uintptr_t sizes must match We can consider changing the code to drop the requirement if it turns out that there's a system where this isn't given. Fixes issue #167. --- diff --git a/example/passthrough_ll.c b/example/passthrough_ll.c index ac566ad..772a822 100644 --- a/example/passthrough_ll.c +++ b/example/passthrough_ll.c @@ -47,6 +47,19 @@ #include #include +/* We are re-using pointers to our `struct lo_inode` and `struct + lo_dirp` elements as inodes. This means that we require uintptr_t + and fuse_ino_t to have the same size. The following incantation + defines a compile time assert for this requirement. */ +#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 6) && !defined __cplusplus +_Static_assert(sizeof(fuse_ino_t) == sizeof(uintptr_t), "fuse: off_t must be 64bit"); +#else +struct _uintptr_to_must_hold_fuse_ino_t_dummy_struct \ + { unsigned _uintptr_to_must_hold_fuse_ino_t: + ((sizeof(fuse_ino_t) == sizeof(uintptr_t)) ? 1 : -1); }; +#endif + + /* Compat stuff. Doesn't make it work, just makes it compile. */ #ifndef HAVE_FSTATAT #warning fstatat(2) needed by this program