blob: 808cc74e1f08db2cd84995104ddfed2865491ba5 [file] [log] [blame]
Nathan Moinvaziri6903fd62017-10-16 20:57:04 -07001/* mz_compat.h -- Backwards compatible interface for older versions
Nathan Moinvaziridb958942021-01-23 16:18:11 -08002 part of the minizip-ng project
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -07003
Nathan Moinvaziridb958942021-01-23 16:18:11 -08004 Copyright (C) 2010-2021 Nathan Moinvaziri
5 https://github.com/zlib-ng/minizip-ng
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -07006 Copyright (C) 1998-2010 Gilles Vollant
Viktor Szakats9dea6f22018-10-17 22:39:01 +00007 https://www.winimage.com/zLibDll/minizip.html
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -07008
9 This program is distributed under the terms of the same license as zlib.
10 See the accompanying LICENSE file for the full text of the license.
11*/
12
Nathan Moinvaziri408940f2018-05-09 09:42:31 -070013#ifndef MZ_COMPAT_H
14#define MZ_COMPAT_H
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -070015
Nathan Moinvaziri1ee609b2018-11-19 21:34:35 -080016#include "mz.h"
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -070017
18#ifdef __cplusplus
Alexey Pavlov165a4022018-09-10 07:42:25 +030019extern "C" {
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -070020#endif
21
Nathan Moinvazirie8496272018-11-21 15:05:58 -080022/***************************************************************************/
23
Nathan Moinvaziri82d4fa02018-11-01 10:36:12 -070024#if defined(HAVE_ZLIB) && defined(MAX_MEM_LEVEL)
Viktor Szakats7a0a62d2018-07-16 20:07:43 +000025#ifndef DEF_MEM_LEVEL
26# if MAX_MEM_LEVEL >= 8
27# define DEF_MEM_LEVEL 8
Nathan Moinvaziri82d4fa02018-11-01 10:36:12 -070028# else
Viktor Szakats7a0a62d2018-07-16 20:07:43 +000029# define DEF_MEM_LEVEL MAX_MEM_LEVEL
30# endif
31#endif
Nathan Moinvaziri04d821e2018-11-01 09:09:55 -070032#endif
Nathan Moinvazirif79ec422018-10-31 18:25:53 -070033#ifndef MAX_WBITS
Nathan Moinvaziriea99a462018-05-22 14:19:50 -070034#define MAX_WBITS (15)
Nathan Moinvazirif79ec422018-10-31 18:25:53 -070035#endif
36#ifndef DEF_MEM_LEVEL
Nathan Moinvaziriea99a462018-05-22 14:19:50 -070037#define DEF_MEM_LEVEL (8)
Nathan Moinvaziri41331dd2018-05-22 09:46:03 -070038#endif
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -070039
Nathan Moinvaziri3eaa5562018-08-26 09:05:19 -070040#ifndef ZEXPORT
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -080041# define ZEXPORT MZ_EXPORT
Nathan Moinvaziri3eaa5562018-08-26 09:05:19 -070042#endif
43
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -070044/***************************************************************************/
45
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -070046#if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
47/* like the STRICT of WIN32, we define a pointer that cannot be converted
48 from (void*) without cast */
49typedef struct TagzipFile__ { int unused; } zip_file__;
50typedef zip_file__ *zipFile;
51#else
Nathan Moinvaziri41331dd2018-05-22 09:46:03 -070052typedef void *zipFile;
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -070053#endif
54
55/***************************************************************************/
56
Viktor Szakatsce26dba2018-04-22 19:30:34 +000057typedef uint64_t ZPOS64_T;
58
Nathan Moinvaziri8847f222021-05-08 12:15:00 -070059#ifndef ZCALLBACK
60#define ZCALLBACK
61#endif
62
63typedef void* (ZCALLBACK *open_file_func) (void *opaque, const char *filename, int mode);
64typedef void* (ZCALLBACK *open64_file_func) (void *opaque, const void *filename, int mode);
65typedef unsigned long (ZCALLBACK *read_file_func) (void *opaque, void *stream, void* buf, unsigned long size);
66typedef unsigned long (ZCALLBACK *write_file_func) (void *opaque, void *stream, const void* buf,
67 unsigned long size);
68typedef int (ZCALLBACK *close_file_func) (void *opaque, void *stream);
69typedef int (ZCALLBACK *testerror_file_func)(void *opaque, void *stream);
70typedef long (ZCALLBACK *tell_file_func) (void *opaque, void *stream);
71typedef ZPOS64_T (ZCALLBACK *tell64_file_func) (void *opaque, void *stream);
72typedef long (ZCALLBACK *seek_file_func) (void *opaque, void *stream, unsigned long offset, int origin);
73typedef long (ZCALLBACK *seek64_file_func) (void *opaque, void *stream, ZPOS64_T offset, int origin);
74
75typedef struct zlib_filefunc_def_s
76{
77 open_file_func zopen_file;
78 read_file_func zread_file;
79 write_file_func zwrite_file;
80 tell_file_func ztell_file;
81 seek_file_func zseek_file;
82 close_file_func zclose_file;
83 testerror_file_func zerror_file;
84 void* opaque;
85} zlib_filefunc_def;
86
87typedef struct zlib_filefunc64_def_s
88{
89 open64_file_func zopen64_file;
90 read_file_func zread_file;
91 write_file_func zwrite_file;
92 tell64_file_func ztell64_file;
93 seek64_file_func zseek64_file;
94 close_file_func zclose_file;
95 testerror_file_func zerror_file;
96 void* opaque;
97} zlib_filefunc64_def;
98
99/***************************************************************************/
100
101#define ZLIB_FILEFUNC_SEEK_SET (0)
102#define ZLIB_FILEFUNC_SEEK_CUR (1)
103#define ZLIB_FILEFUNC_SEEK_END (2)
104
105#define ZLIB_FILEFUNC_MODE_READ (1)
106#define ZLIB_FILEFUNC_MODE_WRITE (2)
107#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)
108
109#define ZLIB_FILEFUNC_MODE_EXISTING (4)
110#define ZLIB_FILEFUNC_MODE_CREATE (8)
111
112/***************************************************************************/
113
114ZEXPORT void fill_fopen_filefunc(zlib_filefunc_def *pzlib_filefunc_def);
115ZEXPORT void fill_fopen64_filefunc(zlib_filefunc64_def *pzlib_filefunc_def);
116ZEXPORT void fill_win32_filefunc(zlib_filefunc_def *pzlib_filefunc_def);
117ZEXPORT void fill_win32_filefunc64(zlib_filefunc64_def *pzlib_filefunc_def);
118ZEXPORT void fill_win32_filefunc64A(zlib_filefunc64_def *pzlib_filefunc_def);
Nathan Moinvaziri8847f222021-05-08 12:15:00 -0700119ZEXPORT void fill_memory_filefunc(zlib_filefunc_def *pzlib_filefunc_def);
120
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700121/***************************************************************************/
122
Nathan Moinvaziricf20c092019-05-02 09:25:24 -0700123#if MZ_COMPAT_VERSION <= 110
124#define mz_dos_date dosDate
125#else
126#define mz_dos_date dos_date
127#endif
128
Nathan Moinvaziri8847f222021-05-08 12:15:00 -0700129typedef struct tm tm_unz;
130typedef struct tm tm_zip;
131
Nathan Moinvaziridc6962b2020-06-14 15:19:14 -0700132typedef struct {
Nathan Moinvaziricf20c092019-05-02 09:25:24 -0700133 uint32_t mz_dos_date;
Viktor Szakatsce26dba2018-04-22 19:30:34 +0000134 struct tm tmz_date;
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800135 uint16_t internal_fa; /* internal file attributes 2 bytes */
136 uint32_t external_fa; /* external file attributes 4 bytes */
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700137} zip_fileinfo;
138
Nathan Moinvaziri8847f222021-05-08 12:15:00 -0700139typedef const char *zipcharpc;
140
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700141/***************************************************************************/
142
143#define ZIP_OK (0)
144#define ZIP_EOF (0)
Nathan Moinvaziri41331dd2018-05-22 09:46:03 -0700145#define ZIP_ERRNO (-1)
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700146#define ZIP_PARAMERROR (-102)
147#define ZIP_BADZIPFILE (-103)
148#define ZIP_INTERNALERROR (-104)
149
Nathan Moinvaziri1003c862020-05-03 20:50:31 -0700150#ifndef Z_DEFLATED
151#define Z_DEFLATED (8)
152#endif
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700153#define Z_BZIP2ED (12)
154
Viktor Szakatsd50e91a2018-07-16 13:48:02 +0000155#define APPEND_STATUS_CREATE (0)
156#define APPEND_STATUS_CREATEAFTER (1)
157#define APPEND_STATUS_ADDINZIP (2)
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700158
159/***************************************************************************/
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800160/* Writing a zip file */
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700161
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800162ZEXPORT zipFile zipOpen(const char *path, int append);
163ZEXPORT zipFile zipOpen64(const void *path, int append);
164ZEXPORT zipFile zipOpen2(const char *path, int append, const char **globalcomment,
165 zlib_filefunc_def *pzlib_filefunc_def);
Nathan Moinvaziri5e8e4552020-05-07 14:40:03 -0700166
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800167ZEXPORT zipFile zipOpen2_64(const void *path, int append, const char **globalcomment,
168 zlib_filefunc64_def *pzlib_filefunc_def);
Nathan Moinvaziri5e8e4552020-05-07 14:40:03 -0700169ZEXPORT zipFile zipOpen_MZ(void *stream, int append, const char **globalcomment);
170
171ZEXPORT void* zipGetHandle_MZ(zipFile);
172ZEXPORT void* zipGetStream_MZ(zipFile file);
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700173
Nathan Moinvaziri1aef5b42019-06-04 09:56:08 -0700174ZEXPORT int zipOpenNewFileInZip(zipFile file, const char *filename, const zip_fileinfo *zipfi,
175 const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global,
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000176 uint16_t size_extrafield_global, const char *comment, int compression_method, int level);
Nathan Moinvaziri1aef5b42019-06-04 09:56:08 -0700177ZEXPORT int zipOpenNewFileInZip_64(zipFile file, const char *filename, const zip_fileinfo *zipfi,
178 const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global,
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000179 uint16_t size_extrafield_global, const char *comment, int compression_method, int level,
Nathan Moinvaziri1aef5b42019-06-04 09:56:08 -0700180 int zip64);
181ZEXPORT int zipOpenNewFileInZip2(zipFile file, const char *filename, const zip_fileinfo *zipfi,
182 const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global,
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000183 uint16_t size_extrafield_global, const char *comment, int compression_method, int level,
Nathan Moinvaziri1aef5b42019-06-04 09:56:08 -0700184 int raw);
185ZEXPORT int zipOpenNewFileInZip2_64(zipFile file, const char *filename, const zip_fileinfo *zipfi,
186 const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global,
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000187 uint16_t size_extrafield_global, const char *comment, int compression_method, int level,
Nathan Moinvaziri1aef5b42019-06-04 09:56:08 -0700188 int raw, int zip64);
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800189ZEXPORT int zipOpenNewFileInZip3(zipFile file, const char *filename, const zip_fileinfo *zipfi,
190 const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global,
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000191 uint16_t size_extrafield_global, const char *comment, int compression_method, int level,
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800192 int raw, int windowBits, int memLevel, int strategy, const char *password,
Nathan Moinvaziri70a960a2020-06-07 18:42:43 -0700193 unsigned long crc_for_crypting);
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800194ZEXPORT int zipOpenNewFileInZip3_64(zipFile file, const char *filename, const zip_fileinfo *zipfi,
195 const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global,
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000196 uint16_t size_extrafield_global, const char *comment, int compression_method, int level,
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800197 int raw, int windowBits, int memLevel, int strategy, const char *password,
198 uint32_t crc_for_crypting, int zip64);
199ZEXPORT int zipOpenNewFileInZip4(zipFile file, const char *filename, const zip_fileinfo *zipfi,
200 const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global,
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000201 uint16_t size_extrafield_global, const char *comment, int compression_method, int level,
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800202 int raw, int windowBits, int memLevel, int strategy, const char *password,
Nathan Moinvaziri70a960a2020-06-07 18:42:43 -0700203 unsigned long crc_for_crypting, unsigned long version_madeby, unsigned long flag_base);
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800204ZEXPORT int zipOpenNewFileInZip4_64(zipFile file, const char *filename, const zip_fileinfo *zipfi,
205 const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global,
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000206 uint16_t size_extrafield_global, const char *comment, int compression_method, int level,
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800207 int raw, int windowBits, int memLevel, int strategy, const char *password,
Nathan Moinvaziri70a960a2020-06-07 18:42:43 -0700208 unsigned long crc_for_crypting, unsigned long version_madeby, unsigned long flag_base, int zip64);
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800209ZEXPORT int zipOpenNewFileInZip5(zipFile file, const char *filename, const zip_fileinfo *zipfi,
210 const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global,
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000211 uint16_t size_extrafield_global, const char *comment, int compression_method, int level,
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800212 int raw, int windowBits, int memLevel, int strategy, const char *password,
Nathan Moinvaziri70a960a2020-06-07 18:42:43 -0700213 unsigned long crc_for_crypting, unsigned long version_madeby, unsigned long flag_base, int zip64);
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700214
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800215ZEXPORT int zipWriteInFileInZip(zipFile file, const void *buf, uint32_t len);
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700216
Nathan Moinvaziri70a960a2020-06-07 18:42:43 -0700217ZEXPORT int zipCloseFileInZipRaw(zipFile file, unsigned long uncompressed_size, unsigned long crc32);
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000218ZEXPORT int zipCloseFileInZipRaw64(zipFile file, uint64_t uncompressed_size, unsigned long crc32);
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800219ZEXPORT int zipCloseFileInZip(zipFile file);
220ZEXPORT int zipCloseFileInZip64(zipFile file);
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700221
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800222ZEXPORT int zipClose(zipFile file, const char *global_comment);
223ZEXPORT int zipClose_64(zipFile file, const char *global_comment);
224ZEXPORT int zipClose2_64(zipFile file, const char *global_comment, uint16_t version_madeby);
Nathan Moinvazirid0605392019-01-24 17:45:13 -0800225 int zipClose_MZ(zipFile file, const char *global_comment);
226 int zipClose2_MZ(zipFile file, const char *global_comment, uint16_t version_madeby);
Nathan Moinvaziri7332bd62018-07-22 10:13:53 -0700227
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700228/***************************************************************************/
229
230#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
231/* like the STRICT of WIN32, we define a pointer that cannot be converted
232 from (void*) without cast */
233typedef struct TagunzFile__ { int unused; } unz_file__;
234typedef unz_file__ *unzFile;
235#else
Nathan Moinvaziri41331dd2018-05-22 09:46:03 -0700236typedef void *unzFile;
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700237#endif
238
239/***************************************************************************/
240
241#define UNZ_OK (0)
242#define UNZ_END_OF_LIST_OF_FILE (-100)
Nathan Moinvaziri41331dd2018-05-22 09:46:03 -0700243#define UNZ_ERRNO (-1)
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700244#define UNZ_EOF (0)
245#define UNZ_PARAMERROR (-102)
246#define UNZ_BADZIPFILE (-103)
247#define UNZ_INTERNALERROR (-104)
248#define UNZ_CRCERROR (-105)
249#define UNZ_BADPASSWORD (-106)
250
251/***************************************************************************/
252
Nathan Moinvaziridc6962b2020-06-14 15:19:14 -0700253typedef struct unz_global_info64_s {
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800254 uint64_t number_entry; /* total number of entries in the central dir on this disk */
255 uint32_t number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP */
256 uint16_t size_comment; /* size of the global comment of the zipfile */
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700257} unz_global_info64;
258
Nathan Moinvaziridc6962b2020-06-14 15:19:14 -0700259typedef struct unz_global_info_s {
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800260 uint32_t number_entry; /* total number of entries in the central dir on this disk */
261 uint32_t number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP */
262 uint16_t size_comment; /* size of the global comment of the zipfile */
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700263} unz_global_info;
264
Nathan Moinvaziridc6962b2020-06-14 15:19:14 -0700265typedef struct unz_file_info64_s {
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800266 uint16_t version; /* version made by 2 bytes */
267 uint16_t version_needed; /* version needed to extract 2 bytes */
268 uint16_t flag; /* general purpose bit flag 2 bytes */
269 uint16_t compression_method; /* compression method 2 bytes */
Nathan Moinvaziricf20c092019-05-02 09:25:24 -0700270 uint32_t mz_dos_date; /* last mod file date in Dos fmt 4 bytes */
Viktor Szakatsce26dba2018-04-22 19:30:34 +0000271 struct tm tmu_date;
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800272 uint32_t crc; /* crc-32 4 bytes */
273 uint64_t compressed_size; /* compressed size 8 bytes */
274 uint64_t uncompressed_size; /* uncompressed size 8 bytes */
275 uint16_t size_filename; /* filename length 2 bytes */
276 uint16_t size_file_extra; /* extra field length 2 bytes */
277 uint16_t size_file_comment; /* file comment length 2 bytes */
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700278
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800279 uint32_t disk_num_start; /* disk number start 4 bytes */
280 uint16_t internal_fa; /* internal file attributes 2 bytes */
281 uint32_t external_fa; /* external file attributes 4 bytes */
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700282
283 uint64_t disk_offset;
284
285 uint16_t size_file_extra_internal;
286} unz_file_info64;
287
Nathan Moinvaziridc6962b2020-06-14 15:19:14 -0700288typedef struct unz_file_info_s {
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800289 uint16_t version; /* version made by 2 bytes */
290 uint16_t version_needed; /* version needed to extract 2 bytes */
291 uint16_t flag; /* general purpose bit flag 2 bytes */
292 uint16_t compression_method; /* compression method 2 bytes */
Nathan Moinvaziricf20c092019-05-02 09:25:24 -0700293 uint32_t mz_dos_date; /* last mod file date in Dos fmt 4 bytes */
Viktor Szakatsce26dba2018-04-22 19:30:34 +0000294 struct tm tmu_date;
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800295 uint32_t crc; /* crc-32 4 bytes */
296 uint32_t compressed_size; /* compressed size 4 bytes */
297 uint32_t uncompressed_size; /* uncompressed size 4 bytes */
298 uint16_t size_filename; /* filename length 2 bytes */
299 uint16_t size_file_extra; /* extra field length 2 bytes */
300 uint16_t size_file_comment; /* file comment length 2 bytes */
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700301
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800302 uint16_t disk_num_start; /* disk number start 2 bytes */
303 uint16_t internal_fa; /* internal file attributes 2 bytes */
304 uint32_t external_fa; /* external file attributes 4 bytes */
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700305
306 uint64_t disk_offset;
307} unz_file_info;
308
309/***************************************************************************/
310
311typedef int (*unzFileNameComparer)(unzFile file, const char *filename1, const char *filename2);
312typedef int (*unzIteratorFunction)(unzFile file);
313typedef int (*unzIteratorFunction2)(unzFile file, unz_file_info64 *pfile_info, char *filename,
Nathan Moinvaziri32fd8052019-07-04 10:32:02 -0700314 uint16_t filename_size, void *extrafield, uint16_t extrafield_size, char *comment,
Nathan Moinvazirid5911f42018-11-12 08:14:19 -0800315 uint16_t comment_size);
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700316
317/***************************************************************************/
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800318/* Reading a zip file */
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700319
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800320ZEXPORT unzFile unzOpen(const char *path);
321ZEXPORT unzFile unzOpen64(const void *path);
322ZEXPORT unzFile unzOpen2(const char *path, zlib_filefunc_def *pzlib_filefunc_def);
323ZEXPORT unzFile unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def);
Nathan Moinvazirid0605392019-01-24 17:45:13 -0800324 unzFile unzOpen_MZ(void *stream);
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700325
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800326ZEXPORT int unzClose(unzFile file);
Nathan Moinvaziri5e8e4552020-05-07 14:40:03 -0700327ZEXPORT int unzClose_MZ(unzFile file);
328
329ZEXPORT void* unzGetHandle_MZ(unzFile file);
330ZEXPORT void* unzGetStream_MZ(zipFile file);
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700331
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800332ZEXPORT int unzGetGlobalInfo(unzFile file, unz_global_info* pglobal_info32);
333ZEXPORT int unzGetGlobalInfo64(unzFile file, unz_global_info64 *pglobal_info);
Nathan Moinvaziri70a960a2020-06-07 18:42:43 -0700334ZEXPORT int unzGetGlobalComment(unzFile file, char *comment, unsigned long comment_size);
Nathan Moinvaziri709c1f02018-09-25 09:32:42 -0700335
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800336ZEXPORT int unzOpenCurrentFile(unzFile file);
337ZEXPORT int unzOpenCurrentFilePassword(unzFile file, const char *password);
338ZEXPORT int unzOpenCurrentFile2(unzFile file, int *method, int *level, int raw);
339ZEXPORT int unzOpenCurrentFile3(unzFile file, int *method, int *level, int raw, const char *password);
340ZEXPORT int unzReadCurrentFile(unzFile file, void *buf, uint32_t len);
341ZEXPORT int unzCloseCurrentFile(unzFile file);
Nathan Moinvaziri709c1f02018-09-25 09:32:42 -0700342
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800343ZEXPORT int unzGetCurrentFileInfo(unzFile file, unz_file_info *pfile_info, char *filename,
Nathan Moinvaziri70a960a2020-06-07 18:42:43 -0700344 unsigned long filename_size, void *extrafield, unsigned long extrafield_size, char *comment,
345 unsigned long comment_size);
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800346ZEXPORT int unzGetCurrentFileInfo64(unzFile file, unz_file_info64 * pfile_info, char *filename,
Nathan Moinvaziri70a960a2020-06-07 18:42:43 -0700347 unsigned long filename_size, void *extrafield, unsigned long extrafield_size, char *comment,
348 unsigned long comment_size);
Nathan Moinvaziri709c1f02018-09-25 09:32:42 -0700349
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800350ZEXPORT int unzGoToFirstFile(unzFile file);
351ZEXPORT int unzGoToNextFile(unzFile file);
352ZEXPORT int unzLocateFile(unzFile file, const char *filename, unzFileNameComparer filename_compare_func);
Nathan Moinvaziri709c1f02018-09-25 09:32:42 -0700353
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800354ZEXPORT int unzGetLocalExtrafield(unzFile file, void *buf, unsigned int len);
Nathan Moinvaziri709c1f02018-09-25 09:32:42 -0700355
356/***************************************************************************/
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800357/* Raw access to zip file */
Nathan Moinvaziri709c1f02018-09-25 09:32:42 -0700358
Nathan Moinvaziridc6962b2020-06-14 15:19:14 -0700359typedef struct unz_file_pos_s {
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800360 uint32_t pos_in_zip_directory; /* offset in zip file directory */
361 uint32_t num_of_file; /* # of file */
Nathan Moinvaziri709c1f02018-09-25 09:32:42 -0700362} unz_file_pos;
363
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800364ZEXPORT int unzGetFilePos(unzFile file, unz_file_pos *file_pos);
365ZEXPORT int unzGoToFilePos(unzFile file, unz_file_pos *file_pos);
Nathan Moinvaziri709c1f02018-09-25 09:32:42 -0700366
Nathan Moinvaziridc6962b2020-06-14 15:19:14 -0700367typedef struct unz64_file_pos_s {
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800368 int64_t pos_in_zip_directory; /* offset in zip file directory */
369 uint64_t num_of_file; /* # of file */
Nathan Moinvaziri709c1f02018-09-25 09:32:42 -0700370} unz64_file_pos;
371
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800372ZEXPORT int unzGetFilePos64(unzFile file, unz64_file_pos *file_pos);
373ZEXPORT int unzGoToFilePos64(unzFile file, const unz64_file_pos *file_pos);
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700374
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800375ZEXPORT int64_t unzGetOffset64(unzFile file);
Nathan Moinvaziri70a960a2020-06-07 18:42:43 -0700376ZEXPORT unsigned long
377 unzGetOffset(unzFile file);
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800378ZEXPORT int unzSetOffset64(unzFile file, int64_t pos);
Nathan Moinvaziri70a960a2020-06-07 18:42:43 -0700379ZEXPORT int unzSetOffset(unzFile file, unsigned long pos);
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000380ZEXPORT int32_t unztell(unzFile file);
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800381ZEXPORT int32_t unzTell(unzFile file);
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000382ZEXPORT uint64_t unztell64(unzFile file);
383ZEXPORT uint64_t unzTell64(unzFile file);
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800384ZEXPORT int unzSeek(unzFile file, int32_t offset, int origin);
385ZEXPORT int unzSeek64(unzFile file, int64_t offset, int origin);
386ZEXPORT int unzEndOfFile(unzFile file);
Viktor Szakatsed03eed2020-10-31 18:35:12 +0000387ZEXPORT int unzeof(unzFile file);
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800388ZEXPORT void* unzGetStream(unzFile file);
Viktor Szakatsce26dba2018-04-22 19:30:34 +0000389
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700390/***************************************************************************/
391
Nathan Moinvaziri8db28c92017-10-08 23:26:17 -0700392#ifdef __cplusplus
393}
394#endif
395
396#endif