X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fexport_image.c;h=455baa9152bbd2050b4d98f118667013c86138e8;hb=19fd5bbc4f64cc8bf735f7c2c0bb864876998cf4;hp=34564e222e2cd70b1748008fbbb1eaf8fd85c8f4;hpb=7ce0d372fae285051cbc9740c9fa316d22465d9d;p=wimlib diff --git a/src/export_image.c b/src/export_image.c index 34564e22..455baa91 100644 --- a/src/export_image.c +++ b/src/export_image.c @@ -21,10 +21,17 @@ * along with wimlib; if not, see http://www.gnu.org/licenses/. */ -#include "wimlib_internal.h" -#include "dentry.h" -#include "lookup_table.h" -#include "xml.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "wimlib.h" +#include "wimlib/dentry.h" +#include "wimlib/error.h" +#include "wimlib/lookup_table.h" +#include "wimlib/metadata.h" +#include "wimlib/swm.h" +#include "wimlib/xml.h" static int inode_allocate_needed_ltes(struct wim_inode *inode, @@ -103,7 +110,6 @@ wimlib_export_image(WIMStruct *src_wim, wimlib_progress_func_t progress_func) { int ret; - struct wim_lookup_table *joined_tab, *src_wim_tab_save; struct wim_image_metadata *src_imd; struct list_head lte_list_head; struct wim_inode *inode; @@ -193,15 +199,8 @@ wimlib_export_image(WIMStruct *src_wim, if (ret) return ret; - if (num_additional_swms) { - ret = new_joined_lookup_table(src_wim, additional_swms, - num_additional_swms, - &joined_tab); - if (ret) - return ret; - src_wim_tab_save = src_wim->lookup_table; - src_wim->lookup_table = joined_tab; - } + if (num_additional_swms) + merge_lookup_tables(src_wim, additional_swms, num_additional_swms); ret = select_wim_image(src_wim, src_image); if (ret) { @@ -252,6 +251,12 @@ wimlib_export_image(WIMStruct *src_wim, if (export_flags & WIMLIB_EXPORT_FLAG_BOOT) dest_wim->hdr.boot_idx = dest_wim->hdr.image_count; + if (src_wim->hdr.flags & WIM_HDR_FLAG_RP_FIX) + { + /* Set the reparse point fixup flag on the destination WIM if + * the flag is set on the source WIM. */ + dest_wim->hdr.flags |= WIM_HDR_FLAG_RP_FIX; + } ret = 0; goto out; out_xml_delete_image: @@ -263,9 +268,7 @@ out_free_ltes: free_lookup_table_entry(lte); } out: - if (num_additional_swms) { - free_lookup_table(src_wim->lookup_table); - src_wim->lookup_table = src_wim_tab_save; - } + if (num_additional_swms) + unmerge_lookup_table(src_wim); return ret; }