X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Flookup_table.c;h=38b9947ba814f0be1e655541c6156a9f8555fddb;hb=0dd190af48ac572f9e33ff9436ec8900fa6281a3;hp=e0cfaaf93f6d0b1838451d1ed0e5aa8e6d365a5c;hpb=0bf41495dd9e04585be10794d7745a5baa7165a5;p=wimlib diff --git a/src/lookup_table.c b/src/lookup_table.c index e0cfaaf9..38b9947b 100644 --- a/src/lookup_table.c +++ b/src/lookup_table.c @@ -66,6 +66,7 @@ struct lookup_table_entry *new_lookup_table_entry() lte->part_number = 1; lte->refcnt = 1; + INIT_LIST_HEAD(<e->lte_group_list); return lte; } @@ -173,7 +174,6 @@ lte_decrement_refcnt(struct lookup_table_entry *lte, struct lookup_table *table) return lte; } - /* * Calls a function on all the entries in the lookup table. Stop early and * return nonzero if any call to the function returns nonzero. @@ -390,15 +390,20 @@ int lookup_resource(WIMStruct *w, const char *path, struct lookup_table_entry **lte_ret, unsigned *stream_idx_ret) { - struct dentry *dentry = get_dentry(w, path); + struct dentry *dentry; struct lookup_table_entry *lte; - unsigned stream_idx = 0; - lte = dentry->lte; + unsigned stream_idx; + dentry = get_dentry(w, path); if (!dentry) return -ENOENT; + + wimlib_assert(dentry->resolved); + + lte = dentry->lte; if (!(lookup_flags & LOOKUP_FLAG_DIRECTORY_OK) && dentry_is_directory(dentry)) return -EISDIR; + stream_idx = 0; if (lookup_flags & LOOKUP_FLAG_ADS_OK) { const char *stream_name = path_stream_name(path); if (stream_name) { @@ -426,12 +431,6 @@ out: return 0; } -static int lte_init_lte_group_list(struct lookup_table_entry *lte, void *ignore) -{ - INIT_LIST_HEAD(<e->lte_group_list); - return 0; -} - /* Resolve a dentry's lookup table entries */ static int dentry_resolve_ltes(struct dentry *dentry, void *__table) { @@ -444,8 +443,9 @@ static int dentry_resolve_ltes(struct dentry *dentry, void *__table) list_add(&dentry->lte_group_list.list, <e->lte_group_list); else INIT_LIST_HEAD(&dentry->lte_group_list.list); - dentry->lte_group_list.type = STREAM_TYPE_NORMAL; dentry->lte = lte; + dentry->lte_group_list.type = STREAM_TYPE_NORMAL; + dentry->resolved = true; /* Alternate data streams */ if (dentry->link_group_master_status != GROUP_SLAVE) { @@ -468,6 +468,5 @@ static int dentry_resolve_ltes(struct dentry *dentry, void *__table) /* Resolve all the lookup table entries of a dentry tree */ void resolve_lookup_table_entries(struct dentry *root, struct lookup_table *table) { - for_lookup_table_entry(table, lte_init_lte_group_list, NULL); for_dentry_in_tree(root, dentry_resolve_ltes, table); }