blob: bcebe08a218fb0182ca05f7a906d64d9935c03d9 [file] [log] [blame]
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -07001/* mz.h -- Errors codes, zip flags and magic
Nathan Moinvaziridb958942021-01-23 16:18:11 -08002 part of the minizip-ng project
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -07003
Nathan Moinvaziridb958942021-01-23 16:18:11 -08004 Copyright (C) 2010-2021 Nathan Moinvaziri
5 https://github.com/zlib-ng/minizip-ng
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -07006
7 This program is distributed under the terms of the same license as zlib.
8 See the accompanying LICENSE file for the full text of the license.
9*/
10
Nathan Moinvazirib5fb1252018-05-09 09:52:43 -070011#ifndef MZ_H
12#define MZ_H
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -070013
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -070014/***************************************************************************/
15
Nathan Moinvazirib16ab562018-11-20 16:56:21 -080016/* MZ_VERSION */
Nathan Moinvazirif3d400e2022-03-05 14:53:32 -080017#define MZ_VERSION ("3.0.5")
18#define MZ_VERSION_BUILD (030005)
Nathan Moinvaziri79ac3382017-10-23 17:22:36 -070019
Nathan Moinvazirib16ab562018-11-20 16:56:21 -080020/* MZ_ERROR */
21#define MZ_OK (0) /* zlib */
22#define MZ_STREAM_ERROR (-1) /* zlib */
23#define MZ_DATA_ERROR (-3) /* zlib */
24#define MZ_MEM_ERROR (-4) /* zlib */
25#define MZ_BUF_ERROR (-5) /* zlib */
26#define MZ_VERSION_ERROR (-6) /* zlib */
Nathan Moinvaziri05e03ca2018-10-28 16:15:13 -070027
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -070028#define MZ_END_OF_LIST (-100)
Nathan Moinvaziricda36002017-10-21 09:37:18 -070029#define MZ_END_OF_STREAM (-101)
Nathan Moinvaziri05e03ca2018-10-28 16:15:13 -070030
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -070031#define MZ_PARAM_ERROR (-102)
32#define MZ_FORMAT_ERROR (-103)
33#define MZ_INTERNAL_ERROR (-104)
34#define MZ_CRC_ERROR (-105)
35#define MZ_CRYPT_ERROR (-106)
36#define MZ_EXIST_ERROR (-107)
Nathan Moinvaziri18a30652017-12-07 06:59:53 -080037#define MZ_PASSWORD_ERROR (-108)
Nathan Moinvaziri0a9282d2018-06-19 11:59:07 -070038#define MZ_SUPPORT_ERROR (-109)
Nathan Moinvaziri21a31022018-10-24 09:50:16 -070039#define MZ_HASH_ERROR (-110)
Nathan Moinvaziri05e03ca2018-10-28 16:15:13 -070040#define MZ_OPEN_ERROR (-111)
41#define MZ_CLOSE_ERROR (-112)
42#define MZ_SEEK_ERROR (-113)
43#define MZ_TELL_ERROR (-114)
44#define MZ_READ_ERROR (-115)
45#define MZ_WRITE_ERROR (-116)
Nathan Moinvaziri703b3df2018-10-28 16:41:20 -070046#define MZ_SIGN_ERROR (-117)
Nathan Moinvaziri3249eac2019-05-02 21:07:39 -070047#define MZ_SYMLINK_ERROR (-118)
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -070048
Nathan Moinvazirib16ab562018-11-20 16:56:21 -080049/* MZ_OPEN */
Nathan Moinvaziri79ac3382017-10-23 17:22:36 -070050#define MZ_OPEN_MODE_READ (0x01)
51#define MZ_OPEN_MODE_WRITE (0x02)
52#define MZ_OPEN_MODE_READWRITE (MZ_OPEN_MODE_READ | MZ_OPEN_MODE_WRITE)
53#define MZ_OPEN_MODE_APPEND (0x04)
54#define MZ_OPEN_MODE_CREATE (0x08)
55#define MZ_OPEN_MODE_EXISTING (0x10)
56
Nathan Moinvazirib16ab562018-11-20 16:56:21 -080057/* MZ_SEEK */
Nathan Moinvaziria45b34f2017-10-23 21:54:47 -070058#define MZ_SEEK_SET (0)
Nathan Moinvaziri79ac3382017-10-23 17:22:36 -070059#define MZ_SEEK_CUR (1)
60#define MZ_SEEK_END (2)
Nathan Moinvaziri79ac3382017-10-23 17:22:36 -070061
Nathan Moinvazirib16ab562018-11-20 16:56:21 -080062/* MZ_COMPRESS */
Nathan Moinvazirifa146ad2018-08-07 23:50:31 -070063#define MZ_COMPRESS_METHOD_STORE (0)
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -070064#define MZ_COMPRESS_METHOD_DEFLATE (8)
65#define MZ_COMPRESS_METHOD_BZIP2 (12)
66#define MZ_COMPRESS_METHOD_LZMA (14)
Force Charlie32ccb3e2020-06-24 10:55:18 +080067#define MZ_COMPRESS_METHOD_ZSTD (93)
Nathan Moinvaziric4668ed2020-10-25 11:56:19 -070068#define MZ_COMPRESS_METHOD_XZ (95)
Nathan Moinvaziri6e21e862017-10-19 09:57:54 -070069#define MZ_COMPRESS_METHOD_AES (99)
Nathan Moinvaziria45b34f2017-10-23 21:54:47 -070070
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -070071#define MZ_COMPRESS_LEVEL_DEFAULT (-1)
Nathan Moinvaziri91a76f62017-11-10 07:39:06 -080072#define MZ_COMPRESS_LEVEL_FAST (2)
Nathan Moinvaziria45b34f2017-10-23 21:54:47 -070073#define MZ_COMPRESS_LEVEL_NORMAL (6)
74#define MZ_COMPRESS_LEVEL_BEST (9)
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -070075
Nathan Moinvazirib16ab562018-11-20 16:56:21 -080076/* MZ_ZIP_FLAG */
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -070077#define MZ_ZIP_FLAG_ENCRYPTED (1 << 0)
78#define MZ_ZIP_FLAG_LZMA_EOS_MARKER (1 << 1)
79#define MZ_ZIP_FLAG_DEFLATE_MAX (1 << 1)
80#define MZ_ZIP_FLAG_DEFLATE_NORMAL (0)
81#define MZ_ZIP_FLAG_DEFLATE_FAST (1 << 2)
82#define MZ_ZIP_FLAG_DEFLATE_SUPER_FAST (MZ_ZIP_FLAG_DEFLATE_FAST | \
83 MZ_ZIP_FLAG_DEFLATE_MAX)
84#define MZ_ZIP_FLAG_DATA_DESCRIPTOR (1 << 3)
Nathan Moinvaziri4b8e4b32018-08-20 09:06:23 -070085#define MZ_ZIP_FLAG_UTF8 (1 << 11)
Nathan Moinvaziric565fa82018-10-19 08:48:33 -070086#define MZ_ZIP_FLAG_MASK_LOCAL_INFO (1 << 13)
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -070087
Nathan Moinvazirib16ab562018-11-20 16:56:21 -080088/* MZ_ZIP_EXTENSION */
Nathan Moinvazirie1f68fc2018-10-23 09:04:04 -070089#define MZ_ZIP_EXTENSION_ZIP64 (0x0001)
90#define MZ_ZIP_EXTENSION_NTFS (0x000a)
91#define MZ_ZIP_EXTENSION_AES (0x9901)
92#define MZ_ZIP_EXTENSION_UNIX1 (0x000d)
93#define MZ_ZIP_EXTENSION_SIGN (0x10c5)
94#define MZ_ZIP_EXTENSION_HASH (0x1a51)
95#define MZ_ZIP_EXTENSION_CDCD (0xcdcd)
96
Nathan Moinvazirib16ab562018-11-20 16:56:21 -080097/* MZ_ZIP64 */
Nathan Moinvaziria56a08c2018-05-03 09:35:37 -070098#define MZ_ZIP64_AUTO (0)
99#define MZ_ZIP64_FORCE (1)
100#define MZ_ZIP64_DISABLE (2)
101
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800102/* MZ_HOST_SYSTEM */
Nathan Moinvaziri4b8e4b32018-08-20 09:06:23 -0700103#define MZ_HOST_SYSTEM(VERSION_MADEBY) ((uint8_t)(VERSION_MADEBY >> 8))
Nathan Moinvaziri4a412452018-05-02 09:24:09 -0700104#define MZ_HOST_SYSTEM_MSDOS (0)
Nathan Moinvazirie33916b2018-05-01 13:45:08 -0700105#define MZ_HOST_SYSTEM_UNIX (3)
Viktor Szakats447dd062018-05-02 19:59:38 +0000106#define MZ_HOST_SYSTEM_WINDOWS_NTFS (10)
Cameron Cawley28f78ff2019-08-06 14:14:14 +0100107#define MZ_HOST_SYSTEM_RISCOS (13)
Nathan Moinvazirie33916b2018-05-01 13:45:08 -0700108#define MZ_HOST_SYSTEM_OSX_DARWIN (19)
109
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800110/* MZ_PKCRYPT */
Nathan Moinvaziri44459662018-08-16 15:08:59 -0700111#define MZ_PKCRYPT_HEADER_SIZE (12)
112
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800113/* MZ_AES */
Nathan Moinvaziri6e21e862017-10-19 09:57:54 -0700114#define MZ_AES_VERSION (1)
115#define MZ_AES_ENCRYPTION_MODE_128 (0x01)
116#define MZ_AES_ENCRYPTION_MODE_192 (0x02)
117#define MZ_AES_ENCRYPTION_MODE_256 (0x03)
Nathan Moinvazirieff49b82018-11-01 10:32:42 -0700118#define MZ_AES_KEY_LENGTH(MODE) (8 * (MODE & 3) + 8)
119#define MZ_AES_KEY_LENGTH_MAX (32)
Nathan Moinvaziri5f091882018-10-24 18:06:08 -0700120#define MZ_AES_BLOCK_SIZE (16)
Nathan Moinvaziri44459662018-08-16 15:08:59 -0700121#define MZ_AES_HEADER_SIZE(MODE) ((4 * (MODE & 3) + 4) + 2)
122#define MZ_AES_FOOTER_SIZE (10)
Nathan Moinvaziri6e21e862017-10-19 09:57:54 -0700123
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800124/* MZ_HASH */
Nathan Moinvazirie1f68fc2018-10-23 09:04:04 -0700125#define MZ_HASH_MD5 (10)
126#define MZ_HASH_MD5_SIZE (16)
127#define MZ_HASH_SHA1 (20)
128#define MZ_HASH_SHA1_SIZE (20)
Sergey Markelov98963832022-01-17 12:37:25 -0700129#define MZ_HASH_SHA224 (22)
130#define MZ_HASH_SHA224_SIZE (28)
Nathan Moinvazirie1f68fc2018-10-23 09:04:04 -0700131#define MZ_HASH_SHA256 (23)
132#define MZ_HASH_SHA256_SIZE (32)
Sergey Markelov98963832022-01-17 12:37:25 -0700133#define MZ_HASH_SHA384 (24)
134#define MZ_HASH_SHA384_SIZE (48)
135#define MZ_HASH_SHA512 (25)
136#define MZ_HASH_SHA512_SIZE (64)
Nathan Moinvaziri915c5132018-10-26 20:00:52 -0700137#define MZ_HASH_MAX_SIZE (256)
Nathan Moinvazirie1f68fc2018-10-23 09:04:04 -0700138
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800139/* MZ_ENCODING */
Nathan Moinvaziriea5e45d2018-10-30 13:59:17 -0700140#define MZ_ENCODING_CODEPAGE_437 (437)
141#define MZ_ENCODING_CODEPAGE_932 (932)
142#define MZ_ENCODING_CODEPAGE_936 (936)
143#define MZ_ENCODING_CODEPAGE_950 (950)
144#define MZ_ENCODING_UTF8 (65001)
145
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800146/* MZ_UTILITY */
Nathan Moinvaziri5244fc02018-05-02 20:01:35 -0700147#define MZ_UNUSED(SYMBOL) ((void)SYMBOL)
148
149#ifndef MZ_CUSTOM_ALLOC
Nathan Moinvaziri1840ad02020-06-19 21:29:06 -0700150#define MZ_ALLOC(SIZE) (malloc((SIZE)))
Nathan Moinvaziri5244fc02018-05-02 20:01:35 -0700151#endif
152#ifndef MZ_CUSTOM_FREE
Nathan Moinvaziric546a572018-05-02 20:02:30 -0700153#define MZ_FREE(PTR) (free(PTR))
Nathan Moinvaziri5244fc02018-05-02 20:01:35 -0700154#endif
155
Uilian Ries9fb1dc22021-04-13 18:34:06 -0300156#if defined(_WIN32) && defined(MZ_EXPORTS)
Nathan Moinvazirice5be0f2019-01-24 17:34:24 -0800157#define MZ_EXPORT __declspec(dllexport)
158#else
159#define MZ_EXPORT
160#endif
161
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -0700162/***************************************************************************/
163
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800164#include <stdlib.h> /* size_t, NULL, malloc */
165#include <time.h> /* time_t, time() */
166#include <string.h> /* memset, strncpy, strlen */
Nathan Moinvaziri1ee609b2018-11-19 21:34:35 -0800167#include <limits.h>
168
Fabrice Fontaine9400c1d2020-07-25 14:36:11 +0200169#if defined(HAVE_STDINT_H)
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800170# include <stdint.h>
Fabrice Fontaine9400c1d2020-07-25 14:36:11 +0200171#elif defined(__has_include)
172# if __has_include(<stdint.h>)
173# include <stdint.h>
174# endif
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800175#endif
176
lawadra59538c2021-07-28 14:56:43 +0100177#ifndef INT8_MAX
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800178typedef signed char int8_t;
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800179#endif
lawadra59538c2021-07-28 14:56:43 +0100180#ifndef INT16_MAX
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800181typedef short int16_t;
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800182#endif
lawadra59538c2021-07-28 14:56:43 +0100183#ifndef INT32_MAX
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800184typedef int int32_t;
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800185#endif
lawadra59538c2021-07-28 14:56:43 +0100186#ifndef INT64_MAX
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800187typedef long long int64_t;
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800188#endif
lawadra59538c2021-07-28 14:56:43 +0100189#ifndef UINT8_MAX
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800190typedef unsigned char uint8_t;
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800191#endif
lawadra59538c2021-07-28 14:56:43 +0100192#ifndef UINT16_MAX
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800193typedef unsigned short uint16_t;
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800194#endif
lawadra59538c2021-07-28 14:56:43 +0100195#ifndef UINT32_MAX
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800196typedef unsigned int uint32_t;
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800197#endif
lawadra59538c2021-07-28 14:56:43 +0100198#ifndef UINT64_MAX
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800199typedef unsigned long long uint64_t;
Nathan Moinvazirib16ab562018-11-20 16:56:21 -0800200#endif
201
Fabrice Fontaine9400c1d2020-07-25 14:36:11 +0200202#if defined(HAVE_INTTYPES_H)
Nathan Moinvaziri1ee609b2018-11-19 21:34:35 -0800203# include <inttypes.h>
Fabrice Fontaine9400c1d2020-07-25 14:36:11 +0200204#elif defined(__has_include)
205# if __has_include(<inttypes.h>)
206# include <inttypes.h>
207# endif
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800208#endif
209
210#ifndef PRId8
Nathan Moinvaziri1ee609b2018-11-19 21:34:35 -0800211# define PRId8 "hhd"
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800212#endif
Frederik Seiffertac8c9902020-05-27 17:56:37 +0200213#ifndef PRIu8
214# define PRIu8 "hhu"
215#endif
216#ifndef PRIx8
217# define PRIx8 "hhx"
218#endif
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800219#ifndef PRId16
Nathan Moinvaziri1ee609b2018-11-19 21:34:35 -0800220# define PRId16 "hd"
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800221#endif
Frederik Seiffertac8c9902020-05-27 17:56:37 +0200222#ifndef PRIu16
223# define PRIu16 "hu"
224#endif
225#ifndef PRIx16
226# define PRIx16 "hx"
227#endif
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800228#ifndef PRId32
Nathan Moinvaziri1ee609b2018-11-19 21:34:35 -0800229# define PRId32 "d"
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800230#endif
231#ifndef PRIu32
Nathan Moinvaziri1ee609b2018-11-19 21:34:35 -0800232# define PRIu32 "u"
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800233#endif
234#ifndef PRIx32
Nathan Moinvaziri1ee609b2018-11-19 21:34:35 -0800235# define PRIx32 "x"
Nathan Moinvaziri4ff891a2018-11-27 10:31:14 -0800236#endif
Frederik Seiffertac8c9902020-05-27 17:56:37 +0200237#if ULONG_MAX == 0xfffffffful
Nathan Moinvaziric1fd2ed2018-12-01 09:15:22 -0800238# ifndef PRId64
239# define PRId64 "ld"
240# endif
241# ifndef PRIu64
242# define PRIu64 "lu"
243# endif
244# ifndef PRIx64
245# define PRIx64 "lx"
Nathan Moinvaziri1ee609b2018-11-19 21:34:35 -0800246# endif
Frederik Seiffertac8c9902020-05-27 17:56:37 +0200247#else
248# ifndef PRId64
249# define PRId64 "lld"
250# endif
251# ifndef PRIu64
252# define PRIu64 "llu"
253# endif
254# ifndef PRIx64
255# define PRIx64 "llx"
256# endif
Nathan Moinvaziri00cca9f2017-10-16 07:37:11 -0700257#endif
258
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800259#ifndef INT16_MAX
260# define INT16_MAX 32767
261#endif
Nathan Moinvaziri32fd8052019-07-04 10:32:02 -0700262#ifndef INT32_MAX
Nathan Moinvaziri6ac5fe62018-11-23 08:37:19 -0800263# define INT32_MAX 2147483647L
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800264#endif
265#ifndef INT64_MAX
266# define INT64_MAX 9223372036854775807LL
267#endif
268#ifndef UINT16_MAX
269# define UINT16_MAX 65535U
270#endif
Nathan Moinvaziri32fd8052019-07-04 10:32:02 -0700271#ifndef UINT32_MAX
272# define UINT32_MAX 4294967295UL
Nathan Moinvazirie8496272018-11-21 15:05:58 -0800273#endif
274#ifndef UINT64_MAX
Nathan Moinvaziri6ac5fe62018-11-23 08:37:19 -0800275# define UINT64_MAX 18446744073709551615ULL
Nathan Moinvaziri1ee609b2018-11-19 21:34:35 -0800276#endif
277
278/***************************************************************************/
Nathan Moinvaziric1fd2ed2018-12-01 09:15:22 -0800279
Philippe Casgrain938936c2019-08-21 09:14:32 -0400280#endif