- memcpy(ctx->staging_dir_name, ctx->working_directory, pwd_len);
- ctx->staging_dir_name[pwd_len] = '/';
- memcpy(ctx->staging_dir_name + pwd_len + 1, prefix, prefix_len);
- randomize_char_array_with_alnum(ctx->staging_dir_name + pwd_len +
- 1 + prefix_len, random_suffix_len);
- ctx->staging_dir_name[ctx->staging_dir_name_len] = '\0';
+ 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);