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,
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) {
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);
}
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 (!wim_has_metadata(wim))
+ return WIMLIB_ERR_METADATA_NOT_FOUND;
memset(&swm_info, 0, sizeof(swm_info));
swm_info.max_part_size = part_size;