]> wimlib.net Git - wimlib/blobdiff - src/split.c
Add wimlib_get_version()
[wimlib] / src / split.c
index dd4ba27874603ea83addeca310149b83c31435aa..d1317cf9d44f0ce82b810e65b1f53f28852d43c7 100644 (file)
@@ -115,7 +115,7 @@ write_split_wim(WIMStruct *orig_wim, const tchar *swm_name,
                                      &progress);
                }
 
-               part_write_flags = write_flags & WIMLIB_WRITE_MASK_PUBLIC;
+               part_write_flags = write_flags;
                part_write_flags |= WIMLIB_WRITE_FLAG_USE_EXISTING_TOTALBYTES;
                if (part_number != 1)
                        part_write_flags |= WIMLIB_WRITE_FLAG_NO_METADATA;
@@ -148,7 +148,15 @@ add_stream_to_swm(struct wim_lookup_table_entry *lte, void *_swm_info)
        struct swm_info *swm_info = _swm_info;
        u64 stream_size;
 
-       stream_size = lte->resource_entry.size;
+       if (lte_is_partial(lte)) {
+               ERROR("Splitting of WIM containing packed streams is not supported.\n"
+                     "        Export it in the default format first.");
+               return WIMLIB_ERR_UNSUPPORTED;
+       }
+       if (lte->resource_location == RESOURCE_IN_WIM)
+               stream_size = lte->rspec->size_in_wim;
+       else
+               stream_size = lte->size;
 
        /* - Start first part if no parts have been started so far;
         * - Start next part if adding this stream exceeds maximum part size,
@@ -158,7 +166,7 @@ add_stream_to_swm(struct wim_lookup_table_entry *lte, void *_swm_info)
        if (swm_info->num_parts == 0 ||
            ((swm_info->parts[swm_info->num_parts - 1].size +
                        stream_size >= swm_info->max_part_size)
-            && !((lte->resource_entry.flags & WIM_RESHDR_FLAG_METADATA) ||
+            && !((lte->flags & WIM_RESHDR_FLAG_METADATA) ||
                   swm_info->parts[swm_info->num_parts - 1].size == 0)))
        {
                if (swm_info->num_parts == swm_info->num_alloc_parts) {
@@ -182,7 +190,7 @@ add_stream_to_swm(struct wim_lookup_table_entry *lte, void *_swm_info)
                swm_info->parts[swm_info->num_parts - 1].size = 0;
        }
        swm_info->parts[swm_info->num_parts - 1].size += stream_size;
-       if (!(lte->resource_entry.flags & WIM_RESHDR_FLAG_METADATA)) {
+       if (!(lte->flags & WIM_RESHDR_FLAG_METADATA)) {
                list_add_tail(&lte->write_streams_list,
                              &swm_info->parts[swm_info->num_parts - 1].stream_list);
        }
@@ -203,6 +211,9 @@ wimlib_split(WIMStruct *wim, const tchar *swm_name,
        if (swm_name == NULL || swm_name[0] == T('\0') || part_size == 0)
                return WIMLIB_ERR_INVALID_PARAM;
 
+       if (write_flags & ~WIMLIB_WRITE_MASK_PUBLIC)
+               return WIMLIB_ERR_INVALID_PARAM;
+
        if (!wim_has_metadata(wim))
                return WIMLIB_ERR_METADATA_NOT_FOUND;