]> wimlib.net Git - wimlib/blobdiff - include/wimlib/inode.h
Recognize tagged metadata items and use for UNIX data
[wimlib] / include / wimlib / inode.h
index a3f38b74ea4a96a9b5b8b6d48fe9212359d89aa4..8c6aa95fef8cdccb05c16dd759e804000b26b392 100644 (file)
@@ -5,7 +5,6 @@
 #include "wimlib/list.h"
 #include "wimlib/lookup_table.h"
 #include "wimlib/sha1.h"
-#include "wimlib/unix_data.h"
 
 #include <string.h>
 
@@ -99,9 +98,6 @@ struct wim_inode {
         * 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;
@@ -110,6 +106,15 @@ struct wim_inode {
         * entries for this inode.  */
        struct wim_ads_entry *i_ads_entries;
 
+       /* If not NULL, a pointer to the extra data that was read from the
+        * 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;
+
        /* 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
@@ -153,19 +158,22 @@ struct wim_inode {
                 * 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
@@ -335,19 +343,10 @@ extern void
 inode_remove_ads(struct wim_inode *inode, u16 idx,
                 struct wim_lookup_table *lookup_table);
 
-static inline bool
-ads_entry_is_unix_data(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);
-}
-
 static inline bool
 ads_entry_is_named_stream(const struct wim_ads_entry *entry)
 {
-       return entry->stream_name_nbytes != 0 && !ads_entry_is_unix_data(entry);
+       return entry->stream_name_nbytes != 0;
 }
 
 /* Is the inode a directory?