]> wimlib.net Git - wimlib/blobdiff - include/wimlib/dentry.h
write.c: Do not raw-copy packed resources
[wimlib] / include / wimlib / dentry.h
index 8676e8e0415df5815923e62e1765ca52ca1425bc..a2735e5ef3e02fa5a8c00072f9279fcb2e7aaa92 100644 (file)
@@ -159,6 +159,12 @@ struct wim_dentry {
         * characters).  Otherwise this will always be 0. */
        u8 extraction_skipped : 1;
 
+       /* For extraction operations, this flag will be set on dentries in the
+        * tree being extracted.  */
+       u8 in_extraction_tree : 1;
+
+       /* During extraction extractions, this flag will be set after the
+        * "skeleton" of the dentry has been extracted.  */
        u8 skeleton_extracted : 1;
 
        /* When capturing from a NTFS volume using NTFS-3g, this flag is set on
@@ -224,10 +230,6 @@ struct wim_dentry {
         * alias file_name.  */
        tchar *extraction_name;
        size_t extraction_name_nchars;
-
-       /* (Extraction only) List head for building a list of dentries that
-        * contain a certain stream. */
-       struct list_head extraction_stream_list;
 };
 
 #define rbnode_dentry(node) container_of(node, struct wim_dentry, rb_node)
@@ -294,7 +296,7 @@ struct wim_inode {
        /* Number of dentries that are aliases for this inode.  */
        u32 i_nlink;
 
-       /* Number of alternate data streams associated with this inode */
+       /* Number of alternate data streams (ADS) associated with this inode */
        u16 i_num_ads;
 
        /* Flag that indicates whether this inode's streams have been
@@ -316,6 +318,10 @@ struct wim_inode {
        /* 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;
+
        /* Pointer to a malloc()ed array of i_num_ads alternate data stream
         * entries for this inode.  */
        struct wim_ads_entry *i_ads_entries;
@@ -382,14 +388,15 @@ struct wim_inode {
                /* 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;
 };
@@ -413,7 +420,7 @@ dentry_is_first_in_inode(const struct wim_dentry *dentry)
 }
 
 extern u64
-dentry_correct_total_length(const struct wim_dentry *dentry);
+dentry_out_total_length(const struct wim_dentry *dentry);
 
 extern int
 for_dentry_in_tree(struct wim_dentry *root,
@@ -491,6 +498,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);