X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fresource.c;h=49de59a482f3e5900dc14aa066101da918f344be;hb=d125eeb310e7e4d3e4288293acc32997462a39ca;hp=a1268fbf8108f97898e402141b8e57916eb42806;hpb=da2c501c4ca54063126290c2103f607e926c9989;p=wimlib diff --git a/src/resource.c b/src/resource.c index a1268fbf..49de59a4 100644 --- a/src/resource.c +++ b/src/resource.c @@ -991,16 +991,20 @@ int read_metadata_resource(FILE *fp, int wim_ctype, struct image_metadata *imd) if (ret != 0) goto out_free_dentry_tree; + DEBUG("Reading dentry tree"); /* Now read the entire directory entry tree. */ ret = read_dentry_tree(buf, res_entry->original_size, dentry); if (ret != 0) goto out_free_dentry_tree; + DEBUG("Calculating dentry full paths"); /* Calculate the full paths in the dentry tree. */ ret = for_dentry_in_tree(dentry, calculate_dentry_full_path, NULL); if (ret != 0) goto out_free_dentry_tree; + DEBUG("Building link group table"); + /* Build hash table that maps hard link group IDs to dentry sets */ lgt = new_link_group_table(9001); if (!lgt) goto out_free_dentry_tree; @@ -1008,12 +1012,18 @@ int read_metadata_resource(FILE *fp, int wim_ctype, struct image_metadata *imd) if (ret != 0) goto out_free_lgt; + DEBUG("Freeing duplicate ADS entries in link group table"); + ret = link_groups_free_duplicate_data(lgt); + if (ret != 0) + goto out_free_lgt; + DEBUG("Done reading image metadata"); + imd->lgt = lgt; imd->security_data = sd; imd->root_dentry = dentry; goto out_free_buf; out_free_lgt: - free_link_group_table(sgt); + free_link_group_table(lgt); out_free_dentry_tree: free_dentry_tree(dentry, NULL, false); out_free_security_data: @@ -1082,6 +1092,9 @@ int write_metadata_resource(WIMStruct *w) if (ret != 0) return ret; + DEBUG("Updating metadata lookup table entry (size %zu)", + metadata_original_size); + /* Update the lookup table entry, including the hash and output resource * entry fields, for this image's metadata resource. */ lte = wim_metadata_lookup_table_entry(w); @@ -1106,12 +1119,11 @@ static int write_file_resource(WIMStruct *w, const u8 hash[]) /* Get the lookup entry for the file resource. */ struct lookup_table_entry *lte; - lte = lookup_resource(w->lookup_table, hash); + lte = __lookup_resource(w->lookup_table, hash); if (!lte) return 0; - /* No need to write file resources twice. (This indicates file - * resources that are part of a hard link set.) */ + /* No need to write file resources twice. */ if (++lte->out_refcnt != 1) return 0; @@ -1144,8 +1156,8 @@ static int write_file_resource(WIMStruct *w, const u8 hash[]) len = lte->resource_entry.original_size; - recompress_resource(in_fp, lte->symlink_buf, len, len, 0, - 0, out_fp, out_wim_ctype, &new_size); + ret = recompress_resource(NULL, lte->symlink_buf, len, len, 0, + 0, out_fp, out_wim_ctype, &new_size); output_res_entry->size = new_size; output_res_entry->original_size = len; output_res_entry->offset = offset;