+ swm_name_len = tstrlen(swm_name);
+ swm_name_buf = alloca((swm_name_len + 20) * sizeof(tchar));
+ tstrcpy(swm_name_buf, swm_name);
+ dot = tstrchr(swm_name_buf, T('.'));
+ if (dot) {
+ swm_base_name_len = dot - swm_name_buf;
+ swm_suffix = alloca((tstrlen(dot) + 1) * sizeof(tchar));
+ tstrcpy(swm_suffix, dot);
+ } else {
+ swm_base_name_len = swm_name_len;
+ swm_suffix = alloca(1 * sizeof(tchar));
+ swm_suffix[0] = T('\0');
+ }
+
+ progress.split.completed_bytes = 0;
+ progress.split.total_bytes = 0;
+ for (part_number = 1; part_number <= swm_info->num_parts; part_number++)
+ progress.split.total_bytes += swm_info->parts[part_number - 1].size;
+ progress.split.total_parts = swm_info->num_parts;
+
+ generate_guid(guid);
+
+ for (part_number = 1; part_number <= swm_info->num_parts; part_number++) {
+ int part_write_flags;
+ wimlib_progress_func_t progfunc;
+
+ if (part_number != 1) {
+ tsprintf(swm_name_buf + swm_base_name_len,
+ T("%u%"TS), part_number, swm_suffix);
+ }