132#define MINIZ_NO_DEFLATE_APIS
141#define MINIZ_NO_ARCHIVE_WRITING_APIS
144#define MINIZ_NO_ZLIB_APIS
147#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES
155#ifdef MINIZ_NO_INFLATE_APIS
156#define MINIZ_NO_ARCHIVE_APIS
159#ifdef MINIZ_NO_DEFLATE_APIS
160#define MINIZ_NO_ARCHIVE_WRITING_APIS
163#if defined(__TINYC__) && (defined(__linux) || defined(__linux__))
170#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS)
174#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i486) || defined(i386) || defined(__ia64__) || defined(__x86_64__)
176#define MINIZ_X86_OR_X64_CPU 1
178#define MINIZ_X86_OR_X64_CPU 0
182#if !defined(MINIZ_LITTLE_ENDIAN)
183#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__)
185#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
187#define MINIZ_LITTLE_ENDIAN 1
189#define MINIZ_LITTLE_ENDIAN 0
194#if MINIZ_X86_OR_X64_CPU
195#define MINIZ_LITTLE_ENDIAN 1
197#define MINIZ_LITTLE_ENDIAN 0
204#if defined(__has_feature)
205#if __has_feature(undefined_behavior_sanitizer)
206#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0
211#if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES)
212#if MINIZ_X86_OR_X64_CPU
214#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0
215#define MINIZ_UNALIGNED_USE_MEMCPY
217#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0
221#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || defined(_LP64) || defined(__LP64__) || defined(__ia64__) || defined(__x86_64__)
223#define MINIZ_HAS_64BIT_REGISTERS 1
225#define MINIZ_HAS_64BIT_REGISTERS 0
239 MINIZ_EXPORT
void mz_free(
void *p);
241#define MZ_ADLER32_INIT (1)
245#define MZ_CRC32_INIT (0)
264 typedef void *(*mz_alloc_func)(
void *opaque,
size_t items,
size_t size);
266 typedef void *(*mz_realloc_func)(
void *opaque,
void *address,
size_t items,
size_t size);
279#define MZ_VERSION "11.0.2"
280#define MZ_VERNUM 0xB002
281#define MZ_VER_MAJOR 11
282#define MZ_VER_MINOR 2
283#define MZ_VER_REVISION 0
284#define MZ_VER_SUBREVISION 0
286#ifndef MINIZ_NO_ZLIB_APIS
292 MZ_PARTIAL_FLUSH = 1,
306 MZ_STREAM_ERROR = -2,
310 MZ_VERSION_ERROR = -6,
311 MZ_PARAM_ERROR = -10000
315#define MZ_DEFAULT_WINDOW_BITS 15
317 struct mz_internal_state;
320 typedef struct mz_stream_s
322 const unsigned char *next_in;
323 unsigned int avail_in;
326 unsigned char *next_out;
327 unsigned int avail_out;
331 struct mz_internal_state *state;
342 typedef mz_stream *mz_streamp;
347#ifndef MINIZ_NO_DEFLATE_APIS
360 MINIZ_EXPORT
int mz_deflateInit(mz_streamp pStream,
int level);
367 MINIZ_EXPORT
int mz_deflateInit2(mz_streamp pStream,
int level,
int method,
int window_bits,
int mem_level,
int strategy);
370 MINIZ_EXPORT
int mz_deflateReset(mz_streamp pStream);
382 MINIZ_EXPORT
int mz_deflate(mz_streamp pStream,
int flush);
388 MINIZ_EXPORT
int mz_deflateEnd(mz_streamp pStream);
391 MINIZ_EXPORT
mz_ulong mz_deflateBound(mz_streamp pStream,
mz_ulong source_len);
395 MINIZ_EXPORT
int mz_compress(
unsigned char *pDest,
mz_ulong *pDest_len,
const unsigned char *pSource,
mz_ulong source_len);
396 MINIZ_EXPORT
int mz_compress2(
unsigned char *pDest,
mz_ulong *pDest_len,
const unsigned char *pSource,
mz_ulong source_len,
int level);
403#ifndef MINIZ_NO_INFLATE_APIS
406 MINIZ_EXPORT
int mz_inflateInit(mz_streamp pStream);
410 MINIZ_EXPORT
int mz_inflateInit2(mz_streamp pStream,
int window_bits);
413 MINIZ_EXPORT
int mz_inflateReset(mz_streamp pStream);
429 MINIZ_EXPORT
int mz_inflate(mz_streamp pStream,
int flush);
432 MINIZ_EXPORT
int mz_inflateEnd(mz_streamp pStream);
436 MINIZ_EXPORT
int mz_uncompress(
unsigned char *pDest,
mz_ulong *pDest_len,
const unsigned char *pSource,
mz_ulong source_len);
437 MINIZ_EXPORT
int mz_uncompress2(
unsigned char *pDest,
mz_ulong *pDest_len,
const unsigned char *pSource,
mz_ulong *pSource_len);
441 MINIZ_EXPORT
const char *mz_error(
int err);
445#ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES
446 typedef unsigned char Byte;
447 typedef unsigned int uInt;
453 typedef void *voidpf;
454 typedef uLong uLongf;
456 typedef void *
const voidpc;
458#define Z_NO_FLUSH MZ_NO_FLUSH
459#define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH
460#define Z_SYNC_FLUSH MZ_SYNC_FLUSH
461#define Z_FULL_FLUSH MZ_FULL_FLUSH
462#define Z_FINISH MZ_FINISH
463#define Z_BLOCK MZ_BLOCK
465#define Z_STREAM_END MZ_STREAM_END
466#define Z_NEED_DICT MZ_NEED_DICT
467#define Z_ERRNO MZ_ERRNO
468#define Z_STREAM_ERROR MZ_STREAM_ERROR
469#define Z_DATA_ERROR MZ_DATA_ERROR
470#define Z_MEM_ERROR MZ_MEM_ERROR
471#define Z_BUF_ERROR MZ_BUF_ERROR
472#define Z_VERSION_ERROR MZ_VERSION_ERROR
473#define Z_PARAM_ERROR MZ_PARAM_ERROR
474#define Z_NO_COMPRESSION MZ_NO_COMPRESSION
475#define Z_BEST_SPEED MZ_BEST_SPEED
476#define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION
477#define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION
478#define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY
479#define Z_FILTERED MZ_FILTERED
480#define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY
482#define Z_FIXED MZ_FIXED
483#define Z_DEFLATED MZ_DEFLATED
484#define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS
486 typedef void *(*alloc_func)(
void *opaque,
size_t items,
size_t size);
488 typedef void (*free_func)(
void *opaque,
void *address);
490#define internal_state mz_internal_state
491#define z_stream mz_stream
493#ifndef MINIZ_NO_DEFLATE_APIS
495 static int deflateInit(mz_streamp pStream,
int level)
497 return mz_deflateInit(pStream, level);
499 static int deflateInit2(mz_streamp pStream,
int level,
int method,
int window_bits,
int mem_level,
int strategy)
501 return mz_deflateInit2(pStream, level, method, window_bits, mem_level, strategy);
503 static int deflateReset(mz_streamp pStream)
505 return mz_deflateReset(pStream);
507 static int deflate(mz_streamp pStream,
int flush)
509 return mz_deflate(pStream, flush);
511 static int deflateEnd(mz_streamp pStream)
513 return mz_deflateEnd(pStream);
517 return mz_deflateBound(pStream, source_len);
519 static int compress(
unsigned char *pDest,
mz_ulong *pDest_len,
const unsigned char *pSource,
mz_ulong source_len)
521 return mz_compress(pDest, pDest_len, pSource, source_len);
523 static int compress2(
unsigned char *pDest,
mz_ulong *pDest_len,
const unsigned char *pSource,
mz_ulong source_len,
int level)
525 return mz_compress2(pDest, pDest_len, pSource, source_len, level);
529 return mz_compressBound(source_len);
533#ifndef MINIZ_NO_INFLATE_APIS
535 static int inflateInit(mz_streamp pStream)
537 return mz_inflateInit(pStream);
540 static int inflateInit2(mz_streamp pStream,
int window_bits)
542 return mz_inflateInit2(pStream, window_bits);
545 static int inflateReset(mz_streamp pStream)
547 return mz_inflateReset(pStream);
550 static int inflate(mz_streamp pStream,
int flush)
552 return mz_inflate(pStream, flush);
555 static int inflateEnd(mz_streamp pStream)
557 return mz_inflateEnd(pStream);
560 static int uncompress(
unsigned char* pDest,
mz_ulong* pDest_len,
const unsigned char* pSource,
mz_ulong source_len)
562 return mz_uncompress(pDest, pDest_len, pSource, source_len);
565 static int uncompress2(
unsigned char* pDest,
mz_ulong* pDest_len,
const unsigned char* pSource,
mz_ulong* pSource_len)
567 return mz_uncompress2(pDest, pDest_len, pSource, pSource_len);
571 static mz_ulong crc32(
mz_ulong crc,
const unsigned char *ptr,
size_t buf_len)
576 static mz_ulong adler32(
mz_ulong adler,
const unsigned char *ptr,
size_t buf_len)
582#define MAX_MEM_LEVEL 9
584 static const char* zError(
int err)
586 return mz_error(err);
588#define ZLIB_VERSION MZ_VERSION
589#define ZLIB_VERNUM MZ_VERNUM
590#define ZLIB_VER_MAJOR MZ_VER_MAJOR
591#define ZLIB_VER_MINOR MZ_VER_MINOR
592#define ZLIB_VER_REVISION MZ_VER_REVISION
593#define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION
595#define zlibVersion mz_version
596#define zlib_version mz_version()
617typedef unsigned char mz_uint8;
618typedef int16_t mz_int16;
619typedef uint16_t mz_uint16;
620typedef uint32_t mz_uint32;
621typedef uint32_t mz_uint;
622typedef int64_t mz_int64;
623typedef uint64_t mz_uint64;
631#define MZ_MACRO_END while (0, 0)
633#define MZ_MACRO_END while (0)
637#define MZ_FILE void *
644typedef struct mz_dummy_time_t_tag
649#define MZ_TIME_T mz_dummy_time_t
651#define MZ_TIME_T time_t
654#define MZ_ASSERT(x) assert(x)
656#ifdef MINIZ_NO_MALLOC
657#define MZ_MALLOC(x) NULL
658#define MZ_FREE(x) (void)x, ((void)0)
659#define MZ_REALLOC(p, x) NULL
661#define MZ_MALLOC(x) malloc(x)
662#define MZ_FREE(x) free(x)
663#define MZ_REALLOC(p, x) realloc(p, x)
666#define MZ_MAX(a, b) (((a) > (b)) ? (a) : (b))
667#define MZ_MIN(a, b) (((a) < (b)) ? (a) : (b))
668#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj))
669#define MZ_CLEAR_ARR(obj) memset((obj), 0, sizeof(obj))
670#define MZ_CLEAR_PTR(obj) memset((obj), 0, sizeof(*obj))
672#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
673#define MZ_READ_LE16(p) *((const mz_uint16 *)(p))
674#define MZ_READ_LE32(p) *((const mz_uint32 *)(p))
676#define MZ_READ_LE16(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U))
677#define MZ_READ_LE32(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U))
680#define MZ_READ_LE64(p) (((mz_uint64)MZ_READ_LE32(p)) | (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + sizeof(mz_uint32))) << 32U))
683#define MZ_FORCEINLINE __forceinline
684#elif defined(__GNUC__)
685#define MZ_FORCEINLINE __inline__ __attribute__((__always_inline__))
687#define MZ_FORCEINLINE inline
699#define MZ_UINT16_MAX (0xFFFFU)
700#define MZ_UINT32_MAX (0xFFFFFFFFU)
708#ifndef MINIZ_NO_DEFLATE_APIS
717#ifndef TDEFL_LESS_MEMORY
718#define TDEFL_LESS_MEMORY 0
725 TDEFL_HUFFMAN_ONLY = 0,
726 TDEFL_DEFAULT_MAX_PROBES = 128,
727 TDEFL_MAX_PROBES_MASK = 0xFFF
741 TDEFL_WRITE_ZLIB_HEADER = 0x01000,
742 TDEFL_COMPUTE_ADLER32 = 0x02000,
743 TDEFL_GREEDY_PARSING_FLAG = 0x04000,
744 TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000,
745 TDEFL_RLE_MATCHES = 0x10000,
746 TDEFL_FILTER_MATCHES = 0x20000,
747 TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000,
748 TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000
760 MINIZ_EXPORT
void *tdefl_compress_mem_to_heap(
const void *pSrc_buf,
size_t src_buf_len,
size_t *pOut_len,
int flags);
764 MINIZ_EXPORT
size_t tdefl_compress_mem_to_mem(
void *pOut_buf,
size_t out_buf_len,
const void *pSrc_buf,
size_t src_buf_len,
int flags);
776 MINIZ_EXPORT
void *tdefl_write_image_to_png_file_in_memory_ex(
const void *pImage,
int w,
int h,
int num_chans,
size_t *pLen_out, mz_uint level, mz_bool flip);
777 MINIZ_EXPORT
void *tdefl_write_image_to_png_file_in_memory(
const void *pImage,
int w,
int h,
int num_chans,
size_t *pLen_out);
780 typedef mz_bool (*tdefl_put_buf_func_ptr)(
const void *pBuf,
int len,
void *pUser);
783 MINIZ_EXPORT mz_bool tdefl_compress_mem_to_output(
const void *pBuf,
size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func,
void *pPut_buf_user,
int flags);
787 TDEFL_MAX_HUFF_TABLES = 3,
788 TDEFL_MAX_HUFF_SYMBOLS_0 = 288,
789 TDEFL_MAX_HUFF_SYMBOLS_1 = 32,
790 TDEFL_MAX_HUFF_SYMBOLS_2 = 19,
791 TDEFL_LZ_DICT_SIZE = 32768,
792 TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1,
793 TDEFL_MIN_MATCH_LEN = 3,
794 TDEFL_MAX_MATCH_LEN = 258
801 TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024,
802 TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10,
803 TDEFL_MAX_HUFF_SYMBOLS = 288,
804 TDEFL_LZ_HASH_BITS = 12,
805 TDEFL_LEVEL1_HASH_SIZE_MASK = 4095,
806 TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3,
807 TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS
812 TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024,
813 TDEFL_OUT_BUF_SIZE = (mz_uint)((TDEFL_LZ_CODE_BUF_SIZE * 13) / 10),
814 TDEFL_MAX_HUFF_SYMBOLS = 288,
815 TDEFL_LZ_HASH_BITS = 15,
816 TDEFL_LEVEL1_HASH_SIZE_MASK = 4095,
817 TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3,
818 TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS
825 TDEFL_STATUS_BAD_PARAM = -2,
826 TDEFL_STATUS_PUT_BUF_FAILED = -1,
827 TDEFL_STATUS_OKAY = 0,
828 TDEFL_STATUS_DONE = 1
835 TDEFL_SYNC_FLUSH = 2,
836 TDEFL_FULL_FLUSH = 3,
843 tdefl_put_buf_func_ptr m_pPut_buf_func;
844 void *m_pPut_buf_user;
845 mz_uint m_flags, m_max_probes[2];
846 int m_greedy_parsing;
847 mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size;
848 mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end;
849 mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, m_bit_buffer;
850 mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, m_wants_to_finish;
851 tdefl_status m_prev_return_status;
852 const void *m_pIn_buf;
854 size_t *m_pIn_buf_size, *m_pOut_buf_size;
856 const mz_uint8 *m_pSrc;
857 size_t m_src_buf_left, m_out_buf_ofs;
858 mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1];
859 mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
860 mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
861 mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
862 mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE];
863 mz_uint16 m_next[TDEFL_LZ_DICT_SIZE];
864 mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE];
865 mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE];
873 MINIZ_EXPORT tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func,
void *pPut_buf_user,
int flags);
876 MINIZ_EXPORT tdefl_status tdefl_compress(tdefl_compressor *d,
const void *pIn_buf,
size_t *pIn_buf_size,
void *pOut_buf,
size_t *pOut_buf_size, tdefl_flush flush);
880 MINIZ_EXPORT tdefl_status tdefl_compress_buffer(tdefl_compressor *d,
const void *pIn_buf,
size_t in_buf_size, tdefl_flush flush);
882 MINIZ_EXPORT tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d);
883 MINIZ_EXPORT mz_uint32 tdefl_get_adler32(tdefl_compressor *d);
889 MINIZ_EXPORT mz_uint tdefl_create_comp_flags_from_zip_params(
int level,
int window_bits,
int strategy);
891#ifndef MINIZ_NO_MALLOC
895 MINIZ_EXPORT tdefl_compressor *tdefl_compressor_alloc(
void);
896 MINIZ_EXPORT
void tdefl_compressor_free(tdefl_compressor *pComp);
908#ifndef MINIZ_NO_INFLATE_APIS
921 TINFL_FLAG_PARSE_ZLIB_HEADER = 1,
922 TINFL_FLAG_HAS_MORE_INPUT = 2,
923 TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4,
924 TINFL_FLAG_COMPUTE_ADLER32 = 8
939#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1))
940 MINIZ_EXPORT
size_t tinfl_decompress_mem_to_mem(
void *pOut_buf,
size_t out_buf_len,
const void *pSrc_buf,
size_t src_buf_len,
int flags);
944 typedef int (*tinfl_put_buf_func_ptr)(
const void *pBuf,
int len,
void *pUser);
945 MINIZ_EXPORT
int tinfl_decompress_mem_to_callback(
const void *pIn_buf,
size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func,
void *pPut_buf_user,
int flags);
947 struct tinfl_decompressor_tag;
948 typedef struct tinfl_decompressor_tag tinfl_decompressor;
950#ifndef MINIZ_NO_MALLOC
959#define TINFL_LZ_DICT_SIZE 32768
967 TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS = -4,
970 TINFL_STATUS_BAD_PARAM = -3,
973 TINFL_STATUS_ADLER32_MISMATCH = -2,
976 TINFL_STATUS_FAILED = -1,
982 TINFL_STATUS_DONE = 0,
987 TINFL_STATUS_NEEDS_MORE_INPUT = 1,
993 TINFL_STATUS_HAS_MORE_OUTPUT = 2
997#define tinfl_init(r) \
1003#define tinfl_get_adler32(r) (r)->m_check_adler32
1007 MINIZ_EXPORT tinfl_status
tinfl_decompress(tinfl_decompressor *
r,
const mz_uint8 *pIn_buf_next,
size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next,
size_t *pOut_buf_size,
const mz_uint32 decomp_flags);
1012 TINFL_MAX_HUFF_TABLES = 3,
1013 TINFL_MAX_HUFF_SYMBOLS_0 = 288,
1014 TINFL_MAX_HUFF_SYMBOLS_1 = 32,
1015 TINFL_MAX_HUFF_SYMBOLS_2 = 19,
1016 TINFL_FAST_LOOKUP_BITS = 10,
1017 TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS
1020#if MINIZ_HAS_64BIT_REGISTERS
1021#define TINFL_USE_64BIT_BITBUF 1
1023#define TINFL_USE_64BIT_BITBUF 0
1026#if TINFL_USE_64BIT_BITBUF
1027 typedef mz_uint64 tinfl_bit_buf_t;
1028#define TINFL_BITBUF_SIZE (64)
1030typedef mz_uint32 tinfl_bit_buf_t;
1031#define TINFL_BITBUF_SIZE (32)
1034 struct tinfl_decompressor_tag
1036 mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, m_check_adler32, m_dist, m_counter, m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES];
1037 tinfl_bit_buf_t m_bit_buf;
1038 size_t m_dist_from_out_buf_start;
1039 mz_int16 m_look_up[TINFL_MAX_HUFF_TABLES][TINFL_FAST_LOOKUP_SIZE];
1040 mz_int16 m_tree_0[TINFL_MAX_HUFF_SYMBOLS_0 * 2];
1041 mz_int16 m_tree_1[TINFL_MAX_HUFF_SYMBOLS_1 * 2];
1042 mz_int16 m_tree_2[TINFL_MAX_HUFF_SYMBOLS_2 * 2];
1043 mz_uint8 m_code_size_0[TINFL_MAX_HUFF_SYMBOLS_0];
1044 mz_uint8 m_code_size_1[TINFL_MAX_HUFF_SYMBOLS_1];
1045 mz_uint8 m_code_size_2[TINFL_MAX_HUFF_SYMBOLS_2];
1046 mz_uint8 m_raw_header[4], m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137];
1060#ifndef MINIZ_NO_ARCHIVE_APIS
1070 MZ_ZIP_MAX_IO_BUF_SIZE = 64 * 1024,
1071 MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 512,
1072 MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 512
1078 mz_uint32 m_file_index;
1081 mz_uint64 m_central_dir_ofs;
1084 mz_uint16 m_version_made_by;
1085 mz_uint16 m_version_needed;
1086 mz_uint16 m_bit_flag;
1093 mz_uint64 m_comp_size;
1096 mz_uint64 m_uncomp_size;
1099 mz_uint16 m_internal_attr;
1100 mz_uint32 m_external_attr;
1103 mz_uint64 m_local_header_ofs;
1106 mz_uint32 m_comment_size;
1109 mz_bool m_is_directory;
1112 mz_bool m_is_encrypted;
1115 mz_bool m_is_supported;
1119 char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE];
1123 char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE];
1126 MZ_TIME_T m_padding;
1130 } mz_zip_archive_file_stat;
1132 typedef size_t (*mz_file_read_func)(
void *pOpaque, mz_uint64 file_ofs,
void *pBuf,
size_t n);
1133 typedef size_t (*mz_file_write_func)(
void *pOpaque, mz_uint64 file_ofs,
const void *pBuf,
size_t n);
1134 typedef mz_bool (*mz_file_needs_keepalive)(
void *pOpaque);
1141 MZ_ZIP_MODE_INVALID = 0,
1142 MZ_ZIP_MODE_READING = 1,
1143 MZ_ZIP_MODE_WRITING = 2,
1144 MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3
1149 MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100,
1150 MZ_ZIP_FLAG_IGNORE_PATH = 0x0200,
1151 MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400,
1152 MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800,
1153 MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG = 0x1000,
1154 MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY = 0x2000,
1155 MZ_ZIP_FLAG_WRITE_ZIP64 = 0x4000,
1156 MZ_ZIP_FLAG_WRITE_ALLOW_READING = 0x8000,
1157 MZ_ZIP_FLAG_ASCII_FILENAME = 0x10000,
1160 MZ_ZIP_FLAG_WRITE_HEADER_SET_SIZE = 0x20000,
1161 MZ_ZIP_FLAG_READ_ALLOW_WRITING = 0x40000
1166 MZ_ZIP_TYPE_INVALID = 0,
1178 MZ_ZIP_NO_ERROR = 0,
1179 MZ_ZIP_UNDEFINED_ERROR,
1180 MZ_ZIP_TOO_MANY_FILES,
1181 MZ_ZIP_FILE_TOO_LARGE,
1182 MZ_ZIP_UNSUPPORTED_METHOD,
1183 MZ_ZIP_UNSUPPORTED_ENCRYPTION,
1184 MZ_ZIP_UNSUPPORTED_FEATURE,
1185 MZ_ZIP_FAILED_FINDING_CENTRAL_DIR,
1186 MZ_ZIP_NOT_AN_ARCHIVE,
1187 MZ_ZIP_INVALID_HEADER_OR_CORRUPTED,
1188 MZ_ZIP_UNSUPPORTED_MULTIDISK,
1189 MZ_ZIP_DECOMPRESSION_FAILED,
1190 MZ_ZIP_COMPRESSION_FAILED,
1191 MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE,
1192 MZ_ZIP_CRC_CHECK_FAILED,
1193 MZ_ZIP_UNSUPPORTED_CDIR_SIZE,
1194 MZ_ZIP_ALLOC_FAILED,
1195 MZ_ZIP_FILE_OPEN_FAILED,
1196 MZ_ZIP_FILE_CREATE_FAILED,
1197 MZ_ZIP_FILE_WRITE_FAILED,
1198 MZ_ZIP_FILE_READ_FAILED,
1199 MZ_ZIP_FILE_CLOSE_FAILED,
1200 MZ_ZIP_FILE_SEEK_FAILED,
1201 MZ_ZIP_FILE_STAT_FAILED,
1202 MZ_ZIP_INVALID_PARAMETER,
1203 MZ_ZIP_INVALID_FILENAME,
1204 MZ_ZIP_BUF_TOO_SMALL,
1205 MZ_ZIP_INTERNAL_ERROR,
1206 MZ_ZIP_FILE_NOT_FOUND,
1207 MZ_ZIP_ARCHIVE_TOO_LARGE,
1208 MZ_ZIP_VALIDATION_FAILED,
1209 MZ_ZIP_WRITE_CALLBACK_FAILED,
1215 mz_uint64 m_archive_size;
1216 mz_uint64 m_central_directory_file_ofs;
1219 mz_uint32 m_total_files;
1220 mz_zip_mode m_zip_mode;
1221 mz_zip_type m_zip_type;
1222 mz_zip_error m_last_error;
1224 mz_uint64 m_file_offset_alignment;
1229 void *m_pAlloc_opaque;
1231 mz_file_read_func m_pRead;
1232 mz_file_write_func m_pWrite;
1233 mz_file_needs_keepalive m_pNeeds_keepalive;
1236 mz_zip_internal_state *m_pState;
1242 mz_zip_archive *pZip;
1247 mz_uint64 read_buf_size, read_buf_ofs, read_buf_avail, comp_remaining, out_buf_ofs, cur_file_ofs;
1248 mz_zip_archive_file_stat file_stat;
1252 size_t out_blk_remain;
1254 tinfl_decompressor inflator;
1256#ifdef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
1262 } mz_zip_reader_extract_iter_state;
1268 MINIZ_EXPORT mz_bool
mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint flags);
1270 MINIZ_EXPORT mz_bool
mz_zip_reader_init_mem(mz_zip_archive *pZip,
const void *pMem,
size_t size, mz_uint flags);
1272#ifndef MINIZ_NO_STDIO
1277 MINIZ_EXPORT mz_bool
mz_zip_reader_init_file_v2(mz_zip_archive *pZip,
const char *pFilename, mz_uint flags, mz_uint64 file_start_ofs, mz_uint64 archive_size);
1282 MINIZ_EXPORT mz_bool
mz_zip_reader_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint64 archive_size, mz_uint flags);
1326 MINIZ_EXPORT mz_uint
mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index,
char *pFilename, mz_uint filename_buf_size);
1331 MINIZ_EXPORT
int mz_zip_reader_locate_file(mz_zip_archive *pZip,
const char *pName,
const char *pComment, mz_uint flags);
1332 MINIZ_EXPORT mz_bool
mz_zip_reader_locate_file_v2(mz_zip_archive *pZip,
const char *pName,
const char *pComment, mz_uint flags, mz_uint32 *file_index);
1335 MINIZ_EXPORT mz_bool
mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat);
1347 MINIZ_EXPORT mz_bool
mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index,
void *pBuf,
size_t buf_size, mz_uint flags,
void *pUser_read_buf,
size_t user_read_buf_size);
1351 MINIZ_EXPORT mz_bool
mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index,
void *pBuf,
size_t buf_size, mz_uint flags);
1370#ifndef MINIZ_NO_STDIO
1383 typedef void *mz_zip_streaming_extract_state_ptr;
1384 mz_zip_streaming_extract_state_ptr mz_zip_streaming_extract_begin(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags);
1385 mz_uint64 mz_zip_streaming_extract_get_size(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState);
1386 mz_uint64 mz_zip_streaming_extract_get_cur_ofs(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState);
1387 mz_bool mz_zip_streaming_extract_seek(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState, mz_uint64 new_ofs);
1388 size_t mz_zip_streaming_extract_read(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState,
void *pBuf,
size_t buf_size);
1389 mz_bool mz_zip_streaming_extract_end(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState);
1394 MINIZ_EXPORT mz_bool
mz_zip_validate_file(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags);
1401#ifndef MINIZ_NO_STDIO
1406 MINIZ_EXPORT mz_bool
mz_zip_end(mz_zip_archive *pZip);
1410#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
1415 MINIZ_EXPORT mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size);
1416 MINIZ_EXPORT mz_bool mz_zip_writer_init_v2(mz_zip_archive *pZip, mz_uint64 existing_size, mz_uint flags);
1418 MINIZ_EXPORT mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip,
size_t size_to_reserve_at_beginning,
size_t initial_allocation_size);
1419 MINIZ_EXPORT mz_bool mz_zip_writer_init_heap_v2(mz_zip_archive *pZip,
size_t size_to_reserve_at_beginning,
size_t initial_allocation_size, mz_uint flags);
1421#ifndef MINIZ_NO_STDIO
1422 MINIZ_EXPORT mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip,
const char *pFilename, mz_uint64 size_to_reserve_at_beginning);
1423 MINIZ_EXPORT mz_bool mz_zip_writer_init_file_v2(mz_zip_archive *pZip,
const char *pFilename, mz_uint64 size_to_reserve_at_beginning, mz_uint flags);
1424 MINIZ_EXPORT mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint flags);
1433 MINIZ_EXPORT mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip,
const char *pFilename);
1434 MINIZ_EXPORT mz_bool mz_zip_writer_init_from_reader_v2(mz_zip_archive *pZip,
const char *pFilename, mz_uint flags);
1439 MINIZ_EXPORT mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip,
const char *pArchive_name,
const void *pBuf,
size_t buf_size, mz_uint level_and_flags);
1443 MINIZ_EXPORT mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip,
const char *pArchive_name,
const void *pBuf,
size_t buf_size,
const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags,
1444 mz_uint64 uncomp_size, mz_uint32 uncomp_crc32);
1446 MINIZ_EXPORT mz_bool mz_zip_writer_add_mem_ex_v2(mz_zip_archive *pZip,
const char *pArchive_name,
const void *pBuf,
size_t buf_size,
const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags,
1447 mz_uint64 uncomp_size, mz_uint32 uncomp_crc32, MZ_TIME_T *last_modified,
const char *user_extra_data_local, mz_uint user_extra_data_local_len,
1448 const char *user_extra_data_central, mz_uint user_extra_data_central_len);
1452 MINIZ_EXPORT mz_bool mz_zip_writer_add_read_buf_callback(mz_zip_archive *pZip,
const char *pArchive_name, mz_file_read_func read_callback,
void *callback_opaque, mz_uint64 max_size,
1453 const MZ_TIME_T *pFile_time,
const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags,
const char *user_extra_data_local, mz_uint user_extra_data_local_len,
1454 const char *user_extra_data_central, mz_uint user_extra_data_central_len);
1456#ifndef MINIZ_NO_STDIO
1459 MINIZ_EXPORT mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip,
const char *pArchive_name,
const char *pSrc_filename,
const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags);
1462 MINIZ_EXPORT mz_bool mz_zip_writer_add_cfile(mz_zip_archive *pZip,
const char *pArchive_name, MZ_FILE *pSrc_file, mz_uint64 max_size,
1463 const MZ_TIME_T *pFile_time,
const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags,
const char *user_extra_data_local, mz_uint user_extra_data_local_len,
1464 const char *user_extra_data_central, mz_uint user_extra_data_central_len);
1469 MINIZ_EXPORT mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint src_file_index);
1474 MINIZ_EXPORT mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip);
1478 MINIZ_EXPORT mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip,
void **ppBuf,
size_t *pSize);
1482 MINIZ_EXPORT mz_bool mz_zip_writer_end(mz_zip_archive *pZip);
1490 MINIZ_EXPORT mz_bool mz_zip_add_mem_to_archive_file_in_place(
const char *pZip_filename,
const char *pArchive_name,
const void *pBuf,
size_t buf_size,
const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags);
1491 MINIZ_EXPORT mz_bool mz_zip_add_mem_to_archive_file_in_place_v2(
const char *pZip_filename,
const char *pArchive_name,
const void *pBuf,
size_t buf_size,
const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_zip_error *pErr);
1493#ifndef MINIZ_NO_STDIO
1497 MINIZ_EXPORT
void *mz_zip_extract_archive_file_to_heap(
const char *pZip_filename,
const char *pArchive_name,
size_t *pSize, mz_uint flags);
1498 MINIZ_EXPORT
void *mz_zip_extract_archive_file_to_heap_v2(
const char *pZip_filename,
const char *pArchive_name,
const char *pComment,
size_t *pSize, mz_uint flags, mz_zip_error *pErr);
mz_bool mz_zip_is_zip64(mz_zip_archive *pZip)
mz_bool mz_zip_reader_end(mz_zip_archive *pZip)
mz_bool mz_zip_validate_archive(mz_zip_archive *pZip, mz_uint flags)
mz_zip_type mz_zip_get_type(mz_zip_archive *pZip)
mz_bool mz_zip_end(mz_zip_archive *pZip)
mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip)
mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags)
size_t mz_zip_get_central_dir_size(mz_zip_archive *pZip)
mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags)
mz_zip_reader_extract_iter_state * mz_zip_reader_extract_iter_new(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags)
mz_zip_mode mz_zip_get_mode(mz_zip_archive *pZip)
MINIZ_EXPORT void * miniz_def_alloc_func(void *opaque, size_t items, size_t size)
MINIZ_EXPORT void * miniz_def_realloc_func(void *opaque, void *address, size_t items, size_t size)
size_t mz_zip_read_archive_data(mz_zip_archive *pZip, mz_uint64 file_ofs, void *pBuf, size_t n)
int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags)
mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index)
void * tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags)
mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size)
mz_bool mz_zip_reader_locate_file_v2(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags, mz_uint32 *pIndex)
mz_zip_error mz_zip_peek_last_error(mz_zip_archive *pZip)
mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint flags)
mz_zip_error mz_zip_get_last_error(mz_zip_archive *pZip)
mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags)
mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags)
mz_bool mz_zip_validate_file_archive(const char *pFilename, mz_uint flags, mz_zip_error *pErr)
mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint flags)
const char * mz_version(void)
const char * mz_zip_get_error_string(mz_zip_error mz_err)
void * mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags)
int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags)
mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index)
void mz_zip_zero_struct(mz_zip_archive *pZip)
mz_uint64 mz_zip_get_archive_size(mz_zip_archive *pZip)
size_t mz_zip_reader_extract_iter_read(mz_zip_reader_extract_iter_state *pState, void *pvBuf, size_t buf_size)
MZ_FILE * mz_zip_get_cfile(mz_zip_archive *pZip)
mz_bool mz_zip_reader_is_file_supported(mz_zip_archive *pZip, mz_uint file_index)
mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags)
mz_zip_error mz_zip_set_last_error(mz_zip_archive *pZip, mz_zip_error err_num)
MINIZ_EXPORT void miniz_def_free_func(void *opaque, void *address)
tinfl_decompressor * tinfl_decompressor_alloc(void)
mz_zip_reader_extract_iter_state * mz_zip_reader_extract_file_iter_new(mz_zip_archive *pZip, const char *pFilename, mz_uint flags)
mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat)
mz_bool mz_zip_reader_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags, mz_uint64 file_start_ofs, mz_uint64 archive_size)
mz_uint64 mz_zip_get_archive_file_start_offset(mz_zip_archive *pZip)
void * mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags)
mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags)
mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size)
size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags)
tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags)
mz_bool mz_zip_validate_mem_archive(const void *pMem, size_t size, mz_uint flags, mz_zip_error *pErr)
mz_bool mz_zip_validate_file(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags)
mz_bool mz_zip_reader_extract_iter_free(mz_zip_reader_extract_iter_state *pState)
mz_bool mz_zip_reader_extract_to_cfile(mz_zip_archive *pZip, mz_uint file_index, MZ_FILE *pFile, mz_uint flags)
mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint64 archive_size, mz_uint flags)
mz_bool mz_zip_reader_extract_file_to_cfile(mz_zip_archive *pZip, const char *pArchive_filename, MZ_FILE *pFile, mz_uint flags)
mz_zip_error mz_zip_clear_last_error(mz_zip_archive *pZip)
mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags)
mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size)
void tinfl_decompressor_free(tinfl_decompressor *pDecomp)
void *(* mz_alloc_func)(void *opaque, size_t items, size_t size)
MINIZ_EXPORT mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len)
MINIZ_EXPORT mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len)
MINIZ_EXPORT void mz_free(void *p)
void *(* mz_realloc_func)(void *opaque, void *address, size_t items, size_t size)
void(* mz_free_func)(void *opaque, void *address)