const struct resource_entry *res_entry;
struct dentry *dentry;
struct wim_security_data *sd;
+ struct link_group_table *lgt;
res_entry = &imd->metadata_lte->resource_entry;
if (ret != 0)
goto out_free_dentry_tree;
+ 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;
+
+ imd->lgt = lgt;
imd->security_data = sd;
- imd->root_dentry = dentry;
+ imd->root_dentry = dentry;
goto out_free_buf;
-out_free_security_data:
- free_security_data(sd);
+out_free_lgt:
+ free_link_group_table(lgt);
out_free_dentry_tree:
free_dentry_tree(dentry, NULL, false);
+out_free_security_data:
+ free_security_data(sd);
out_free_buf:
FREE(buf);
return ret;
/* 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;
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;