From a171f3c6d14badefd6f759e46ebfca1a631f9a8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Mon, 30 Nov 2015 10:41:35 -0300 Subject: [PATCH] (task_decompress.c) Add progress report --- libretro-common/file/file_extract.c | 9 +++++++++ libretro-common/include/file/file_extract.h | 2 ++ tasks/task_decompress.c | 2 ++ 3 files changed, 13 insertions(+) diff --git a/libretro-common/file/file_extract.c b/libretro-common/file/file_extract.c index b2b789b724..80df90ce89 100644 --- a/libretro-common/file/file_extract.c +++ b/libretro-common/file/file_extract.c @@ -604,6 +604,15 @@ bool zlib_parse_file(const char *file, const char *valid_exts, return returnerr; } +int zlib_parse_file_progress(void *data) +{ + /* FIXME: this estimate is pretty bad */ + zlib_transfer_t *state = (zlib_transfer_t*)data; + const uint8_t *offset = state->data + read_le(state->directory + 42, 4); + ptrdiff_t delta = offset - state->data - 46 - 22; + return delta * 100 / state->zip_size; +} + struct zip_extract_userdata { char *zip_path; diff --git a/libretro-common/include/file/file_extract.h b/libretro-common/include/file/file_extract.h index 6afac0ef7b..6c1ae44f6d 100644 --- a/libretro-common/include/file/file_extract.h +++ b/libretro-common/include/file/file_extract.h @@ -86,6 +86,8 @@ int zlib_parse_file_iterate(void *data, bool *returnerr, void zlib_parse_file_iterate_stop(void *data); +int zlib_parse_file_progress(void *data); + /** * zlib_extract_first_content_file: * @zip_path : filename path to ZIP archive. diff --git a/tasks/task_decompress.c b/tasks/task_decompress.c index ccef64fa87..09aecb8bc5 100644 --- a/tasks/task_decompress.c +++ b/tasks/task_decompress.c @@ -81,6 +81,8 @@ static void rarch_task_decompress_handler(rarch_task_t *task) ret = zlib_parse_file_iterate(&dec->zlib, &returnerr, dec->source_file, dec->valid_ext, file_decompressed, dec); + task->progress = zlib_parse_file_progress(&dec->zlib); + if (task->cancelled || ret != 0) { task->error = dec->callback_error;