- ctx->staging_dir_name = MALLOC(ctx->staging_dir_name_len + 1);
- if (!ctx->staging_dir_name)
- return WIMLIB_ERR_NOMEM;
+ staging_dir_name_len = prefix_len + common_suffix_len + random_suffix_len;
+
+ staging_dir_name = MALLOC(staging_dir_name_len + 1);
+ if (!staging_dir_name) {
+ ret = WIMLIB_ERR_NOMEM;
+ goto out;
+ }
+
+ if (real_user_prefix)
+ sprintf(staging_dir_name, "%s/%s", real_user_prefix, wim_basename);
+ else
+ strcpy(staging_dir_name, ctx->wim->filename);
+
+ strcat(staging_dir_name, common_suffix);
+
+ randomize_char_array_with_alnum(staging_dir_name + prefix_len + common_suffix_len,
+ random_suffix_len);