passthrough_ll: document that fuse_ino_t and uintptr_t sizes must match
authorNikolaus Rath <Nikolaus@rath.org>
Thu, 25 May 2017 19:48:27 +0000 (12:48 -0700)
committerNikolaus Rath <Nikolaus@rath.org>
Thu, 25 May 2017 19:48:27 +0000 (12:48 -0700)
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

index ac566ad16bfcd1022fe569bb795c9648da0f7edc..772a822562c86e1375ebe1685cb864460809c6cb 100644 (file)
 #include <errno.h>
 #include <err.h>
 
+/* 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