+union flist_extras {
+ uid_t uid; /* the user ID number */
+ uid_t gid; /* the group ID number or GID_NONE */
+ struct idev *idev; /* The hard-link info during matching */
+ struct hlist *hlist; /* The hard-link info after matching */
+ int32 num; /* A general-purpose number */
+};
+
+#define FLIST_EXTRA(f,j) ((union flist_extras *)(f))[-(j)]
+#define IS_HLINKED(f) ((f)->flags & FLAG_HLINK_INFO)
+
+/* When enabled, all entries have these: */
+#define F_UID(f) FLIST_EXTRA(f, preserve_uid).uid
+#define F_GID(f) FLIST_EXTRA(f, preserve_gid).gid
+
+/* These are per-entry optional and mutally exclusive: */
+#define F_IDEV(f) FLIST_EXTRA(f, flist_extra_ndx).idev
+#define F_HLIST(f) FLIST_EXTRA(f, flist_extra_ndx).hlist
+
+/* These are per-entry optional, but always both or neither: */
+#define F_DMAJOR(f) FLIST_EXTRA(f, flist_extra_ndx + (IS_HLINKED(f)? 1 : 0)).num
+#define F_DMINOR(f) FLIST_EXTRA(f, flist_extra_ndx + (IS_HLINKED(f)? 2 : 1)).num
+
+/* This is the first string past the struct (mutually exclusive). */
+#define F_SYMLINK(f) ((char*)(f) + file_struct_len)
+#define F_SUM(f) F_SYMLINK(f)
+