X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fdentry.h;h=e030acf03b27c3b9487b1d6217cf87ec6bf5ca04;hb=8ed5883780f52ea40dd47347a717dc4ccb7396c5;hp=03281447c7591816f4ea33b5c4fc82f025a6d8d7;hpb=038eaccece575d04de8d647bb93773b7f3e38ce4;p=wimlib diff --git a/src/dentry.h b/src/dentry.h index 03281447..e030acf0 100644 --- a/src/dentry.h +++ b/src/dentry.h @@ -4,6 +4,7 @@ #include "util.h" #include "config.h" #include "list.h" +#include "sha1.h" #include @@ -16,10 +17,6 @@ typedef struct WIMStruct WIMStruct; #define WIM_ADS_ENTRY_DISK_SIZE 38 -#ifndef WIM_HASH_SIZE -#define WIM_HASH_SIZE 20 -#endif - /* * Reparse tags documented at * http://msdn.microsoft.com/en-us/library/dd541667(v=prot.10).aspx @@ -58,7 +55,7 @@ struct lookup_table_entry; struct ads_entry { union { /* SHA-1 message digest of stream contents */ - u8 hash[WIM_HASH_SIZE]; + u8 hash[SHA1_HASH_SIZE]; /* The corresponding lookup table entry (only for resolved * streams) */ @@ -103,7 +100,7 @@ static inline bool ads_entry_has_name(const struct ads_entry *entry, } -/* In-memory structure for a directory entry. There is a directory tree for +/* In-memory structure for a WIM directory entry. There is a directory tree for * each image in the WIM. */ struct dentry { /* The parent of this directory entry. */ @@ -137,7 +134,7 @@ struct dentry { * entry's child files. 0 if the directory entry has no children. */ u64 subdir_offset; - /* Timestamps for the entry. The timestamps are the number of + /* Timestamps for the dentry. The timestamps are the number of * 100-nanosecond intervals that have elapsed since 12:00 A.M., January * 1st, 1601, UTC. */ u64 creation_time; @@ -155,7 +152,7 @@ struct dentry { * opposed to the alternate file streams, which may have their own * lookup table entries. */ union { - u8 hash[WIM_HASH_SIZE]; + u8 hash[SHA1_HASH_SIZE]; struct lookup_table_entry *lte; }; @@ -241,31 +238,6 @@ struct dentry { char *extracted_file; }; -/* Return hash of the "unnamed" (default) data stream. */ -static inline const u8 *dentry_hash(const struct dentry *dentry) -{ - wimlib_assert(!dentry->resolved); - /* If there are alternate data streams, the dentry hash field is zeroed - * out, and we need to find the hash in the un-named data stream (should - * be the first one, but check them in order just in case, and fall back - * to the dentry hash field if we can't find an unnamed data stream). */ - for (u16 i = 0; i < dentry->num_ads; i++) - if (dentry->ads_entries[i].stream_name_len == 0) - return dentry->ads_entries[i].hash; - return dentry->hash; -} - -/* Return lte for the "unnamed" (default) data stream. Only for resolved - * dentries */ -static inline struct lookup_table_entry * -dentry_lte(const struct dentry *dentry) -{ - wimlib_assert(dentry->resolved); - for (u16 i = 0; i < dentry->num_ads; i++) - if (dentry->ads_entries[i].stream_name_len == 0) - return dentry->ads_entries[i].lte; - return dentry->lte; -} /* Return the number of dentries in the hard link group */ static inline size_t dentry_link_group_size(const struct dentry *dentry) @@ -329,8 +301,7 @@ extern void free_dentry(struct dentry *dentry); extern void put_dentry(struct dentry *dentry); extern struct dentry *clone_dentry(struct dentry *old); extern void free_dentry_tree(struct dentry *root, - struct lookup_table *lookup_table, - bool lt_decrement_refcnt); + struct lookup_table *lookup_table); extern int increment_dentry_refcnt(struct dentry *dentry, void *ignore); extern int decrement_dentry_refcnt(struct dentry *dentry, void *ignore);