X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fdentry.h;h=b51000a28ff871949caae9f28a1439903fdbb34b;hp=e1051321ea499ae3f45fc38a79ec6fad77ac81c9;hb=aa882e9bb92d998707484d7f6f56e9cf109a7c62;hpb=8191ca50a47773d20e94ffb85bedefe199166484 diff --git a/src/dentry.h b/src/dentry.h index e1051321..b51000a2 100644 --- a/src/dentry.h +++ b/src/dentry.h @@ -83,6 +83,8 @@ struct ads_entry { char *stream_name_utf8; #ifdef WITH_FUSE + /* Number to identify an alternate data stream even after it's possibly + * been moved or renamed. */ u32 stream_id; #endif }; @@ -126,7 +128,7 @@ static inline bool ads_entries_have_same_name(const struct ads_entry *entry_1, */ struct dentry { /* The inode for this dentry */ - struct inode *inode; + struct inode *d_inode; /* The parent of this directory entry. */ struct dentry *parent; @@ -294,6 +296,12 @@ static inline bool dentry_is_extracted(const struct dentry *dentry) return dentry->is_extracted; } +static inline bool dentry_is_first_in_inode(const struct dentry *dentry) +{ + return container_of(dentry->d_inode->dentry_list.next, + struct dentry, + inode_dentry_list) == dentry; +} extern u64 dentry_correct_total_length(const struct dentry *dentry); @@ -340,21 +348,12 @@ extern int increment_dentry_refcnt(struct dentry *dentry, void *ignore); extern void unlink_dentry(struct dentry *dentry); extern void link_dentry(struct dentry *dentry, struct dentry *parent); -extern void calculate_dir_tree_statistics(struct dentry *root, - struct lookup_table *table, - u64 *dir_count_ret, - u64 *file_count_ret, - u64 *total_bytes_ret, - u64 *hard_link_bytes_ret); - 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); -extern void inode_free_ads_entries(struct inode *inode); - extern struct ads_entry *inode_add_ads(struct inode *dentry, const char *stream_name); @@ -377,7 +376,7 @@ static inline bool dentry_is_root(const struct dentry *dentry) static inline bool dentry_is_first_sibling(const struct dentry *dentry) { - return dentry_is_root(dentry) || dentry->parent->inode->children == dentry; + return dentry_is_root(dentry) || dentry->parent->d_inode->children == dentry; } static inline bool dentry_is_only_child(const struct dentry *dentry) @@ -393,7 +392,7 @@ static inline bool inode_is_directory(const struct inode *inode) static inline bool dentry_is_directory(const struct dentry *dentry) { - return inode_is_directory(dentry->inode); + return inode_is_directory(dentry->d_inode); } /* For our purposes, we consider "real" symlinks and "junction points" to both @@ -407,7 +406,7 @@ static inline bool inode_is_symlink(const struct inode *inode) static inline bool dentry_is_symlink(const struct dentry *dentry) { - return inode_is_symlink(dentry->inode); + return inode_is_symlink(dentry->d_inode); } static inline bool inode_is_regular_file(const struct inode *inode) @@ -417,12 +416,12 @@ static inline bool inode_is_regular_file(const struct inode *inode) static inline bool dentry_is_regular_file(const struct dentry *dentry) { - return inode_is_regular_file(dentry->inode); + return inode_is_regular_file(dentry->d_inode); } static inline bool dentry_is_empty_directory(const struct dentry *dentry) { - return dentry_is_directory(dentry) && dentry->inode->children == NULL; + return dentry_is_directory(dentry) && dentry->d_inode->children == NULL; } #endif