]> wimlib.net Git - wimlib/blobdiff - include/wimlib/dentry.h
wimlib-imagex, wimlib: Optimize appending new image as update of existing
[wimlib] / include / wimlib / dentry.h
index 6d8c557ee0b1bb7a752f1c922780ff50738152b7..2a40ef42ff64828c6b9861de27365e5ba0dd495d 100644 (file)
@@ -159,6 +159,8 @@ struct wim_dentry {
         * characters).  Otherwise this will always be 0. */
        u8 extraction_skipped : 1;
 
+       u8 skeleton_extracted : 1;
+
        /* When capturing from a NTFS volume using NTFS-3g, this flag is set on
         * dentries that were created from a filename in the WIN32 or WIN32+DOS
         * namespaces rather than the POSIX namespace.  Otherwise this will
@@ -311,6 +313,9 @@ 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;
+
        /* Pointer to a malloc()ed array of i_num_ads alternate data stream
         * entries for this inode.  */
        struct wim_ads_entry *i_ads_entries;
@@ -358,24 +363,34 @@ struct wim_inode {
                 * 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;
+               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;
+               };
 
 #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;
-               };
+               struct wimfs_fd **i_fds;
 #endif
        };
 
+#ifdef WITH_FUSE
+       u16 i_num_opened_fds;
+       u16 i_num_allocated_fds;
+#endif
+
        /* Next alternate data stream ID to be assigned */
        u32 i_next_stream_id;
 };
@@ -477,6 +492,9 @@ new_dentry_with_inode(const tchar *name, struct wim_dentry **dentry_ret);
 extern int
 new_dentry_with_timeless_inode(const tchar *name, struct wim_dentry **dentry_ret);
 
+extern void
+dentry_tree_clear_inode_visited(struct wim_dentry *root);
+
 extern int
 new_filler_directory(const tchar *name, struct wim_dentry **dentry_ret);
 
@@ -575,7 +593,7 @@ inode_get_unix_data(const struct wim_inode *inode,
 extern int
 inode_set_unix_data(struct wim_inode *inode, uid_t uid, gid_t gid, mode_t mode,
                    struct wim_lookup_table *lookup_table, int which);
-#endif /* __WIN32__ */
+#endif /* !__WIN32__ */
 
 extern bool
 inode_has_unix_data(const struct wim_inode *inode);