25 #define FOPEN_FUNC(filename, mode) fopen(filename, mode)
27 #define FOPEN_FUNC(filename, mode) fopen64(filename, mode)
31 #define WRITEBUFFERSIZE (8192)
37 const std::string &extract_dir,
38 const std::string &password) {
39 char filename_inzip[256];
40 char *filename_withoutpath;
49 sizeof(filename_inzip),
nullptr, 0,
nullptr,
59 buf = (
void *)malloc(size_buf);
66 p = filename_withoutpath = filename_inzip;
67 while ((*p) !=
'\0') {
68 if (((*p) ==
'/') || ((*p) ==
'\\')) {
69 filename_withoutpath = p + 1;
74 if ((*filename_withoutpath) ==
'\0') {
75 const std::string dir_path = extract_dir +
"/" + filename_inzip;
79 const char *write_filename;
80 write_filename = filename_inzip;
82 if (password.empty()) {
90 "Extraction failed in unzOpenCurrentFilePassword with "
97 std::string file_path = extract_dir +
"/" +
98 static_cast<std::string
>(write_filename);
102 if ((fout ==
nullptr) &&
103 filename_withoutpath == (
char *)filename_inzip) {
109 if (fout ==
nullptr) {
116 if (fout !=
nullptr) {
121 "Extraction failed in unzReadCurrentFile with "
127 if (fwrite(buf, err, 1, fout) != 1) {
129 "Extraction failed. Error in writing extracted "
145 "Extraction failed in unzCloseCurrentFile with error "
159 const std::string &extract_dir) {
161 if (!file_path.empty()) {
174 "Extraction failed in unzGetGlobalInfo with error code: {}.",
179 const std::string password =
"";
187 "Extraction failed in ExtractCurrentFile with error code: "
198 "Extraction failed in ExtractCurrentFile with error "
bool MakeDirectoryHierarchy(const std::string &directory)
void ExtractFromZIP(const std::string &file_path, const std::string &extract_dir)
Function to extract files compressed in .zip format.
static int ExtractCurrentFile(unzFile uf, const std::string &extract_dir, const std::string &password)
Generic file read and write utility for python interface.
int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char *password)
int ZEXPORT unzGetCurrentFileInfo64(unzFile file, unz_file_info64 *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len)
int ZEXPORT unzGetGlobalInfo64(unzFile file, unz_global_info64 *pglobal_info)
unzFile ZEXPORT unzOpen64(voidpf file)
int ZEXPORT unzCloseCurrentFile(unzFile file)
int ZEXPORT unzGoToNextFile(unzFile file)
int ZEXPORT unzClose(unzFile file)
#define UNZ_INTERNALERROR