X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fsplit.c;h=d1317cf9d44f0ce82b810e65b1f53f28852d43c7;hb=50407ddd59aa2d0906225a4526eaefbf6da8450f;hp=afb4365cd7fec7f4e24c832518319e90dbe4aac8;hpb=61db93f82eca3fe9f7676355c709c58cc425a6ad;p=wimlib diff --git a/src/split.c b/src/split.c index afb4365c..d1317cf9 100644 --- a/src/split.c +++ b/src/split.c @@ -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(<e->write_streams_list, &swm_info->parts[swm_info->num_parts - 1].stream_list); } @@ -203,8 +211,11 @@ 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 (wim->hdr.total_parts != 1) - return WIMLIB_ERR_SPLIT_UNSUPPORTED; + if (write_flags & ~WIMLIB_WRITE_MASK_PUBLIC) + return WIMLIB_ERR_INVALID_PARAM; + + if (!wim_has_metadata(wim)) + return WIMLIB_ERR_METADATA_NOT_FOUND; memset(&swm_info, 0, sizeof(swm_info)); swm_info.max_part_size = part_size;