X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fexport_image.c;h=34564e222e2cd70b1748008fbbb1eaf8fd85c8f4;hp=7e6d2789e198c93475462f5fcb21f265839ed7d3;hb=1f2091f5bb860769e20105af2d9eff3a0872c57b;hpb=13c6ce3160fce7c40008d1d182325c8b42450d1e diff --git a/src/export_image.c b/src/export_image.c index 7e6d2789..34564e22 100644 --- a/src/export_image.c +++ b/src/export_image.c @@ -47,7 +47,8 @@ inode_allocate_needed_ltes(struct wim_inode *inode, dest_lte = clone_lookup_table_entry(src_lte); if (!dest_lte) return WIMLIB_ERR_NOMEM; - list_add_tail(&dest_lte->staging_list, lte_list_head); + list_add_tail(&dest_lte->export_stream_list, + lte_list_head); } } } @@ -76,7 +77,7 @@ inode_move_ltes_to_table(struct wim_inode *inode, list_del(next); dest_lte = container_of(next, struct wim_lookup_table_entry, - staging_list); + export_stream_list); dest_lte->part_number = 1; dest_lte->refcnt = 0; wimlib_assert(hashes_equal(dest_lte->hash, src_lte->hash)); @@ -104,7 +105,6 @@ wimlib_export_image(WIMStruct *src_wim, int ret; struct wim_lookup_table *joined_tab, *src_wim_tab_save; struct wim_image_metadata *src_imd; - struct hlist_node *cur_node; struct list_head lte_list_head; struct wim_inode *inode; @@ -186,6 +186,13 @@ wimlib_export_image(WIMStruct *src_wim, if (ret) return ret; + ret = wim_checksum_unhashed_streams(src_wim); + if (ret) + return ret; + ret = wim_checksum_unhashed_streams(dest_wim); + if (ret) + return ret; + if (num_additional_swms) { ret = new_joined_lookup_table(src_wim, additional_swms, num_additional_swms, @@ -209,7 +216,7 @@ wimlib_export_image(WIMStruct *src_wim, for_lookup_table_entry(src_wim->lookup_table, lte_zero_out_refcnt, NULL); src_imd = wim_get_current_image_metadata(src_wim); INIT_LIST_HEAD(<e_list_head); - hlist_for_each_entry(inode, cur_node, &src_imd->inode_list, i_hlist) { + image_for_each_inode(inode, src_imd) { ret = inode_allocate_needed_ltes(inode, src_wim->lookup_table, dest_wim->lookup_table, @@ -231,11 +238,12 @@ wimlib_export_image(WIMStruct *src_wim, /* The `struct image_metadata' is now referenced by both the @src_wim * and the @dest_wim. */ src_imd->refcnt++; + src_imd->modified = 1; /* All memory allocations have been taken care of, so it's no longer * possible for this function to fail. Go ahead and update the lookup * table of the destination WIM and the boot index, if needed. */ - hlist_for_each_entry(inode, cur_node, &src_imd->inode_list, i_hlist) { + image_for_each_inode(inode, src_imd) { inode_move_ltes_to_table(inode, src_wim->lookup_table, dest_wim->lookup_table, @@ -251,7 +259,7 @@ out_xml_delete_image: out_free_ltes: { struct wim_lookup_table_entry *lte, *tmp; - list_for_each_entry_safe(lte, tmp, <e_list_head, staging_list) + list_for_each_entry_safe(lte, tmp, <e_list_head, export_stream_list) free_lookup_table_entry(lte); } out: