]> wimlib.net Git - wimlib/blobdiff - src/dentry.h
ntfs-apply.c: Tweak NTFS inode closing some more
[wimlib] / src / dentry.h
index 68f118d8a2bdc3cc14e0d44840a53a0084a315c6..0d3f89e3b0de54b4386ad7c18dfe62216d6cfc09 100644 (file)
@@ -157,6 +157,8 @@ struct dentry {
        u16 file_name_utf8_len;
 
        u8 is_extracted : 1;
+       u8 visited : 1;
+       u8 canonical : 1;
 
        /* Byte 40 */
 
@@ -195,7 +197,6 @@ struct dentry {
         */
        u64 length;
 
-
        /* The offset, from the start of the uncompressed WIM metadata resource
         * for this image, of this dentry's child dentries.  0 if the directory
         * entry has no children, which is the case for regular files or reparse
@@ -206,7 +207,7 @@ struct dentry {
         * WIMStructs */
        u32 refcnt;
 
-       u32   full_path_utf8_len;
+       u32 full_path_utf8_len;
 
        /* Pointer to the UTF-16 short filename (malloc()ed buffer) */
        char *short_name;
@@ -252,6 +253,9 @@ struct inode {
        /* %true iff verify_inode() has run on this dentry. */
        u8 verified : 1;
 
+       /* temporary flag */
+       u8 visited    : 1;
+
        /* Number of alternate data streams associated with this inode */
        u16 num_ads;
 
@@ -283,7 +287,11 @@ struct inode {
        /* List of dentries that reference this inode (there should be
         * link_count of them) */
        struct list_head dentry_list;
+
        struct hlist_node hlist;
+
+       struct list_head lte_inode_list;
+
        char *extracted_file;
 
        /* Root of a red-black tree storing the children of this inode (if
@@ -311,15 +319,7 @@ struct inode {
                list_for_each_entry((dentry), &(inode)->dentry_list, inode_dentry_list)
 
 #define inode_add_dentry(dentry, inode) \
-       ({                                                              \
-               wimlib_assert((inode)->dentry_list.next != NULL);               \
-               list_add(&(dentry)->inode_dentry_list, &(inode)->dentry_list);  \
-       })
-
-static inline bool dentry_is_extracted(const struct dentry *dentry)
-{
-       return dentry->is_extracted;
-}
+               list_add_tail(&(dentry)->inode_dentry_list, &(inode)->dentry_list)
 
 static inline bool dentry_is_first_in_inode(const struct dentry *dentry)
 {
@@ -330,9 +330,6 @@ static inline bool dentry_is_first_in_inode(const struct dentry *dentry)
 
 extern u64 dentry_correct_total_length(const struct dentry *dentry);
 
-extern int inode_to_stbuf(const struct inode *inode,
-                         struct lookup_table_entry *lte, struct stat *stbuf);
-
 extern int for_dentry_in_tree(struct dentry *root,
                              int (*visitor)(struct dentry*, void*),
                              void *args);
@@ -361,7 +358,10 @@ extern struct dentry *get_parent_dentry(struct WIMStruct *w, const char *path);
 extern int print_dentry(struct dentry *dentry, void *lookup_table);
 extern int print_dentry_full_path(struct dentry *entry, void *ignore);
 
+#ifdef WITH_FUSE
 extern struct dentry *new_dentry(const char *name);
+#endif
+
 extern struct dentry *new_dentry_with_inode(const char *name);
 extern struct dentry *new_dentry_with_timeless_inode(const char *name);
 
@@ -377,9 +377,6 @@ extern void unlink_dentry(struct dentry *dentry);
 extern bool dentry_add_child(struct dentry * restrict parent,
                             struct dentry * restrict child);
 
-extern int verify_dentry(struct dentry *dentry, void *wim);
-
-
 extern struct ads_entry *inode_get_ads_entry(struct inode *inode,
                                             const char *stream_name,
                                             u16 *idx_ret);
@@ -423,11 +420,6 @@ static inline bool inode_is_symlink(const struct inode *inode)
                     inode->reparse_tag == WIM_IO_REPARSE_TAG_MOUNT_POINT);
 }
 
-static inline bool dentry_is_symlink(const struct dentry *dentry)
-{
-       return inode_is_symlink(dentry->d_inode);
-}
-
 static inline bool inode_is_regular_file(const struct inode *inode)
 {
        return !inode_is_directory(inode) && !inode_is_symlink(inode);