From 8641db4af724682fb1c922cbecf6c7e1dfe1a71c Mon Sep 17 00:00:00 2001 From: Nikolaus Rath Date: Thu, 25 May 2017 12:48:27 -0700 Subject: 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. --- example/passthrough_ll.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'example') 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 -- cgit v1.2.3