]> wimlib.net Git - wimlib/blobdiff - src/split.c
wimlib_split(): forbid splitting arbitrary WIMStructs
[wimlib] / src / split.c
index 88f9b2bd0feb844d7294ff499cf39693e3e8f1da..07106746f484885cbe90771b0c139007400ab3f5 100644 (file)
@@ -44,7 +44,7 @@ struct swm_part_info {
 static void
 copy_part_info(struct swm_part_info *dst, struct swm_part_info *src)
 {
-       list_transfer(&src->blob_list, &dst->blob_list);
+       list_replace(&src->blob_list, &dst->blob_list);
        dst->size = src->size;
 }
 
@@ -69,7 +69,7 @@ write_split_wim(WIMStruct *orig_wim, const tchar *swm_name,
        union wimlib_progress_info progress;
        unsigned part_number;
        int ret;
-       u8 guid[WIMLIB_GUID_LEN];
+       u8 guid[GUID_SIZE];
 
        swm_name_len = tstrlen(swm_name);
        swm_name_buf = alloca((swm_name_len + 20) * sizeof(tchar));
@@ -91,7 +91,7 @@ write_split_wim(WIMStruct *orig_wim, const tchar *swm_name,
                progress.split.total_bytes += swm_info->parts[part_number - 1].size;
        progress.split.total_parts = swm_info->num_parts;
 
-       randomize_byte_array(guid, WIMLIB_GUID_LEN);
+       generate_guid(guid);
 
        for (part_number = 1; part_number <= swm_info->num_parts; part_number++) {
                int part_write_flags;
@@ -219,6 +219,13 @@ wimlib_split(WIMStruct *wim, const tchar *swm_name,
                return WIMLIB_ERR_UNSUPPORTED;
        }
 
+       for (i = 0; i < wim->hdr.image_count; i++) {
+               if (!is_image_unchanged_from_wim(wim->image_metadata[i], wim)) {
+                       ERROR("Only an unmodified, on-disk WIM file can be split.");
+                       return WIMLIB_ERR_UNSUPPORTED;
+               }
+       }
+
        memset(&swm_info, 0, sizeof(swm_info));
        swm_info.max_part_size = part_size;