X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=include%2Fwimlib%2Finode.h;h=610220988b31c7bf9b87df060a896b572bfe307d;hp=514621264f17cb58e5a349bfa6b0cdc072585075;hb=1fbda1dbe72721908b1f99f9f8abf1749e43f4c5;hpb=588b06dbb0267153119678118a9cd618bfa01c19 diff --git a/include/wimlib/inode.h b/include/wimlib/inode.h index 51462126..61022098 100644 --- a/include/wimlib/inode.h +++ b/include/wimlib/inode.h @@ -10,6 +10,7 @@ struct avl_tree_node; struct blob_descriptor; struct blob_table; struct wim_dentry; +struct wim_inode_extra; struct wim_security_data; struct wimfs_fd; @@ -106,17 +107,11 @@ struct wim_inode { u32 i_attributes; /* Root of a balanced binary search tree storing the child directory - * entries of this inode, if any. Keyed by wim_dentry->d_name, case - * sensitively. If this inode is not a directory or if it has no - * children then this will be an empty tree (NULL). */ + * entries of this inode, if any, indexed by filename. If this inode is + * not a directory or if it has no children then this will be an empty + * tree (NULL). */ struct avl_tree_node *i_children; - /* Root of a balanced binary search tree storing the child directory - * entries of this inode, if any. Keyed by wim_dentry->d_name, case - * insensitively. If this inode is not a directory or if it has no - * children then this will be an empty tree (NULL). */ - struct avl_tree_node *i_children_ci; - /* List of dentries that are aliases for this inode. There will be * i_nlink dentries in this list. */ struct hlist_head i_alias_list; @@ -140,10 +135,7 @@ struct wim_inode { * dentry. This should be a series of tagged items, each of which * represents a bit of extra metadata, such as the file's object ID. * See tagged_items.c for more information. */ - void *i_extra; - - /* Size of @i_extra buffer in bytes. If 0, there is no extra data. */ - size_t i_extra_size; + struct wim_inode_extra *i_extra; /* 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. @@ -193,7 +185,7 @@ struct wim_inode { struct wim_dentry *i_first_extraction_alias; #ifdef WITH_NTFS_3G - /* In NTFS-3g extraction mode, this is set to the Master + /* In NTFS-3G extraction mode, this is set to the Master * File Table (MFT) number of the NTFS file that was * created for this inode. */ u64 i_mft_no; @@ -228,6 +220,16 @@ struct wim_inode { /* Next stream ID to be assigned */ u32 i_next_stream_id; + +#ifdef ENABLE_TEST_SUPPORT + struct wim_inode *i_corresponding; +#endif +}; + +/* Optional extra data for a WIM inode */ +struct wim_inode_extra { + size_t size; /* Size of the extra data in bytes */ + u8 data[] _aligned_attribute(8); /* The extra data */ }; /* @@ -237,6 +239,7 @@ struct wim_inode { */ #define WIM_IO_REPARSE_TAG_MOUNT_POINT 0xA0000003 #define WIM_IO_REPARSE_TAG_SYMLINK 0xA000000C +#define WIM_IO_REPARSE_TAG_DEDUP 0x80000013 #define WIM_IO_REPARSE_TAG_WOF 0x80000017 /* Flags for the rp_flags field. Currently the only known flag is NOT_FIXED,