- /* Field to place this inode into a list. */
- union {
- /* Hash list node- used in hardlink.c when the inodes are placed
- * into a hash table keyed by inode number and optionally device
- * number, in order to detect dentries that are aliases for the
- * same inode. */
- struct hlist_node i_hlist;
-
- /* Normal list node- used to connect all the inodes of a WIM image
- * into a single linked list referenced from the
- * `struct wim_image_metadata' for that image. */
- struct list_head i_list;
- };
-
- /* Number of dentries that are aliases for this inode. */
- u32 i_nlink;
-
- /* Number of alternate data streams associated with this inode */
- u16 i_num_ads;
-
- /* Flag that indicates whether this inode's streams have been
- * "resolved". By default, the inode starts as "unresolved", meaning
- * that the i_hash field, along with the hash field of any associated
- * wim_ads_entry's, are valid and should be used as keys in the WIM
- * lookup table to find the associated `struct wim_lookup_table_entry'.
- * But if the inode has been resolved, then each of these fields is
- * replaced with a pointer directly to the appropriate `struct
- * wim_lookup_table_entry', or NULL if the stream is empty. */
- u8 i_resolved : 1;
-
- /* Flag used to mark this inode as visited; this is used when visiting
- * all the inodes in a dentry tree exactly once. It will be 0 by
- * default and must be cleared following the tree traversal, even in
- * error paths. */
- u8 i_visited : 1;
-
- /* Set if the DOS name of an inode has already been extracted. */
- u8 i_dos_name_extracted : 1;
-
- /* Pointer to a malloc()ed array of i_num_ads alternate data stream
- * entries for this inode. */
- struct wim_ads_entry *i_ads_entries;
-
- /* Creation time, last access time, and last write time for this inode, in
- * 100-nanosecond intervals since 12:00 a.m UTC January 1, 1601. They
- * should correspond to the times gotten by calling GetFileTime() on
- * Windows. */
- u64 i_creation_time;
- u64 i_last_access_time;
- u64 i_last_write_time;
-
- /* Corresponds to 'security_id' in `struct wim_dentry_on_disk': The
- * index of this inode's security descriptor in the WIM image's table of
- * security descriptors, or -1. Note: in verify_inode(), called
- * whenever a WIM image is loaded, out-of-bounds indices are set to -1,
- * so the extraction code does not need to do bounds checks. */
- int32_t i_security_id;
-
- /* Identity of a reparse point. See
- * http://msdn.microsoft.com/en-us/library/windows/desktop/aa365503(v=vs.85).aspx
- * for what a reparse point is. */
- u32 i_reparse_tag;
-
- /* Unused/unknown fields that we just read into memory so we can
- * re-write them unchanged. */
- u32 i_rp_unknown_1;
- u16 i_rp_unknown_2;
-
- /* Corresponds to not_rpfixed in `struct wim_dentry_on_disk': Set to 0
- * if reparse point fixups have been done. Otherwise set to 1. Note:
- * this actually may reflect the SYMBOLIC_LINK_RELATIVE flag.
- */
- u16 i_not_rpfixed;
-
- /* Inode number; corresponds to hard_link_group_id in the `struct
- * wim_dentry_on_disk'. */
- u64 i_ino;
-
- union {
- /* Device number, used only during image capture, so we can
- * identify hard linked files by the combination of inode number
- * and device number (rather than just inode number, which could
- * be ambigious if the captured tree spans a mountpoint). Set
- * to 0 otherwise. */
- u64 i_devno;
-
- /* Used only during image extraction: pointer to the first path
- * (malloc()ed buffer) at which this inode has been extracted.
- * Freed and set to NULL after the extraction is done (either
- * success or failure). */
- tchar *i_extracted_file;
-
-#ifdef WITH_FUSE
- /* Used only during image mount: Table of file descriptors that
- * have been opened to this inode. The table is automatically
- * freed when the last file descriptor is closed. */
- struct {
- struct wimfs_fd **i_fds;
- u16 i_num_opened_fds;
- u16 i_num_allocated_fds;
- };
-#endif
- };
-
- /* Next alternate data stream ID to be assigned */
- u32 i_next_stream_id;