- if (w->hdr.total_parts != 1)
- return WIMLIB_ERR_SPLIT_UNSUPPORTED;
-
- write_flags &= WIMLIB_WRITE_MASK_PUBLIC;
-
- swm_name_len = tstrlen(swm_name);
- tchar swm_base_name[swm_name_len + 20];
-
- memcpy(&hdr_save, &w->hdr, sizeof(struct wim_header));
- w->hdr.flags |= WIM_HDR_FLAG_SPANNED;
- w->hdr.boot_idx = 0;
- randomize_byte_array(w->hdr.guid, WIM_GID_LEN);
- ret = begin_write(w, swm_name, write_flags);
- if (ret != 0)
- goto out;
-
- tmemcpy(swm_base_name, swm_name, swm_name_len + 1);
-
- swm_suffix = tstrchr(swm_name, T('.'));
- if (swm_suffix) {
- swm_base_name_len = swm_suffix - swm_name;
- } else {
- swm_base_name_len = swm_name_len;
- swm_base_name[ARRAY_LEN(swm_base_name) - 1] = T('\0');
- swm_suffix = &swm_base_name[ARRAY_LEN(swm_base_name) - 1];
- }
-
- args.w = w;
- args.swm_base_name = swm_base_name;
- args.swm_base_name_len = swm_base_name_len;
- args.swm_suffix = swm_suffix;
- INIT_LIST_HEAD(&args.lte_list);
- args.cur_part_number = 1;
- args.write_flags = write_flags;
- args.size_remaining = part_size;
- args.part_size = part_size;
- args.progress_func = progress_func;
- args.progress.split.total_bytes = lookup_table_total_stream_size(w->lookup_table);
- args.progress.split.cur_part_number = 1;
- args.progress.split.completed_bytes = 0;
- args.progress.split.part_name = swm_base_name;