* error paths. */
u8 i_visited : 1;
- /* Set if the DOS name of an inode has already been extracted. */
- u8 i_dos_name_extracted : 1;
-
/* 1 iff all ADS entries of this inode are named or if this inode
* has no ADS entries */
u8 i_canonical_streams : 1;
* wim_dentry_on_disk'. */
u64 i_ino;
+ /* UNIX data (wimlib extension) */
+ struct wimlib_unix_data i_unix_data;
+
union {
/* Device number, used only during image capture, so we can
* identify hard linked files by the combination of inode number
* to 0 otherwise. */
u64 i_devno;
+ /* Fields used only during extraction */
struct {
-
- /* 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;
-
- /** Used only during image extraction: "cookie" that
- * identifies this extracted file (inode), for example
- * an inode number. Only used if supported by the
- * extraction mode. */
- u64 extract_cookie;
+ /* List of aliases of this dentry that are being
+ * extracted in the current extraction operation. This
+ * will be a (possibly nonproper) subset of the dentries
+ * in the i_dentry list. This list will be constructed
+ * regardless of whether the extraction backend supports
+ * hard links or not. */
+ struct list_head i_extraction_aliases;
+
+ #ifdef WITH_NTFS_3G
+ /* 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;
+ #endif
};
#ifdef WITH_FUSE
le16 stream_name_nbytes;
/* Stream name in UTF-16LE. It is @stream_name_nbytes bytes long,
- * excluding the the null terminator. There is a null terminator
+ * excluding the null terminator. There is a null terminator
* character if @stream_name_nbytes != 0; i.e., if this stream is named.
* */
utf16lechar stream_name[];
struct wim_lookup_table *lookup_table);
static inline bool
-ads_entry_is_unix_data(const struct wim_ads_entry *entry)
+ads_entry_is_named_stream(const struct wim_ads_entry *entry)
{
- return (entry->stream_name_nbytes ==
- WIMLIB_UNIX_DATA_TAG_UTF16LE_NBYTES) &&
- !memcmp(entry->stream_name, WIMLIB_UNIX_DATA_TAG_UTF16LE,
- WIMLIB_UNIX_DATA_TAG_UTF16LE_NBYTES);
+ return entry->stream_name_nbytes != 0;
}
static inline bool
-ads_entry_is_named_stream(const struct wim_ads_entry *entry)
+inode_has_unix_data(const struct wim_inode *inode)
{
- return entry->stream_name_nbytes != 0 && !ads_entry_is_unix_data(entry);
+ return inode->i_unix_data.mode != 0;
}
/* Is the inode a directory?
extern void
inode_ref_streams(struct wim_inode *inode);
+extern void
+inode_unref_streams(struct wim_inode *inode,
+ struct wim_lookup_table *lookup_table);
+
/* inode_fixup.c */
extern int
dentry_tree_fix_inodes(struct wim_dentry *root, struct list_head *inode_list);