From 050ab56038f6bfd2708ac58732b6d71425bf03a8 Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Sun, 18 Sep 2016 16:05:33 -0400 Subject: [PATCH] set archive path before extracting --- libretro-common/include/file/archive_file.h | 2 +- tasks/task_decompress.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/libretro-common/include/file/archive_file.h b/libretro-common/include/file/archive_file.h index 7a752e12d8..189360c1ec 100644 --- a/libretro-common/include/file/archive_file.h +++ b/libretro-common/include/file/archive_file.h @@ -99,7 +99,7 @@ struct archive_extract_userdata char archive_name[PATH_MAX_LENGTH]; uint32_t crc; struct decomp_state_t decomp_state; - decompress_state_t dec; + decompress_state_t *dec; }; /* Returns true when parsing should continue. False to stop. */ diff --git a/tasks/task_decompress.c b/tasks/task_decompress.c index 71c83213d1..90da4dd99c 100644 --- a/tasks/task_decompress.c +++ b/tasks/task_decompress.c @@ -48,12 +48,12 @@ static int file_decompressed_subdir(const char *name, if (name[strlen(name) - 1] == '/' || name[strlen(name) - 1] == '\\') goto next_file; - if (strstr(name, userdata->dec.subdir) != name) + if (strstr(name, userdata->dec->subdir) != name) return 1; - name += strlen(userdata->dec.subdir) + 1; + name += strlen(userdata->dec->subdir) + 1; - fill_pathname_join(path, userdata->dec.target_dir, name, sizeof(path)); + fill_pathname_join(path, userdata->dec->target_dir, name, sizeof(path)); fill_pathname_basedir(path_dir, path, sizeof(path_dir)); /* Make directory */ @@ -70,8 +70,8 @@ next_file: return 1; error: - userdata->dec.callback_error = (char*)malloc(PATH_MAX_LENGTH); - snprintf(userdata->dec.callback_error, + userdata->dec->callback_error = (char*)malloc(PATH_MAX_LENGTH); + snprintf(userdata->dec->callback_error, PATH_MAX_LENGTH, "Failed to deflate %s.\n", path); return 0; @@ -82,7 +82,7 @@ static int file_decompressed(const char *name, const char *valid_exts, uint32_t crc32, struct archive_extract_userdata *userdata) { char path[PATH_MAX_LENGTH] = {0}; - decompress_state_t *dec = &userdata->dec; + decompress_state_t *dec = userdata->dec; /* Ignore directories. */ if (name[strlen(name) - 1] == '/' || name[strlen(name) - 1] == '\\') @@ -147,6 +147,9 @@ static void task_decompress_handler(retro_task_t *task) decompress_state_t *dec = (decompress_state_t*)task->state; struct archive_extract_userdata userdata = {0}; + userdata.dec = dec; + userdata.archive_path = dec->source_file; + int ret = file_archive_parse_file_iterate(&dec->archive, &retdec, dec->source_file, dec->valid_ext, file_decompressed, &userdata); @@ -188,7 +191,7 @@ static void task_decompress_handler_subdir(retro_task_t *task) decompress_state_t *dec = (decompress_state_t*)task->state; struct archive_extract_userdata userdata = {0}; - userdata.dec = *dec; + userdata.dec = dec; int ret = file_archive_parse_file_iterate(&dec->archive, &retdec, dec->source_file,