X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fmetadata_resource.c;h=da3ca5402c976a4f67c434ea6486f3af0ba00cda;hb=a2993f836221de10e3f3e220d38aa4b72d367a61;hp=4f8be14161845874f757203700c5a4084e1251c4;hpb=c6e063fcb2b1ffa76df62ab902a38bf5f604d2e2;p=wimlib diff --git a/src/metadata_resource.c b/src/metadata_resource.c index 4f8be141..da3ca540 100644 --- a/src/metadata_resource.c +++ b/src/metadata_resource.c @@ -42,14 +42,13 @@ * * @return: Zero on success, nonzero on failure. */ -int read_metadata_resource(WIMStruct *w, struct image_metadata *imd) +int read_metadata_resource(WIMStruct *w, struct wim_image_metadata *imd) { u8 *buf; u32 dentry_offset; int ret; - struct dentry *dentry; - struct inode_table inode_tab; - const struct lookup_table_entry *metadata_lte; + struct wim_dentry *dentry; + const struct wim_lookup_table_entry *metadata_lte; u64 metadata_len; struct hlist_head inode_list; @@ -119,10 +118,10 @@ int read_metadata_resource(WIMStruct *w, struct image_metadata *imd) DEBUG("Reading root dentry"); /* Allocate memory for the root dentry and read it into memory */ - dentry = MALLOC(sizeof(struct dentry)); + dentry = MALLOC(sizeof(struct wim_dentry)); if (!dentry) { ERROR("Failed to allocate %zu bytes for root dentry", - sizeof(struct dentry)); + sizeof(struct wim_dentry)); ret = WIMLIB_ERR_NOMEM; goto out_free_security_data; } @@ -157,16 +156,7 @@ int read_metadata_resource(WIMStruct *w, struct image_metadata *imd) goto out_free_dentry_tree; /* Build hash table that maps hard link group IDs to dentry sets */ - DEBUG("Building link group table"); - ret = init_inode_table(&inode_tab, 9001); - if (ret != 0) - goto out_free_dentry_tree; - - for_dentry_in_tree(dentry, inode_table_insert, &inode_tab); - - DEBUG("Fixing inconsistencies in the hard link groups"); - ret = fix_inodes(&inode_tab, &inode_list); - destroy_inode_table(&inode_tab); + ret = dentry_tree_fix_inodes(dentry, &inode_list); if (ret != 0) goto out_free_dentry_tree; @@ -182,6 +172,8 @@ int read_metadata_resource(WIMStruct *w, struct image_metadata *imd) imd->root_dentry = dentry; imd->inode_list = inode_list; + if (imd->inode_list.first) + imd->inode_list.first->pprev = &imd->inode_list.first; goto out_free_buf; out_free_dentry_tree: free_dentry_tree(dentry, NULL); @@ -211,7 +203,7 @@ static int write_wim_resource_from_buffer(const u8 *buf, u64 buf_size, { /* Set up a temporary lookup table entry to provide to * write_wim_resource(). */ - struct lookup_table_entry lte; + struct wim_lookup_table_entry lte; int ret; lte.resource_entry.flags = 0; lte.resource_entry.original_size = buf_size; @@ -235,8 +227,8 @@ int write_metadata_resource(WIMStruct *w) u8 *p; int ret; u64 subdir_offset; - struct dentry *root; - struct lookup_table_entry *lte; + struct wim_dentry *root; + struct wim_lookup_table_entry *lte; u64 metadata_original_size; struct wim_security_data *sd;