]> wimlib.net Git - wimlib/blobdiff - include/wimlib/dentry.h
Add support for extract list files
[wimlib] / include / wimlib / dentry.h
index 2a40ef42ff64828c6b9861de27365e5ba0dd495d..f5140281e686af0ee8b80338c204f9a5517ad399 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;
@@ -414,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,
@@ -426,15 +432,10 @@ for_dentry_in_rbtree(struct rb_node *node,
                     int (*visitor)(struct wim_dentry *, void *),
                     void *arg);
 
-static inline int
+extern int
 for_dentry_child(const struct wim_dentry *dentry,
                 int (*visitor)(struct wim_dentry *, void *),
-                void *arg)
-{
-       return for_dentry_in_rbtree(dentry->d_inode->i_children.rb_node,
-                                   visitor,
-                                   arg);
-}
+                void *arg);
 
 extern int
 for_dentry_in_tree_depth(struct wim_dentry *root,