]> wimlib.net Git - wimlib/blobdiff - src/export_image.c
Refactor headers
[wimlib] / src / export_image.c
index 34564e222e2cd70b1748008fbbb1eaf8fd85c8f4..455baa9152bbd2050b4d98f118667013c86138e8 100644 (file)
  * 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;
 }