- get_u32(buf, &dentry_offset);
- if (dentry_offset == 0)
- dentry_offset = 8;
- dentry_offset = (dentry_offset + 7) & ~7;
-
- ret = read_dentry(buf, res_entry->original_size, dentry_offset, dentry);
- /* This is the root dentry, so set its pointers correctly. */
- dentry->parent = dentry;
- dentry->next = dentry;
- dentry->prev = dentry;
- 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;
- ret = for_dentry_in_tree(dentry, link_group_table_insert, lgt);
- 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(lgt);
-out_free_dentry_tree:
- free_dentry_tree(dentry, NULL);
-out_free_security_data:
- free_security_data(sd);
-out_free_buf:
- FREE(buf);
+ sha1_init(&sha_ctx);
+ ret = read_resource_prefix(lte, wim_resource_size(lte),
+ sha1_chunk, &sha_ctx, 0);
+ if (ret == 0)
+ sha1_final(lte->hash, &sha_ctx);