* 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,
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;
- if (dest_wim->hdr.total_parts != 1) {
- ERROR("Exporting an image to a split WIM is "
- "unsupported");
- return WIMLIB_ERR_SPLIT_UNSUPPORTED;
- }
+ ret = can_modify_wim(dest_wim);
+ if (ret)
+ return ret;
if (src_image == WIMLIB_ALL_IMAGES) {
if (src_wim->hdr.image_count > 1) {
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) {
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:
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;
}