mirror of
https://github.com/libretro/RetroArch
synced 2025-02-20 15:40:44 +00:00
(RZlib) Now extracts directories in ZIP file too
This commit is contained in:
parent
0e86504097
commit
0ff9aa7b3c
@ -18,6 +18,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include "../boolean.h"
|
||||
|
||||
#ifdef HAVE_LIBRETRO_MANAGEMENT
|
||||
@ -29,6 +30,7 @@
|
||||
static int rarch_extract_currentfile_in_zip(unzFile uf, const char *current_dir, char *slash, char *write_filename, size_t write_filename_size, unsigned extract_zip_mode)
|
||||
{
|
||||
char filename_inzip[PATH_MAX];
|
||||
bool is_dir = false;
|
||||
FILE *file_out = NULL;
|
||||
|
||||
unz_file_info file_info;
|
||||
@ -63,19 +65,33 @@ static int rarch_extract_currentfile_in_zip(unzFile uf, const char *current_dir,
|
||||
#endif
|
||||
}
|
||||
|
||||
if(filename_inzip[strlen(filename_inzip) - 1] == '/')
|
||||
is_dir = true;
|
||||
|
||||
ret = unzOpenCurrentFile(uf);
|
||||
if (ret != UNZ_OK)
|
||||
RARCH_ERR("Error %d while trying to open ZIP file.\n", ret);
|
||||
else
|
||||
{
|
||||
/* success */
|
||||
file_out = fopen(write_filename, "wb");
|
||||
if(is_dir)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
mkdir(write_filename);
|
||||
#else
|
||||
mkdir(write_filename, S_IRWXU | S_IRWXG | S_IRWXO | S_IFDIR);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
file_out = fopen(write_filename, "wb");
|
||||
|
||||
if (!file_out)
|
||||
RARCH_ERR("Error opening %s.\n", write_filename);
|
||||
if (!file_out)
|
||||
RARCH_ERR("Error opening %s.\n", write_filename);
|
||||
}
|
||||
}
|
||||
|
||||
if (file_out)
|
||||
if (is_dir || file_out)
|
||||
{
|
||||
RARCH_LOG("Extracting: %s..\n", write_filename);
|
||||
|
||||
@ -88,7 +104,7 @@ static int rarch_extract_currentfile_in_zip(unzFile uf, const char *current_dir,
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret > 0)
|
||||
if (ret > 0 && !is_dir)
|
||||
{
|
||||
if (fwrite(buf, ret, 1, file_out) != 1)
|
||||
{
|
||||
@ -99,7 +115,7 @@ static int rarch_extract_currentfile_in_zip(unzFile uf, const char *current_dir,
|
||||
}
|
||||
}while (ret > 0);
|
||||
|
||||
if (file_out)
|
||||
if (!is_dir && file_out)
|
||||
fclose(file_out);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user