X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fsplit.c;h=d1317cf9d44f0ce82b810e65b1f53f28852d43c7;hb=5c3e789acfd123d4ae6d3b17a22c06f9ac25a35c;hp=dd4ba27874603ea83addeca310149b83c31435aa;hpb=df1050ef86e54f027912a15fe60bf67c8ab43d2c;p=wimlib diff --git a/src/split.c b/src/split.c index dd4ba278..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,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;