29 #pragma warning(disable:4242)
31 #pragma warning(disable:4244)
33 #pragma warning(disable:4365)
35 #pragma warning(disable:4548)
37 #pragma warning(disable:4061)
39 #pragma warning(disable:4334)
41 #pragma warning(disable:5039)
60 size_t block_len = buf_len % 5552;
65 for(i = 0; i + 7 < block_len; i += 8, ptr += 8)
76 for(; i < block_len; ++i)
78 s1 %= 65521U,
s2 %= 65521U;
82 return (
s2 << 16) +
s1;
89 static const mz_uint32 s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
90 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c };
98 crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)];
99 crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)];
108 static const mz_uint32 s_crc_table[256] =
110 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535,
111 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD,
112 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D,
113 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
114 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,
115 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,
116 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC,
117 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
118 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB,
119 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,
120 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB,
121 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
122 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA,
123 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE,
124 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,
125 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
126 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409,
127 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,
128 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739,
129 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
130 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268,
131 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0,
132 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8,
133 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
134 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,
135 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703,
136 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7,
137 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
138 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE,
139 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,
140 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6,
141 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
142 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D,
143 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5,
144 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,
145 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
146 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
178 #ifndef MINIZ_NO_ZLIB_APIS
182 (void)opaque, (
void)items, (void)size;
187 (void)opaque, (
void)address;
192 (void)opaque, (
void)address, (void)items, (
void)size;
231 pStream->
state = (
struct mz_internal_state *)pComp;
244 if((!pStream) || (!pStream->
state) || (!pStream->
zalloc) || (!pStream->
zfree))
253 size_t in_bytes, out_bytes;
254 mz_ulong orig_total_in, orig_total_out;
255 int mz_status =
MZ_OK;
300 if((flush) || (pStream->
total_in != orig_total_in) || (pStream->
total_out != orig_total_out))
316 pStream->
state = NULL;
325 return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5);
332 memset(&stream, 0,
sizeof(stream));
335 if((source_len | *pDest_len) > 0xFFFFFFFFU)
400 pStream->
state = (
struct mz_internal_state *)pDecomp;
422 size_t in_bytes, out_bytes, orig_avail_in;
425 if((!pStream) || (!pStream->
state))
537 pStream->
state = NULL;
546 memset(&stream, 0,
sizeof(stream));
549 if((source_len | *pDest_len) > 0xFFFFFFFFU)
580 {
MZ_OK,
"" }, {
MZ_STREAM_END,
"stream end" }, {
MZ_NEED_DICT,
"need dictionary" }, {
MZ_ERRNO,
"file error" }, {
MZ_STREAM_ERROR,
"stream error" },
584 for(i = 0; i <
sizeof(s_error_descs) /
sizeof(s_error_descs[0]); ++i)
585 if(s_error_descs[i].m_err ==
err)
586 return s_error_descs[i].m_pDesc;
660 257, 258, 259, 260, 261, 262, 263, 264, 265, 265, 266, 266, 267, 267, 268, 268, 269, 269, 269, 269, 270, 270, 270, 270, 271, 271, 271, 271, 272, 272, 272, 272,
661 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275, 276, 276, 276, 276, 276, 276, 276, 276,
662 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
663 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
664 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
665 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
666 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
667 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 285
672 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
673 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
674 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
675 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0
680 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,
681 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13,
682 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
683 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
684 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
685 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
686 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
687 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
688 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
689 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
690 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
691 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17
696 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
697 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
698 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
699 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
700 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
701 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
702 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
703 7, 7, 7, 7, 7, 7, 7, 7
708 0, 0, 18, 19, 20, 20, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
709 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
710 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
715 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
716 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
717 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13
727 mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2];
730 for(i = 0; i < num_syms; i++)
734 hist[256 + ((freq >> 8) & 0xFF)]++;
736 while((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256]))
738 for(pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8)
740 const mz_uint32 *pHist = &hist[pass << 8];
741 mz_uint offsets[256], cur_ofs = 0;
742 for(i = 0; i < 256; i++)
744 offsets[i] = cur_ofs;
747 for(i = 0; i < num_syms; i++)
748 pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i];
751 pCur_syms = pNew_syms;
761 int root, leaf, next, avbl, used, dpth;
772 for(next = 1; next < n - 1; next++)
774 if(leaf >= n || A[root].m_key < A[leaf].m_key)
781 if(leaf >= n || (root < next && A[root].m_key < A[leaf].m_key))
790 for(next = n - 3; next >= 0; next--)
791 A[next].m_key = A[A[next].m_key].m_key + 1;
798 while(root >= 0 && (
int)A[root].
m_key == dpth)
823 if(code_list_len <= 1)
826 pNum_codes[max_code_size] += pNum_codes[i];
827 for(i = max_code_size; i > 0; i--)
828 total += (((
mz_uint32)pNum_codes[i]) << (max_code_size - i));
829 while(total != (1UL << max_code_size))
831 pNum_codes[max_code_size]--;
832 for(i = max_code_size - 1; i > 0; i--)
836 pNum_codes[i + 1] += 2;
850 for(i = 0; i < table_len; i++)
856 int num_used_syms = 0;
858 for(i = 0; i < table_len; i++)
868 for(i = 0; i < num_used_syms; i++)
869 num_codes[pSyms[i].m_key]++;
875 for(i = 1, j = num_used_syms; i <= code_size_limit; i++)
876 for(l = num_codes[i]; l > 0; l--)
881 for(j = 0, i = 2; i <= code_size_limit; i++)
882 next_code[i] = j = ((j + num_codes[i - 1]) << 1);
884 for(i = 0; i < table_len; i++)
886 mz_uint rev_code = 0, code, code_size;
889 code = next_code[code_size]++;
890 for(l = code_size; l > 0; l--, code >>= 1)
891 rev_code = (rev_code << 1) | (code & 1);
896 #define TDEFL_PUT_BITS(b, l) \
901 MZ_ASSERT(bits <= ((1U << len) - 1U)); \
902 d->m_bit_buffer |= (bits << d->m_bits_in); \
903 d->m_bits_in += len; \
904 while(d->m_bits_in >= 8) \
906 if(d->m_pOutput_buf < d->m_pOutput_buf_end) \
907 *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \
908 d->m_bit_buffer >>= 8; \
914 #define TDEFL_RLE_PREV_CODE_SIZE() \
916 if(rle_repeat_count) \
918 if(rle_repeat_count < 3) \
920 d->m_huff_count[2][prev_code_size] = (mz_uint16)(d->m_huff_count[2][prev_code_size] + rle_repeat_count); \
921 while(rle_repeat_count--) \
922 packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \
926 d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); \
927 packed_code_sizes[num_packed_code_sizes++] = 16; \
928 packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_repeat_count - 3); \
930 rle_repeat_count = 0; \
934 #define TDEFL_RLE_ZERO_CODE_SIZE() \
938 if(rle_z_count < 3) \
940 d->m_huff_count[2][0] = (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); \
941 while(rle_z_count--) \
942 packed_code_sizes[num_packed_code_sizes++] = 0; \
944 else if(rle_z_count <= 10) \
946 d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); \
947 packed_code_sizes[num_packed_code_sizes++] = 17; \
948 packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 3); \
952 d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); \
953 packed_code_sizes[num_packed_code_sizes++] = 18; \
954 packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 11); \
960 static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
964 int num_lit_codes, num_dist_codes, num_bit_lengths;
965 mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count, rle_repeat_count, packed_code_sizes_index;
973 for(num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--)
976 for(num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--)
982 total_code_sizes_to_pack = num_lit_codes + num_dist_codes;
983 num_packed_code_sizes = 0;
985 rle_repeat_count = 0;
988 for(i = 0; i < total_code_sizes_to_pack; i++)
990 mz_uint8 code_size = code_sizes_to_pack[i];
994 if(++rle_z_count == 138)
1002 if(code_size != prev_code_size)
1006 packed_code_sizes[num_packed_code_sizes++] = code_size;
1008 else if(++rle_repeat_count == 6)
1013 prev_code_size = code_size;
1015 if(rle_repeat_count)
1031 for(num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--)
1034 num_bit_lengths =
MZ_MAX(4, (num_bit_lengths + 1));
1036 for(i = 0; (int)i < num_bit_lengths; i++)
1039 for(packed_code_sizes_index = 0; packed_code_sizes_index < num_packed_code_sizes;)
1041 mz_uint code = packed_code_sizes[packed_code_sizes_index++];
1045 TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++],
"\02\03\07"[code - 16]);
1054 for(i = 0; i <= 143; ++i)
1056 for(; i <= 255; ++i)
1058 for(; i <= 279; ++i)
1060 for(; i <= 287; ++i)
1071 static const mz_uint mz_bitmasks[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF };
1073 #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES &&MINIZ_LITTLE_ENDIAN &&MINIZ_HAS_64BIT_REGISTERS
1083 #define TDEFL_PUT_BITS_FAST(b, l) \
1085 bit_buffer |= (((mz_uint64)(b)) << bits_in); \
1090 for(pLZ_codes = d->
m_lz_code_buf; pLZ_codes < pLZ_code_buf_end; flags >>= 1)
1093 flags = *pLZ_codes++ | 0x100;
1097 mz_uint s0,
s1, n0, n1, sym, num_extra_bits;
1098 mz_uint match_len = pLZ_codes[0], match_dist = *(
const mz_uint16 *)(pLZ_codes + 1);
1110 sym = (match_dist < 512) ? s0 :
s1;
1111 num_extra_bits = (match_dist < 512) ? n0 : n1;
1115 TDEFL_PUT_BITS_FAST(match_dist &
mz_bitmasks[num_extra_bits], num_extra_bits);
1123 if(((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end))
1130 if(((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end))
1144 pOutput_buf += (bits_in >> 3);
1145 bit_buffer >>= (bits_in & ~7);
1149 #undef TDEFL_PUT_BITS_FAST
1174 for(pLZ_codes = d->
m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf; flags >>= 1)
1177 flags = *pLZ_codes++ | 0x100;
1181 mz_uint match_len = pLZ_codes[0], match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8));
1188 if(match_dist < 512)
1227 mz_uint saved_bit_buf, saved_bits_in;
1280 else if(!comp_block_succeeded)
1298 for(i = 0; i < 4; i++)
1313 for(i = 2; i; --i, z ^= 0xFFFF)
1345 if((n -= bytes_to_copy) != 0)
1360 #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES
1361 #define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p)
1367 mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->
m_dict[
pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD(s);
1369 if(max_match_len <= match_len)
1375 if(--num_probes_left == 0)
1377 #define TDEFL_PROBE \
1378 next_probe_pos = d->m_next[probe_pos]; \
1379 if((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \
1381 probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \
1382 if(TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) \
1391 if(TDEFL_READ_UNALIGNED_WORD(q) != s01)
1397 }
while((TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) &&
1398 (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0));
1401 *pMatch_dist = dist;
1407 *pMatch_dist = dist;
1408 if((*pMatch_len = match_len =
MZ_MIN(max_match_len, probe_len)) == max_match_len)
1410 c01 = TDEFL_READ_UNALIGNED_WORD(&d->
m_dict[
pos + match_len - 1]);
1422 if(max_match_len <= match_len)
1428 if(--num_probes_left == 0)
1430 #define TDEFL_PROBE \
1431 next_probe_pos = d->m_next[probe_pos]; \
1432 if((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \
1434 probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \
1435 if((d->m_dict[probe_pos + match_len] == c0) && (d->m_dict[probe_pos + match_len - 1] == c1)) \
1444 q = d->
m_dict + probe_pos;
1445 for(probe_len = 0; probe_len < max_match_len; probe_len++)
1448 if(probe_len > match_len)
1450 *pMatch_dist = dist;
1451 if((*pMatch_len = match_len = probe_len) == max_match_len)
1460 #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES &&MINIZ_LITTLE_ENDIAN
1470 const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096;
1474 lookahead_size += num_bytes_to_process;
1476 while(num_bytes_to_process)
1484 num_bytes_to_process -= n;
1488 if((!d->
m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE))
1491 while(lookahead_size >= 4)
1493 mz_uint cur_match_dist, cur_match_len = 1;
1507 }
while((TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) &&
1508 (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0));
1516 *pLZ_code_buf++ = (
mz_uint8)first_trigram;
1517 *pLZ_flags = (
mz_uint8)(*pLZ_flags >> 1);
1523 cur_match_len =
MZ_MIN(cur_match_len, lookahead_size);
1532 *pLZ_flags = (
mz_uint8)((*pLZ_flags >> 1) | 0x80);
1543 *pLZ_code_buf++ = (
mz_uint8)first_trigram;
1544 *pLZ_flags = (
mz_uint8)(*pLZ_flags >> 1);
1548 if(--num_flags_left == 0)
1551 pLZ_flags = pLZ_code_buf++;
1554 total_lz_bytes += cur_match_len;
1555 lookahead_pos += cur_match_len;
1558 MZ_ASSERT(lookahead_size >= cur_match_len);
1559 lookahead_size -= cur_match_len;
1580 while(lookahead_size)
1585 *pLZ_code_buf++ = lit;
1586 *pLZ_flags = (
mz_uint8)(*pLZ_flags >> 1);
1587 if(--num_flags_left == 0)
1590 pLZ_flags = pLZ_code_buf++;
1682 mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos;
1689 const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process;
1690 src_buf_left -= num_bytes_to_process;
1692 while(pSrc != pSrc_end)
1739 while(cur_match_len < d->m_lookahead_size)
1741 if(d->
m_dict[cur_pos + cur_match_len] != c)
1757 cur_match_dist = cur_match_len = 0;
1764 if(cur_match_len >= 128)
1768 len_to_move = cur_match_len;
1784 else if(!cur_match_dist)
1789 len_to_move = cur_match_len;
1861 (d->
m_wants_to_finish && (flush !=
TDEFL_FINISH)) || (pIn_buf_size && *pIn_buf_size && !pIn_buf) || (pOut_buf_size && *pOut_buf_size && !pOut_buf))
1874 #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES &&MINIZ_LITTLE_ENDIAN
1879 if(!tdefl_compress_fast(d))
1911 return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush);
1921 d->
m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3;
1961 if(((buf_len) && (!pBuf)) || (!pPut_buf_func))
1982 size_t new_size = p->
m_size + len;
1991 new_capacity =
MZ_MAX(128U, new_capacity << 1U);
1992 }
while(new_size > new_capacity);
2015 *pOut_len = out_buf.
m_size;
2032 #ifndef MINIZ_NO_ZLIB_APIS
2033 static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 };
2050 else if(strategy ==
MZ_RLE)
2058 #pragma warning(push)
2059 #pragma warning(disable : 4204)
2068 static const mz_uint s_tdefl_png_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 };
2071 int i, bpl = w * num_chans, y, z;
2089 for(y = 0; y < h; ++y)
2101 *pLen_out = out_buf.
m_size - 41;
2103 static const mz_uint8 chans[] = { 0x00, 0x00, 0x04, 0x02, 0x06 };
2104 mz_uint8 pnghdr[41] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
2105 0, 0, (
mz_uint8)(w >> 8), (
mz_uint8)w, 0, 0, (
mz_uint8)(h >> 8), (
mz_uint8)h, 8, chans[num_chans], 0, 0, 0, 0, 0, 0, 0,
2108 for(i = 0; i < 4; ++i, c <<= 8)
2121 for(i = 0; i < 4; ++i, c <<= 8)
2148 #pragma warning(pop)
2188 #define TINFL_MEMCPY(d, s, l) memcpy(d, s, l)
2189 #define TINFL_MEMSET(p, c, l) memset(p, c, l)
2191 #define TINFL_CR_BEGIN \
2192 switch(r->m_state) \
2195 #define TINFL_CR_RETURN(state_index, result) \
2199 r->m_state = state_index; \
2205 #define TINFL_CR_RETURN_FOREVER(state_index, result) \
2210 TINFL_CR_RETURN(state_index, result); \
2214 #define TINFL_CR_FINISH }
2216 #define TINFL_GET_BYTE(state_index, c) \
2219 while(pIn_buf_cur >= pIn_buf_end) \
2221 TINFL_CR_RETURN(state_index, (decomp_flags &TINFL_FLAG_HAS_MORE_INPUT) ? TINFL_STATUS_NEEDS_MORE_INPUT : TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS); \
2223 c = *pIn_buf_cur++; \
2227 #define TINFL_NEED_BITS(state_index, n) \
2231 TINFL_GET_BYTE(state_index, c); \
2232 bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \
2234 } while(num_bits < (mz_uint)(n))
2235 #define TINFL_SKIP_BITS(state_index, n) \
2238 if(num_bits < (mz_uint)(n)) \
2240 TINFL_NEED_BITS(state_index, n); \
2246 #define TINFL_GET_BITS(state_index, b, n) \
2249 if(num_bits < (mz_uint)(n)) \
2251 TINFL_NEED_BITS(state_index, n); \
2253 b = bit_buf & ((1 << (n)) - 1); \
2263 #define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \
2266 temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \
2269 code_len = temp >> 9; \
2270 if((code_len) && (num_bits >= code_len)) \
2273 else if(num_bits > TINFL_FAST_LOOKUP_BITS) \
2275 code_len = TINFL_FAST_LOOKUP_BITS; \
2278 temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \
2279 } while((temp < 0) && (num_bits >= (code_len + 1))); \
2283 TINFL_GET_BYTE(state_index, c); \
2284 bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \
2286 } while(num_bits < 15);
2294 #define TINFL_HUFF_DECODE(state_index, sym, pHuff) \
2298 mz_uint code_len, c; \
2301 if((pIn_buf_end - pIn_buf_cur) < 2) \
2303 TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \
2307 bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); \
2312 if((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) \
2313 code_len = temp >> 9, temp &= 511; \
2316 code_len = TINFL_FAST_LOOKUP_BITS; \
2319 temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \
2320 } while(temp < 0); \
2323 bit_buf >>= code_len; \
2324 num_bits -= code_len; \
2330 static const int s_length_base[31] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 };
2331 static const int s_length_extra[31] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0 };
2332 static const int s_dist_base[32] = { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0 };
2333 static const int s_dist_extra[32] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 };
2334 static const mz_uint8 s_length_dezigzag[19] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
2335 static const int s_min_table_sizes[3] = { 257, 1, 4 };
2338 mz_uint32 num_bits, dist, counter, num_extra;
2340 const mz_uint8 *pIn_buf_cur = pIn_buf_next, *
const pIn_buf_end = pIn_buf_next + *pIn_buf_size;
2341 mz_uint8 *pOut_buf_cur = pOut_buf_next, *
const pOut_buf_end = pOut_buf_next + *pOut_buf_size;
2345 if(((out_buf_size_mask + 1) & out_buf_size_mask) || (pOut_buf_next < pOut_buf_start))
2347 *pIn_buf_size = *pOut_buf_size = 0;
2351 num_bits =
r->m_num_bits;
2352 bit_buf =
r->m_bit_buf;
2354 counter =
r->m_counter;
2355 num_extra =
r->m_num_extra;
2356 dist_from_out_buf_start =
r->m_dist_from_out_buf_start;
2359 bit_buf = num_bits = dist = counter = num_extra =
r->m_zhdr0 =
r->m_zhdr1 = 0;
2360 r->m_z_adler32 =
r->m_check_adler32 = 1;
2365 counter = (((
r->m_zhdr0 * 256 +
r->m_zhdr1) % 31 != 0) || (
r->m_zhdr1 & 32) || ((
r->m_zhdr0 & 15) != 8));
2367 counter |= (((1U << (8U + (
r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)(1U << (8U + (
r->m_zhdr0 >> 4)))));
2377 r->m_type =
r->m_final >> 1;
2381 for(counter = 0; counter < 4; ++counter)
2388 if((counter = (
r->m_raw_header[0] | (
r->m_raw_header[1] << 8))) != (
mz_uint)(0xFFFF ^ (
r->m_raw_header[2] | (
r->m_raw_header[3] << 8))))
2392 while((counter) && (num_bits))
2395 while(pOut_buf_cur >= pOut_buf_end)
2405 while(pOut_buf_cur >= pOut_buf_end)
2409 while(pIn_buf_cur >= pIn_buf_end)
2413 n =
MZ_MIN(
MZ_MIN((
size_t)(pOut_buf_end - pOut_buf_cur), (
size_t)(pIn_buf_end - pIn_buf_cur)), counter);
2420 else if(
r->m_type == 3)
2428 mz_uint8 *p =
r->m_tables[0].m_code_size;
2430 r->m_table_sizes[0] = 288;
2431 r->m_table_sizes[1] = 32;
2433 for(i = 0; i <= 143; ++i)
2435 for(; i <= 255; ++i)
2437 for(; i <= 279; ++i)
2439 for(; i <= 287; ++i)
2444 for(counter = 0; counter < 3; counter++)
2447 r->m_table_sizes[counter] += s_min_table_sizes[counter];
2450 for(counter = 0; counter <
r->m_table_sizes[2]; counter++)
2454 r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (
mz_uint8)s;
2456 r->m_table_sizes[2] = 19;
2458 for(; (int)
r->m_type >= 0;
r->m_type--)
2460 int tree_next, tree_cur;
2462 mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16];
2463 pTable = &
r->m_tables[
r->m_type];
2467 for(i = 0; i <
r->m_table_sizes[
r->m_type]; ++i)
2469 used_syms = 0, total = 0;
2470 next_code[0] = next_code[1] = 0;
2471 for(i = 1; i <= 15; ++i)
2473 used_syms += total_syms[i];
2474 next_code[i + 1] = (total = ((total + total_syms[i]) << 1));
2476 if((65536 != total) && (used_syms > 1))
2480 for(tree_next = -1, sym_index = 0; sym_index <
r->m_table_sizes[
r->m_type]; ++sym_index)
2485 cur_code = next_code[code_size]++;
2486 for(l = code_size; l > 0; l--, cur_code >>= 1)
2487 rev_code = (rev_code << 1) | (cur_code & 1);
2494 rev_code += (1 << code_size);
2501 tree_cur = tree_next;
2507 tree_cur -= ((rev_code >>= 1) & 1);
2508 if(!pTable->
m_tree[-tree_cur - 1])
2511 tree_cur = tree_next;
2515 tree_cur = pTable->
m_tree[-tree_cur - 1];
2517 tree_cur -= ((rev_code >>= 1) & 1);
2522 for(counter = 0; counter < (
r->m_table_sizes[0] +
r->m_table_sizes[1]);)
2528 r->m_len_codes[counter++] = (
mz_uint8)dist;
2531 if((dist == 16) && (!counter))
2535 num_extra =
"\02\03\07"[dist - 16];
2537 s +=
"\03\03\013"[dist - 16];
2538 TINFL_MEMSET(
r->m_len_codes + counter, (dist == 16) ?
r->m_len_codes[counter - 1] : 0, s);
2541 if((
r->m_table_sizes[0] +
r->m_table_sizes[1]) != counter)
2545 TINFL_MEMCPY(
r->m_tables[0].m_code_size,
r->m_len_codes,
r->m_table_sizes[0]);
2546 TINFL_MEMCPY(
r->m_tables[1].m_code_size,
r->m_len_codes +
r->m_table_sizes[0],
r->m_table_sizes[1]);
2554 if(((pIn_buf_end - pIn_buf_cur) < 4) || ((pOut_buf_end - pOut_buf_cur) < 2))
2559 while(pOut_buf_cur >= pOut_buf_end)
2563 *pOut_buf_cur++ = (
mz_uint8)counter;
2569 #if TINFL_USE_64BIT_BITBUF
2585 code_len = sym2 >> 9;
2591 sym2 =
r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)];
2595 bit_buf >>= code_len;
2596 num_bits -= code_len;
2600 #if !TINFL_USE_64BIT_BITBUF
2609 code_len = sym2 >> 9;
2615 sym2 =
r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)];
2618 bit_buf >>= code_len;
2619 num_bits -= code_len;
2621 pOut_buf_cur[0] = (
mz_uint8)counter;
2632 if((counter &= 511) == 256)
2635 num_extra = s_length_extra[counter - 257];
2636 counter = s_length_base[counter - 257];
2641 counter += extra_bits;
2645 num_extra = s_dist_extra[dist];
2646 dist = s_dist_base[dist];
2654 dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start;
2660 pSrc = pOut_buf_start + ((dist_from_out_buf_start - dist) & out_buf_size_mask);
2662 if((
MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end)
2666 while(pOut_buf_cur >= pOut_buf_end)
2670 *pOut_buf_cur++ = pOut_buf_start[(dist_from_out_buf_start++ - dist) & out_buf_size_mask];
2674 #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES
2675 else if((counter >= 9) && (counter <= dist))
2677 const mz_uint8 *pSrc_end = pSrc + (counter & ~7);
2683 }
while((pSrc += 8) < pSrc_end);
2684 if((counter &= 7) < 3)
2688 pOut_buf_cur[0] = pSrc[0];
2690 pOut_buf_cur[1] = pSrc[1];
2691 pOut_buf_cur += counter;
2699 pOut_buf_cur[0] = pSrc[0];
2700 pOut_buf_cur[1] = pSrc[1];
2701 pOut_buf_cur[2] = pSrc[2];
2704 }
while((
int)(counter -= 3) > 2);
2705 if((
int)counter > 0)
2707 pOut_buf_cur[0] = pSrc[0];
2708 if((
int)counter > 1)
2709 pOut_buf_cur[1] = pSrc[1];
2710 pOut_buf_cur += counter;
2714 }
while(!(
r->m_final & 1));
2719 while((pIn_buf_cur > pIn_buf_next) && (num_bits >= 8))
2729 for(counter = 0; counter < 4; ++counter)
2736 r->m_z_adler32 = (
r->m_z_adler32 << 8) | s;
2749 while((pIn_buf_cur > pIn_buf_next) && (num_bits >= 8))
2755 r->m_num_bits = num_bits;
2758 r->m_counter = counter;
2759 r->m_num_extra = num_extra;
2760 r->m_dist_from_out_buf_start = dist_from_out_buf_start;
2761 *pIn_buf_size = pIn_buf_cur - pIn_buf_next;
2762 *pOut_buf_size = pOut_buf_cur - pOut_buf_next;
2765 const mz_uint8 *ptr = pOut_buf_next;
2766 size_t buf_len = *pOut_buf_size;
2767 mz_uint32 i,
s1 =
r->m_check_adler32 & 0xffff,
s2 =
r->m_check_adler32 >> 16;
2768 size_t block_len = buf_len % 5552;
2771 for(i = 0; i + 7 < block_len; i += 8, ptr += 8)
2782 for(; i < block_len; ++i)
2784 s1 %= 65521U,
s2 %= 65521U;
2785 buf_len -= block_len;
2788 r->m_check_adler32 = (
s2 << 16) +
s1;
2799 void *pBuf = NULL, *pNew_buf;
2800 size_t src_buf_ofs = 0, out_buf_capacity = 0;
2805 size_t src_buf_size = src_buf_len - src_buf_ofs, dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity;
2814 src_buf_ofs += src_buf_size;
2815 *pOut_len += dst_buf_size;
2818 new_out_buf_capacity = out_buf_capacity * 2;
2819 if(new_out_buf_capacity < 128)
2820 new_out_buf_capacity = 128;
2821 pNew_buf =
MZ_REALLOC(pBuf, new_out_buf_capacity);
2829 out_buf_capacity = new_out_buf_capacity;
2848 size_t in_buf_ofs = 0, dict_ofs = 0;
2854 size_t in_buf_size = *pIn_buf_size - in_buf_ofs, dst_buf_size =
TINFL_LZ_DICT_SIZE - dict_ofs;
2857 in_buf_ofs += in_buf_size;
2858 if((dst_buf_size) && (!(*pPut_buf_func)(pDict + dict_ofs, (
int)dst_buf_size, pPut_buf_user)))
2868 *pIn_buf_size = in_buf_ofs;
2922 #ifdef MINIZ_NO_STDIO
2923 #define MZ_FILE void *
2925 #include <sys/stat.h>
2927 #if defined(_MSC_VER) || defined(__MINGW64__)
2928 static FILE *mz_fopen(
const char *pFilename,
const char *pMode)
2931 fopen_s(&pFile, pFilename, pMode);
2934 static FILE *mz_freopen(
const char *pPath,
const char *pMode, FILE *pStream)
2937 if(freopen_s(&pFile, pPath, pMode, pStream))
2941 #ifndef MINIZ_NO_TIME
2942 #include <sys/utime.h>
2944 #define MZ_FOPEN mz_fopen
2945 #define MZ_FCLOSE fclose
2946 #define MZ_FREAD fread
2947 #define MZ_FWRITE fwrite
2948 #define MZ_FTELL64 _ftelli64
2949 #define MZ_FSEEK64 _fseeki64
2950 #define MZ_FILE_STAT_STRUCT _stat
2951 #define MZ_FILE_STAT _stat
2952 #define MZ_FFLUSH fflush
2953 #define MZ_FREOPEN mz_freopen
2954 #define MZ_DELETE_FILE remove
2955 #elif defined(__MINGW32__)
2956 #ifndef MINIZ_NO_TIME
2957 #include <sys/utime.h>
2959 #define MZ_FOPEN(f, m) fopen(f, m)
2960 #define MZ_FCLOSE fclose
2961 #define MZ_FREAD fread
2962 #define MZ_FWRITE fwrite
2963 #define MZ_FTELL64 ftello64
2964 #define MZ_FSEEK64 fseeko64
2965 #define MZ_FILE_STAT_STRUCT _stat
2966 #define MZ_FILE_STAT _stat
2967 #define MZ_FFLUSH fflush
2968 #define MZ_FREOPEN(f, m, s) freopen(f, m, s)
2969 #define MZ_DELETE_FILE remove
2970 #elif defined(__TINYC__)
2971 #ifndef MINIZ_NO_TIME
2972 #include <sys/utime.h>
2974 #define MZ_FOPEN(f, m) fopen(f, m)
2975 #define MZ_FCLOSE fclose
2976 #define MZ_FREAD fread
2977 #define MZ_FWRITE fwrite
2978 #define MZ_FTELL64 ftell
2979 #define MZ_FSEEK64 fseek
2980 #define MZ_FILE_STAT_STRUCT stat
2981 #define MZ_FILE_STAT stat
2982 #define MZ_FFLUSH fflush
2983 #define MZ_FREOPEN(f, m, s) freopen(f, m, s)
2984 #define MZ_DELETE_FILE remove
2985 #elif defined(__GNUC__) && _LARGEFILE64_SOURCE
2986 #ifndef MINIZ_NO_TIME
2989 #define MZ_FOPEN(f, m) fopen64(f, m)
2990 #define MZ_FCLOSE fclose
2991 #define MZ_FREAD fread
2992 #define MZ_FWRITE fwrite
2993 #define MZ_FTELL64 ftello64
2994 #define MZ_FSEEK64 fseeko64
2995 #define MZ_FILE_STAT_STRUCT stat64
2996 #define MZ_FILE_STAT stat64
2997 #define MZ_FFLUSH fflush
2998 #define MZ_FREOPEN(p, m, s) freopen64(p, m, s)
2999 #define MZ_DELETE_FILE remove
3000 #elif defined(__APPLE__) && _LARGEFILE64_SOURCE
3001 #ifndef MINIZ_NO_TIME
3004 #define MZ_FOPEN(f, m) fopen(f, m)
3005 #define MZ_FCLOSE fclose
3006 #define MZ_FREAD fread
3007 #define MZ_FWRITE fwrite
3008 #define MZ_FTELL64 ftello
3009 #define MZ_FSEEK64 fseeko
3010 #define MZ_FILE_STAT_STRUCT stat
3011 #define MZ_FILE_STAT stat
3012 #define MZ_FFLUSH fflush
3013 #define MZ_FREOPEN(p, m, s) freopen(p, m, s)
3014 #define MZ_DELETE_FILE remove
3017 #pragma message("Using fopen, ftello, fseeko, stat() etc. path for file I/O - this path may not support large files.")
3018 #ifndef MINIZ_NO_TIME
3021 #define MZ_FOPEN(f, m) fopen(f, m)
3022 #define MZ_FCLOSE fclose
3023 #define MZ_FREAD fread
3024 #define MZ_FWRITE fwrite
3025 #define MZ_FTELL64 ftello
3026 #define MZ_FSEEK64 fseeko
3027 #define MZ_FILE_STAT_STRUCT stat
3028 #define MZ_FILE_STAT stat
3029 #define MZ_FFLUSH fflush
3030 #define MZ_FREOPEN(f, m, s) freopen(f, m, s)
3031 #define MZ_DELETE_FILE remove
3035 #define MZ_TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c))
3158 #define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) (array_ptr)->m_element_size = element_size
3160 #if defined(DEBUG) || defined(_DEBUG) || defined(NDEBUG)
3166 #define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) ((element_type *)((array_ptr)->m_p))[mz_zip_array_range_check(array_ptr, index)]
3168 #define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) ((element_type *)((array_ptr)->m_p))[index]
3186 size_t new_capacity = min_new_capacity;
3193 while(new_capacity < min_new_capacity)
3198 pArray->
m_p = pNew_p;
3220 pArray->
m_size = new_size;
3231 size_t orig_size = pArray->
m_size;
3238 #ifndef MINIZ_NO_TIME
3242 memset(&tm, 0,
sizeof(tm));
3244 tm.tm_year = ((dos_date >> 9) & 127) + 1980 - 1900;
3245 tm.tm_mon = ((dos_date >> 5) & 15) - 1;
3246 tm.tm_mday = dos_date & 31;
3247 tm.tm_hour = (dos_time >> 11) & 31;
3248 tm.tm_min = (dos_time >> 5) & 63;
3249 tm.tm_sec = (dos_time << 1) & 62;
3256 struct tm tm_struct;
3257 struct tm *tm = &tm_struct;
3258 errno_t
err = localtime_s(tm, &
time);
3269 *pDOS_time = (
mz_uint16)(((tm->tm_hour) << 11) + ((tm->tm_min) << 5) + ((tm->tm_sec) >> 1));
3270 *pDOS_date = (
mz_uint16)(((tm->tm_year + 1900 - 1980) << 9) + ((tm->tm_mon + 1) << 5) + tm->tm_mday);
3273 #ifndef MINIZ_NO_STDIO
3282 *pTime = file_stat.st_mtime;
3291 memset(&t, 0,
sizeof(t));
3292 t.actime = access_time;
3293 t.modtime = modified_time;
3295 return !utime(pFilename, &t);
3349 pE = pL +
MZ_MIN(l_len, r_len);
3357 return (pL == pE) ? (l_len < r_len) : (l <
r);
3360 #define MZ_SWAP_UINT32(a, b) \
3384 start = (size - 2U) >> 1U;
3390 if((child = (root << 1U) + 1U) >= size)
3392 child += (((child + 1U) < size) && (
mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[child], pIndices[child + 1U])));
3410 if((child = (root << 1U) + 1U) >= end)
3412 child += (((child + 1U) < end) &&
mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[child], pIndices[child + 1U]));
3441 for(i = n - 4; i >= 0; --i)
3461 cur_file_ofs =
MZ_MAX(cur_file_ofs - (
sizeof(buf_u32) - 3), 0);
3464 *pOfs = cur_file_ofs;
3470 mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk = 0, cdir_disk_index = 0;
3479 mz_uint8 *pZip64_locator = (
mz_uint8 *)zip64_end_of_central_dir_locator_u32;
3482 mz_uint8 *pZip64_end_of_central_dir = (
mz_uint8 *)zip64_end_of_central_dir_header_u32;
3484 mz_uint64 zip64_end_of_central_dir_ofs = 0;
3539 if(zip64_total_num_of_disks != 1U)
3551 cdir_entries_on_this_disk = (
mz_uint32)zip64_cdir_total_entries_on_this_disk;
3557 cdir_size = (
mz_uint32)zip64_size_of_central_directory;
3569 if(((num_this_disk | cdir_disk_index) != 0) && ((num_this_disk != 1) || (cdir_disk_index != 1)))
3588 if(sort_central_dir)
3599 for(n = cdir_size, i = 0; i < pZip->m_total_files; ++i)
3601 mz_uint total_header_size, disk_index, bit_flags, filename_size, ext_data_size;
3602 mz_uint64 comp_size, decomp_size, local_header_ofs;
3609 if(sort_central_dir)
3623 mz_uint32 extra_size_remaining = ext_data_size;
3625 if(extra_size_remaining)
3631 if(extra_size_remaining < (
sizeof(
mz_uint16) * 2))
3637 if((field_data_size +
sizeof(
mz_uint16) * 2) > extra_size_remaining)
3648 pExtra_data +=
sizeof(
mz_uint16) * 2 + field_data_size;
3649 extra_size_remaining = extra_size_remaining -
sizeof(
mz_uint16) * 2 - field_data_size;
3650 }
while(extra_size_remaining);
3662 if((disk_index ==
MZ_UINT16_MAX) || ((disk_index != num_this_disk) && (disk_index != 1)))
3678 n -= total_header_size;
3679 p += total_header_size;
3683 if(sort_central_dir)
3719 #ifndef MINIZ_NO_STDIO
3748 if((!pZip) || (!pZip->
m_pRead))
3807 #ifndef MINIZ_NO_STDIO
3836 file_size = archive_size;
3879 if((!pZip) || (!pFile))
3889 archive_size =
MZ_FTELL64(pFile) - cur_file_ofs;
3976 mz_uint filename_len, attribute_mapping_id, external_attr;
3995 (void)attribute_mapping_id;
4009 const mz_uint8 *p = pCentral_dir_header;
4011 if(pFound_zip64_extra_data)
4012 *pFound_zip64_extra_data =
MZ_FALSE;
4014 if((!p) || (!pStat))
4024 #ifndef MINIZ_NO_TIME
4058 if(extra_size_remaining)
4064 if(extra_size_remaining < (
sizeof(
mz_uint16) * 2))
4070 if((field_data_size +
sizeof(
mz_uint16) * 2) > extra_size_remaining)
4076 mz_uint32 field_data_remaining = field_data_size;
4078 if(pFound_zip64_extra_data)
4079 *pFound_zip64_extra_data =
MZ_TRUE;
4083 if(field_data_remaining <
sizeof(
mz_uint64))
4088 field_data_remaining -=
sizeof(
mz_uint64);
4093 if(field_data_remaining <
sizeof(
mz_uint64))
4098 field_data_remaining -=
sizeof(
mz_uint64);
4103 if(field_data_remaining <
sizeof(
mz_uint64))
4108 field_data_remaining -=
sizeof(
mz_uint64);
4114 pExtra_data +=
sizeof(
mz_uint16) * 2 + field_data_size;
4115 extra_size_remaining = extra_size_remaining -
sizeof(
mz_uint16) * 2 - field_data_size;
4116 }
while(extra_size_remaining);
4127 return 0 ==
memcmp(pA, pB, len);
4128 for(i = 0; i < len; ++i)
4140 pE = pL +
MZ_MIN(l_len, r_len);
4148 return (pL == pE) ? (int)(l_len - r_len) : (l -
r);
4172 uint32_t file_index = pIndices[(uint32_t)m];
4178 *pIndex = file_index;
4203 size_t name_len, comment_len;
4208 if((!pZip) || (!pZip->
m_pState) || (!pName))
4220 name_len =
strlen(pName);
4224 comment_len = pComment ?
strlen(pComment) : 0;
4228 for(file_index = 0; file_index < pZip->
m_total_files; file_index++)
4233 if(filename_len < name_len)
4238 const char *pFile_comment = pFilename + filename_len + file_extra_len;
4239 if((file_comment_len != comment_len) || (!
mz_zip_string_equal(pComment, pFile_comment, file_comment_len, flags)))
4244 int ofs = filename_len - 1;
4247 if((pFilename[ofs] ==
'/') || (pFilename[ofs] ==
'\\') || (pFilename[ofs] ==
':'))
4249 }
while(--ofs >= 0);
4252 filename_len -= ofs;
4254 if((filename_len == name_len) && (
mz_zip_string_equal(pName, pFilename, filename_len, flags)))
4257 *pIndex = file_index;
4268 mz_uint64 needed_size, cur_file_ofs, comp_remaining, out_buf_ofs = 0, read_buf_size, read_buf_ofs = 0, read_buf_avail;
4275 if((!pZip) || (!pZip->
m_pState) || ((buf_size) && (!pBuf)) || ((user_read_buf_size) && (!pUser_read_buf)) || (!pZip->
m_pRead))
4295 if(buf_size < needed_size)
4313 if(pZip->
m_pRead(pZip->
m_pIO_opaque, cur_file_ofs, pBuf, (
size_t)needed_size) != needed_size)
4316 #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
4334 read_buf_size = read_buf_avail = file_stat.
m_comp_size;
4337 else if(pUser_read_buf)
4340 if(!user_read_buf_size)
4342 pRead_buf = (
mz_uint8 *)pUser_read_buf;
4343 read_buf_size = user_read_buf_size;
4351 if(((
sizeof(
size_t) ==
sizeof(
mz_uint32))) && (read_buf_size > 0x7FFFFFFF))
4364 size_t in_buf_size, out_buf_size = (size_t)(file_stat.
m_uncomp_size - out_buf_ofs);
4367 read_buf_avail =
MZ_MIN(read_buf_size, comp_remaining);
4368 if(pZip->
m_pRead(pZip->
m_pIO_opaque, cur_file_ofs, pRead_buf, (
size_t)read_buf_avail) != read_buf_avail)
4374 cur_file_ofs += read_buf_avail;
4375 comp_remaining -= read_buf_avail;
4378 in_buf_size = (size_t)read_buf_avail;
4380 read_buf_avail -= in_buf_size;
4381 read_buf_ofs += in_buf_size;
4382 out_buf_ofs += out_buf_size;
4393 #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
4428 mz_uint64 comp_size, uncomp_size, alloc_size;
4445 if(((
sizeof(
size_t) ==
sizeof(
mz_uint32))) && (alloc_size > 0x7FFFFFFF))
4464 *pSize = (size_t)alloc_size;
4484 mz_uint64 read_buf_size, read_buf_ofs = 0, read_buf_avail, comp_remaining, out_buf_ofs = 0, cur_file_ofs;
4486 void *pRead_buf = NULL;
4487 void *pWrite_buf = NULL;
4525 read_buf_size = read_buf_avail = file_stat.
m_comp_size;
4553 #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
4564 while(comp_remaining)
4566 read_buf_avail =
MZ_MIN(read_buf_size, comp_remaining);
4567 if(pZip->
m_pRead(pZip->
m_pIO_opaque, cur_file_ofs, pRead_buf, (
size_t)read_buf_avail) != read_buf_avail)
4574 #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
4581 if(pCallback(pOpaque, out_buf_ofs, pRead_buf, (
size_t)read_buf_avail) != read_buf_avail)
4588 cur_file_ofs += read_buf_avail;
4589 out_buf_ofs += read_buf_avail;
4590 comp_remaining -= read_buf_avail;
4612 read_buf_avail =
MZ_MIN(read_buf_size, comp_remaining);
4613 if(pZip->
m_pRead(pZip->
m_pIO_opaque, cur_file_ofs, pRead_buf, (
size_t)read_buf_avail) != read_buf_avail)
4619 cur_file_ofs += read_buf_avail;
4620 comp_remaining -= read_buf_avail;
4624 in_buf_size = (size_t)read_buf_avail;
4626 read_buf_avail -= in_buf_size;
4627 read_buf_ofs += in_buf_size;
4631 if(pCallback(pOpaque, out_buf_ofs, pWrite_buf_cur, out_buf_size) != out_buf_size)
4638 #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
4660 #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS
4661 else if(file_crc32 != file_stat.
m_crc32)
4687 #ifndef MINIZ_NO_STDIO
4707 pFile =
MZ_FOPEN(pDst_filename,
"wb");
4721 #if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO)
4773 const mz_uint8 *pCentral_dir_header;
4779 mz_uint32 local_header_filename_len, local_header_extra_len, local_header_crc32;
4780 mz_uint64 local_header_comp_size, local_header_uncomp_size;
4830 has_data_descriptor = (local_header_bit_flags & 8) != 0;
4841 if(local_header_filename_len)
4846 goto handle_failure;
4853 goto handle_failure;
4862 goto handle_failure;
4865 mz_uint32 extra_size_remaining = local_header_extra_len;
4870 mz_uint32 field_id, field_data_size, field_total_size;
4872 if(extra_size_remaining < (
sizeof(
mz_uint16) * 2))
4877 field_total_size = field_data_size +
sizeof(
mz_uint16) * 2;
4879 if(field_total_size > extra_size_remaining)
4886 if(field_data_size <
sizeof(
mz_uint64) * 2)
4889 goto handle_failure;
4892 local_header_uncomp_size =
MZ_READ_LE64(pSrc_field_data);
4895 found_zip64_ext_data_in_ldir =
MZ_TRUE;
4899 pExtra_data += field_total_size;
4900 extra_size_remaining -= field_total_size;
4901 }
while(extra_size_remaining);
4906 if((has_data_descriptor) && (!local_header_comp_size) && (!local_header_crc32))
4910 mz_uint32 num_descriptor_uint32s = ((pState->m_zip64) || (found_zip64_ext_data_in_ldir)) ? 6 : 4;
4912 if(pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs +
MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_len + local_header_extra_len + file_stat.m_comp_size, descriptor_buf,
sizeof(
mz_uint32) * num_descriptor_uint32s) != (
sizeof(
mz_uint32) * num_descriptor_uint32s))
4915 goto handle_failure;
4922 mz_uint64 comp_size = 0, uncomp_size = 0;
4924 if((pState->m_zip64) || (found_zip64_ext_data_in_ldir))
4935 if((file_crc32 != file_stat.m_crc32) || (comp_size != file_stat.m_comp_size) || (uncomp_size != file_stat.m_uncomp_size))
4938 goto handle_failure;
4943 if((local_header_crc32 != file_stat.m_crc32) || (local_header_comp_size != file_stat.m_comp_size) || (local_header_uncomp_size != file_stat.m_uncomp_size))
4946 goto handle_failure;
4958 if(uncomp_crc32 != file_stat.m_crc32)
5014 if(found_index != i)
5031 if((!pMem) || (!size))
5066 #ifndef MINIZ_NO_STDIO
5111 #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
5131 #define MZ_WRITE_LE16(p, v) mz_write_le16((mz_uint8 *)(p), (mz_uint16)(v))
5132 #define MZ_WRITE_LE32(p, v) mz_write_le32((mz_uint8 *)(p), (mz_uint32)(v))
5133 #define MZ_WRITE_LE64(p, v) mz_write_le64((mz_uint8 *)(p), (mz_uint64)(v))
5145 if((
sizeof(
size_t) ==
sizeof(
mz_uint32)) && (new_size > 0x7FFFFFFF))
5156 while(new_capacity < new_size)
5165 pState->
m_pMem = pNew_block;
5191 #ifndef MINIZ_NO_STDIO
5287 if(0 != (initial_allocation_size =
MZ_MAX(initial_allocation_size, size_to_reserve_at_beginning)))
5305 #ifndef MINIZ_NO_STDIO
5350 if(size_to_reserve_at_beginning)
5359 size_t n = (size_t)
MZ_MIN(
sizeof(buf), size_to_reserve_at_beginning);
5366 size_to_reserve_at_beginning -= n;
5367 }
while(size_to_reserve_at_beginning);
5426 #ifdef MINIZ_NO_STDIO
5507 #define MZ_ZIP64_MAX_LOCAL_EXTRA_FIELD_SIZE (sizeof(mz_uint16) * 2 + sizeof(mz_uint64) * 2)
5508 #define MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE (sizeof(mz_uint16) * 2 + sizeof(mz_uint64) * 3)
5533 if(pLocal_header_ofs)
5545 static mz_bool mz_zip_writer_create_local_dir_header(
mz_zip_archive *pZip,
mz_uint8 *pDst,
mz_uint16 filename_size,
mz_uint16 extra_size,
mz_uint64 uncomp_size,
mz_uint64 comp_size,
mz_uint32 uncomp_crc32,
mz_uint16 method,
mz_uint16 bit_flags,
mz_uint16 dos_time,
mz_uint16 dos_date)
5589 const void *pExtra,
mz_uint16 extra_size,
const void *pComment,
mz_uint16 comment_size,
5593 const char *user_extra_data,
mz_uint user_extra_data_len)
5602 if(local_header_ofs > 0xFFFFFFFF)
5610 if(!
mz_zip_writer_create_central_dir_header(pZip, central_dir_header, filename_size, extra_size + user_extra_data_len, comment_size, uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time, dos_date, local_header_ofs, ext_attributes))
5631 if(*pArchive_name ==
'/')
5634 while(*pArchive_name)
5636 if((*pArchive_name ==
'\\') || (*pArchive_name ==
':'))
5673 return mz_zip_writer_add_mem_ex_v2(pZip, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, uncomp_size, uncomp_crc32, NULL, NULL, 0, NULL, 0);
5678 const char *user_extra_data,
mz_uint user_extra_data_len,
const char *user_extra_data_central,
mz_uint user_extra_data_central_len)
5680 mz_uint16 method = 0, dos_time = 0, dos_date = 0;
5681 mz_uint level, ext_attributes = 0, num_alignment_padding_bytes;
5683 size_t archive_name_size;
5686 mz_bool store_data_uncompressed;
5699 if((
int)level_and_flags < 0)
5701 level = level_and_flags & 0xF;
5721 if((buf_size > 0xFFFFFFFF) || (uncomp_size > 0xFFFFFFFF))
5734 if(last_modified != NULL)
5740 #ifndef MINIZ_NO_TIME
5749 archive_name_size =
strlen(pArchive_name);
5769 if((archive_name_size) && (pArchive_name[archive_name_size - 1] ==
'/'))
5775 if((buf_size) || (uncomp_size))
5783 if((!store_data_uncompressed) && (buf_size))
5795 local_dir_header_ofs += num_alignment_padding_bytes;
5800 cur_archive_file_ofs += num_alignment_padding_bytes;
5813 pExtra_data = extra_data;
5818 if(!
mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (
mz_uint16)archive_name_size, extra_size + user_extra_data_len, 0, 0, 0, method, bit_flags, dos_time, dos_date))
5821 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, local_dir_header_ofs, local_dir_header,
sizeof(local_dir_header)) !=
sizeof(local_dir_header))
5824 cur_archive_file_ofs +=
sizeof(local_dir_header);
5826 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size)
5831 cur_archive_file_ofs += archive_name_size;
5833 if(pExtra_data != NULL)
5835 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, extra_data, extra_size) != extra_size)
5838 cur_archive_file_ofs += extra_size;
5845 if(!
mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (
mz_uint16)archive_name_size, user_extra_data_len, 0, 0, 0, method, bit_flags, dos_time, dos_date))
5848 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, local_dir_header_ofs, local_dir_header,
sizeof(local_dir_header)) !=
sizeof(local_dir_header))
5851 cur_archive_file_ofs +=
sizeof(local_dir_header);
5853 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size)
5858 cur_archive_file_ofs += archive_name_size;
5861 if(user_extra_data_len > 0)
5863 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, user_extra_data, user_extra_data_len) != user_extra_data_len)
5866 cur_archive_file_ofs += user_extra_data_len;
5872 uncomp_size = buf_size;
5873 if(uncomp_size <= 3)
5876 store_data_uncompressed =
MZ_TRUE;
5880 if(store_data_uncompressed)
5888 cur_archive_file_ofs += buf_size;
5889 comp_size = buf_size;
5922 if(pExtra_data == NULL)
5937 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, local_dir_footer, local_dir_footer_size) != local_dir_footer_size)
5940 cur_archive_file_ofs += local_dir_footer_size;
5943 if(pExtra_data != NULL)
5950 comment_size, uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time, dos_date, local_dir_header_ofs, ext_attributes,
5951 user_extra_data_central, user_extra_data_central_len))
5960 #ifndef MINIZ_NO_STDIO
5962 const char *user_extra_data,
mz_uint user_extra_data_len,
const char *user_extra_data_central,
mz_uint user_extra_data_central_len)
5966 mz_uint16 method = 0, dos_time = 0, dos_date = 0, ext_attributes = 0;
5967 mz_uint64 local_dir_header_ofs, cur_archive_file_ofs = pZip->
m_archive_size, uncomp_size = size_to_add, comp_size = 0;
5968 size_t archive_name_size;
5978 if((
int)level_and_flags < 0)
5980 level = level_and_flags & 0xF;
6016 archive_name_size =
strlen(pArchive_name);
6036 #ifndef MINIZ_NO_TIME
6043 if(uncomp_size <= 3)
6051 cur_archive_file_ofs += num_alignment_padding_bytes;
6052 local_dir_header_ofs = cur_archive_file_ofs;
6059 if(uncomp_size && level)
6069 pExtra_data = extra_data;
6074 if(!
mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (
mz_uint16)archive_name_size, extra_size + user_extra_data_len, 0, 0, 0, method, gen_flags, dos_time, dos_date))
6077 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, local_dir_header,
sizeof(local_dir_header)) !=
sizeof(local_dir_header))
6080 cur_archive_file_ofs +=
sizeof(local_dir_header);
6082 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size)
6087 cur_archive_file_ofs += archive_name_size;
6089 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, extra_data, extra_size) != extra_size)
6092 cur_archive_file_ofs += extra_size;
6098 if(!
mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (
mz_uint16)archive_name_size, user_extra_data_len, 0, 0, 0, method, gen_flags, dos_time, dos_date))
6101 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, local_dir_header,
sizeof(local_dir_header)) !=
sizeof(local_dir_header))
6104 cur_archive_file_ofs +=
sizeof(local_dir_header);
6106 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size)
6111 cur_archive_file_ofs += archive_name_size;
6114 if(user_extra_data_len > 0)
6116 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, user_extra_data, user_extra_data_len) != user_extra_data_len)
6119 cur_archive_file_ofs += user_extra_data_len;
6124 mz_uint64 uncomp_remaining = uncomp_size;
6133 while(uncomp_remaining)
6142 uncomp_remaining -= n;
6143 cur_archive_file_ofs += n;
6145 comp_size = uncomp_size;
6174 if(
MZ_FREAD(pRead_buf, 1, in_buf_size, pSrc_file) != in_buf_size)
6181 uncomp_remaining -= in_buf_size;
6216 if(pExtra_data == NULL)
6231 if(pZip->
m_pWrite(pZip->
m_pIO_opaque, cur_archive_file_ofs, local_dir_footer, local_dir_footer_size) != local_dir_footer_size)
6234 cur_archive_file_ofs += local_dir_footer_size;
6236 if(pExtra_data != NULL)
6243 uncomp_size, comp_size, uncomp_crc32, method, gen_flags, dos_time, dos_date, local_dir_header_ofs, ext_attributes,
6244 user_extra_data_central, user_extra_data_central_len))
6260 memset(&file_modified_time, 0,
sizeof(file_modified_time));
6262 #if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO)
6263 pFile_time = &file_modified_time;
6268 pSrc_file =
MZ_FOPEN(pSrc_filename,
"rb");
6276 mz_bool status =
mz_zip_writer_add_cfile(pZip, pArchive_name, pSrc_file, uncomp_size, pFile_time, pComment, comment_size, level_and_flags, NULL, 0, NULL, 0);
6292 if((pUncomp_size) || (pComp_size) || (pLocal_header_ofs) || (pDisk_start))
6312 if(pLocal_header_ofs)
6330 if((pExt) && (ext_len))
6332 mz_uint32 extra_size_remaining = ext_len;
6333 const mz_uint8 *pExtra_data = pExt;
6337 mz_uint32 field_id, field_data_size, field_total_size;
6339 if(extra_size_remaining < (
sizeof(
mz_uint16) * 2))
6344 field_total_size = field_data_size +
sizeof(
mz_uint16) * 2;
6346 if(field_total_size > extra_size_remaining)
6355 pExtra_data += field_total_size;
6356 extra_size_remaining -= field_total_size;
6357 }
while(extra_size_remaining);
6366 mz_uint n, bit_flags, num_alignment_padding_bytes, src_central_dir_following_data_size;
6367 mz_uint64 src_archive_bytes_remaining, local_dir_header_ofs;
6368 mz_uint64 cur_src_file_ofs, cur_dst_file_ofs;
6372 size_t orig_central_dir_size;
6375 const mz_uint8 *pSrc_central_header;
6377 mz_uint32 src_filename_len, src_comment_len, src_ext_len;
6378 mz_uint32 local_header_filename_size, local_header_extra_len;
6379 mz_uint64 local_header_comp_size, local_header_uncomp_size;
6393 if(NULL == (pSrc_central_header =
mz_zip_get_cdh(pSource_zip, src_file_index)))
6402 src_central_dir_following_data_size = src_filename_len + src_ext_len + src_comment_len;
6442 src_archive_bytes_remaining = local_header_filename_size + local_header_extra_len + src_file_stat.
m_comp_size;
6460 mz_uint32 extra_size_remaining = local_header_extra_len;
6465 mz_uint32 field_id, field_data_size, field_total_size;
6467 if(extra_size_remaining < (
sizeof(
mz_uint16) * 2))
6475 field_total_size = field_data_size +
sizeof(
mz_uint16) * 2;
6477 if(field_total_size > extra_size_remaining)
6487 if(field_data_size <
sizeof(
mz_uint64) * 2)
6493 local_header_uncomp_size =
MZ_READ_LE64(pSrc_field_data);
6496 found_zip64_ext_data_in_ldir =
MZ_TRUE;
6500 pExtra_data += field_total_size;
6501 extra_size_remaining -= field_total_size;
6502 }
while(extra_size_remaining);
6507 if(!pState->m_zip64)
6522 cur_dst_file_ofs += num_alignment_padding_bytes;
6524 local_dir_header_ofs = cur_dst_file_ofs;
6525 if(pZip->m_file_offset_alignment)
6527 MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == 0);
6540 while(src_archive_bytes_remaining)
6543 if(pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, n) != n)
6545 pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
6548 cur_src_file_ofs += n;
6550 if(pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n)
6552 pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
6555 cur_dst_file_ofs += n;
6557 src_archive_bytes_remaining -= n;
6565 if((pSource_zip->m_pState->m_zip64) || (found_zip64_ext_data_in_ldir))
6574 if(pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, (
sizeof(
mz_uint32) * 6)) != (
sizeof(
mz_uint32) * 6))
6576 pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
6587 if(pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf,
sizeof(
mz_uint32) * 4) !=
sizeof(
mz_uint32) * 4)
6589 pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
6595 if(pZip->m_pState->m_zip64)
6599 const mz_uint32 src_crc32 = pSrc_descriptor[0];
6600 const mz_uint64 src_comp_size = pSrc_descriptor[1];
6601 const mz_uint64 src_uncomp_size = pSrc_descriptor[2];
6617 if(pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n)
6619 pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
6623 cur_src_file_ofs += n;
6624 cur_dst_file_ofs += n;
6626 pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
6629 orig_central_dir_size = pState->m_central_dir.m_size;
6718 pZip->m_total_files++;
6719 pZip->m_archive_size = cur_dst_file_ofs;
6727 mz_uint64 central_dir_ofs, central_dir_size;
6746 central_dir_ofs = 0;
6747 central_dir_size = 0;
6801 #ifndef MINIZ_NO_STDIO
6814 if((!ppBuf) || (!pSize))
6842 #ifndef MINIZ_NO_STDIO
6856 if((
int)level_and_flags < 0)
6859 if((!pZip_filename) || (!pArchive_name) || ((buf_size) && (!pBuf)) || ((comment_size) && (!pComment)) || ((level_and_flags & 0xF) >
MZ_UBER_COMPRESSION))
6885 created_new_archive =
MZ_TRUE;
6908 status =
mz_zip_writer_add_mem_ex(&zip_archive, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, 0, 0);
6928 if((!status) && (created_new_archive))
6932 (void)ignoredStatus;
6950 if((!pZip_filename) || (!pArchive_name))
7047 return "undefined error";
7049 return "too many files";
7051 return "file too large";
7053 return "unsupported method";
7055 return "unsupported encryption";
7057 return "unsupported feature";
7059 return "failed finding central directory";
7061 return "not a ZIP archive";
7063 return "invalid header or archive is corrupted";
7065 return "unsupported multidisk archive";
7067 return "decompression failed or archive is corrupted";
7069 return "compression failed";
7071 return "unexpected decompressed size";
7073 return "CRC-32 check failed";
7075 return "unsupported central directory size";
7077 return "allocation failed";
7079 return "file open failed";
7081 return "file create failed";
7083 return "file write failed";
7085 return "file read failed";
7087 return "file close failed";
7089 return "file seek failed";
7091 return "file stat failed";
7093 return "invalid parameter";
7095 return "invalid filename";
7097 return "buffer too small";
7099 return "internal error";
7101 return "file not found";
7103 return "archive is too large";
7105 return "validation failed";
7107 return "write calledback failed";
7113 return "unknown error";
7173 if(filename_buf_size)
7174 pFilename[0] =
'\0';
7179 if(filename_buf_size)
7181 n =
MZ_MIN(n, filename_buf_size - 1);
7183 pFilename[n] =
'\0';
static bool has_id(const jsont &json)
Return true iff the argument has a "@id" key.
void err(int eval, const char *fmt,...)
static tdefl_sym_freq * tdefl_radix_sort_syms(mz_uint num_syms, tdefl_sym_freq *pSyms0, tdefl_sym_freq *pSyms1)
#define MZ_WRITE_LE32(p, v)
void * tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out)
mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len)
static mz_bool mz_zip_writer_add_to_central_dir(mz_zip_archive *pZip, const char *pFilename, mz_uint16 filename_size, const void *pExtra, mz_uint16 extra_size, const void *pComment, mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs, mz_uint32 ext_attributes, const char *user_extra_data, mz_uint user_extra_data_len)
mz_bool mz_zip_is_zip64(mz_zip_archive *pZip)
static const mz_uint8 s_tdefl_len_extra[256]
mz_bool mz_zip_reader_end(mz_zip_archive *pZip)
mz_bool mz_zip_validate_archive(mz_zip_archive *pZip, mz_uint flags)
mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip)
mz_zip_type mz_zip_get_type(mz_zip_archive *pZip)
static size_t mz_zip_file_read_func(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n)
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)
static const mz_uint16 s_tdefl_len_sym[256]
mz_bool mz_zip_end(mz_zip_archive *pZip)
static int tdefl_flush_block(tdefl_compressor *d, int flush)
mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip)
mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning)
#define MZ_WRITE_LE16(p, v)
static void mz_zip_array_init(mz_zip_array *pArray, mz_uint32 element_size)
static void mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip)
static void tdefl_start_dynamic_block(tdefl_compressor *d)
mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags)
int mz_deflateReset(mz_streamp pStream)
static void mz_write_le64(mz_uint8 *p, mz_uint64 v)
#define TINFL_GET_BYTE(state_index, c)
#define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size)
static mz_bool mz_zip_writer_end_internal(mz_zip_archive *pZip, mz_bool set_last_error)
size_t mz_zip_get_central_dir_size(mz_zip_archive *pZip)
static int mz_zip_filename_compare(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, const char *pR, mz_uint r_len)
static mz_bool mz_zip_file_stat_internal(mz_zip_archive *pZip, mz_uint file_index, const mz_uint8 *pCentral_dir_header, mz_zip_archive_file_stat *pStat, mz_bool *pFound_zip64_extra_data)
void * tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags)
int mz_inflateInit(mz_streamp pStream)
int mz_inflate(mz_streamp pStream, int flush)
int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len)
mz_uint32 tdefl_get_adler32(tdefl_compressor *d)
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)
static mz_bool mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, mz_uint r_index)
#define TDEFL_RLE_ZERO_CODE_SIZE()
mz_ulong mz_compressBound(mz_ulong source_len)
static void mz_write_le32(mz_uint8 *p, mz_uint32 v)
static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip, mz_uint32 record_sig, mz_uint32 record_size, mz_int64 *pOfs)
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)
int mz_deflateEnd(mz_streamp pStream)
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)
mz_zip_mode mz_zip_get_mode(mz_zip_archive *pZip)
#define MZ_FREOPEN(f, m, s)
static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n)
static const mz_uint8 s_tdefl_small_dist_sym[512]
tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags)
static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d)
const char * mz_version(void)
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_writer_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning, mz_uint flags)
static size_t mz_zip_file_write_func(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n)
mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index)
static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, void *pUser)
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)
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)
unsigned char mz_validate_uint32[sizeof(mz_uint32)==4 ? 1 :-1]
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, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32)
#define TINFL_MEMCPY(d, s, l)
static mz_bool mz_zip_string_equal(const char *pA, const char *pB, mz_uint len, mz_uint flags)
#define TINFL_GET_BITS(state_index, b, n)
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_bool mz_zip_reader_extract_to_cfile(mz_zip_archive *pZip, mz_uint file_index, FILE *pFile, mz_uint flags)
static const mz_uint8 s_tdefl_small_dist_extra[512]
tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d)
mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size)
static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, mz_uint flags)
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, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32, time_t *last_modified, const char *user_extra_data, mz_uint user_extra_data_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len)
static mz_bool mz_zip_reader_end_internal(mz_zip_archive *pZip, mz_bool set_last_error)
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)
#define TINFL_HUFF_DECODE(state_index, sym, pHuff)
void * miniz_def_alloc_func(void *opaque, size_t items, size_t size)
static time_t mz_zip_dos_to_time_t(int dos_time, int dos_date)
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)
tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush)
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)
static const mz_uint8 s_tdefl_large_dist_extra[128]
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)
static void mz_zip_time_t_to_dos_time(time_t time, mz_uint16 *pDOS_time, mz_uint16 *pDOS_date)
tinfl_decompressor * tinfl_decompressor_alloc()
static const mz_uint s_tdefl_num_probes[11]
int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy)
mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint flags)
static mz_bool tdefl_compress_normal(tdefl_compressor *d)
mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, FILE *pFile, mz_uint flags)
int mz_deflateInit(mz_streamp pStream, int level)
static size_t mz_zip_file_write_callback(void *pOpaque, mz_uint64 ofs, const void *pBuf, size_t n)
static void tdefl_record_match(tdefl_compressor *d, mz_uint match_len, mz_uint match_dist)
const char * mz_zip_get_error_string(mz_zip_error mz_err)
static mz_bool mz_zip_array_reserve(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_capacity, mz_uint growing)
mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, FILE *pFile, mz_uint64 archive_size, mz_uint flags)
void * mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags)
void miniz_def_free_func(void *opaque, void *address)
static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, int code_list_len, int max_code_size)
static mz_bool mz_zip_array_push_back(mz_zip_archive *pZip, mz_zip_array *pArray, const void *pElements, size_t n)
static void tdefl_start_static_block(tdefl_compressor *d)
int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level)
static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, mz_uint flags)
mz_bool mz_zip_writer_end(mz_zip_archive *pZip)
static mz_bool mz_zip_writer_create_central_dir_header(mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, mz_uint16 extra_size, mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs, mz_uint32 ext_attributes)
#define TINFL_MEMSET(p, c, l)
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)
static size_t mz_zip_heap_write_func(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n)
int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags)
tdefl_compressor * tdefl_compressor_alloc()
mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index)
mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size)
mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len)
void mz_zip_zero_struct(mz_zip_archive *pZip)
static mz_uint32 mz_zip_writer_create_zip64_extra_data(mz_uint8 *pBuf, mz_uint64 *pUncomp_size, mz_uint64 *pComp_size, mz_uint64 *pLocal_header_ofs)
static void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len)
mz_bool mz_zip_reader_extract_file_to_cfile(mz_zip_archive *pZip, const char *pArchive_filename, FILE *pFile, mz_uint flags)
mz_uint64 mz_zip_get_archive_size(mz_zip_archive *pZip)
static mz_uint mz_zip_writer_compute_padding_needed_for_file_alignment(mz_zip_archive *pZip)
static void mz_write_le16(mz_uint8 *p, mz_uint16 v)
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)
int mz_inflateInit2(mz_streamp pStream, int window_bits)
static mz_bool mz_zip_writer_add_put_buf_callback(const void *pBuf, int len, void *pUser)
static mz_bool mz_zip_writer_validate_archive_name(const char *pArchive_name)
static size_t mz_zip_mem_read_func(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n)
mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint src_file_index)
mz_bool mz_zip_reader_is_file_supported(mz_zip_archive *pZip, mz_uint file_index)
static void tdefl_record_literal(tdefl_compressor *d, mz_uint8 lit)
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)
#define TINFL_CR_RETURN(state_index, result)
#define TINFL_CR_RETURN_FOREVER(state_index, result)
static const mz_uint8 * mz_zip_get_cdh(mz_zip_archive *pZip, mz_uint file_index)
mz_zip_error mz_zip_set_last_error(mz_zip_archive *pZip, mz_zip_error err_num)
int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len)
#define MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE
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_writer_init_from_reader_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags)
static mz_bool mz_zip_locate_file_binary_search(mz_zip_archive *pZip, const char *pFilename, mz_uint32 *pIndex)
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)
void tdefl_compressor_free(tdefl_compressor *pComp)
mz_uint64 mz_zip_get_archive_file_start_offset(mz_zip_archive *pZip)
@ MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS
@ MZ_ZIP_CDH_FILENAME_LEN_OFS
@ MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR
@ MZ_ZIP_LOCAL_DIR_HEADER_SIG
@ MZ_ZIP_CDH_FILE_DATE_OFS
@ MZ_ZIP_LDH_BIT_FLAG_OFS
@ MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS
@ MZ_ZIP_CDH_VERSION_NEEDED_OFS
@ MZ_ZIP_DATA_DESCRIPTER_SIZE64
@ MZ_ZIP_CDH_LOCAL_HEADER_OFS
@ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG
@ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8
@ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS
@ MZ_ZIP_CDH_COMPRESSED_SIZE_OFS
@ MZ_ZIP_DATA_DESCRIPTER_SIZE32
@ MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS
@ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG
@ MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS
@ MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS
@ MZ_ZIP_ECDH_CDIR_SIZE_OFS
@ MZ_ZIP_LDH_FILENAME_LEN_OFS
@ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE
@ MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG
@ MZ_ZIP_LDH_FILE_TIME_OFS
@ MZ_ZIP64_ECDH_VERSION_NEEDED_OFS
@ MZ_ZIP_CDH_EXTRA_LEN_OFS
@ MZ_ZIP_LDH_FILE_DATE_OFS
@ MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS
@ MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS
@ MZ_ZIP_LDH_COMPRESSED_SIZE_OFS
@ MZ_ZIP_CDH_FILE_TIME_OFS
@ MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID
@ MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS
@ MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID
@ MZ_ZIP_CENTRAL_DIR_HEADER_SIG
@ MZ_ZIP_ECDH_COMMENT_SIZE_OFS
@ MZ_ZIP64_ECDH_CDIR_SIZE_OFS
@ MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS
@ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION
@ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG
@ MZ_ZIP_CDH_DISK_START_OFS
@ MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS
@ MZ_ZIP_CDH_INTERNAL_ATTR_OFS
@ MZ_ZIP_LDH_VERSION_NEEDED_OFS
@ MZ_ZIP_ECDH_CDIR_OFS_OFS
@ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG
@ MZ_ZIP_LDH_EXTRA_LEN_OFS
@ MZ_ZIP_CDH_EXTERNAL_ATTR_OFS
@ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED
@ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS
@ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE
@ MZ_ZIP_LOCAL_DIR_HEADER_SIZE
@ MZ_ZIP64_ECDH_CDIR_OFS_OFS
@ MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS
@ MZ_ZIP_CDH_BIT_FLAG_OFS
@ MZ_ZIP_CDH_COMMENT_LEN_OFS
@ MZ_ZIP_CENTRAL_DIR_HEADER_SIZE
@ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE
@ MZ_ZIP_DATA_DESCRIPTOR_ID
@ MZ_ZIP_CDH_VERSION_MADE_BY_OFS
@ MZ_ZIP_ECDH_NUM_THIS_DISK_OFS
@ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED
@ MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS
static mz_bool mz_zip_set_error(mz_zip_archive *pZip, mz_zip_error err_num)
unsigned char mz_validate_uint64[sizeof(mz_uint64)==8 ? 1 :-1]
int mz_inflateEnd(mz_streamp pStream)
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)
static const mz_uint mz_bitmasks[17]
int mz_deflate(mz_streamp pStream, int flush)
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)
#define MZ_FILE_STAT_STRUCT
static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[]
@ TDEFL_MAX_SUPPORTED_HUFF_CODESIZE
static void mz_zip_array_clear(mz_zip_archive *pZip, mz_zip_array *pArray)
void * mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags)
static mz_bool mz_zip_array_ensure_room(mz_zip_archive *pZip, mz_zip_array *pArray, size_t n)
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)
static mz_bool mz_zip_writer_write_zeros(mz_zip_archive *pZip, mz_uint64 cur_file_ofs, mz_uint32 n)
const char * mz_error(int err)
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)
#define MZ_SWAP_UINT32(a, b)
static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, int table_len, int code_size_limit, int static_table)
static const mz_uint8 s_tdefl_large_dist_sym[128]
static mz_bool mz_zip_get_file_modified_time(const char *pFilename, time_t *pTime)
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_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len)
mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy)
static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block)
static size_t mz_zip_compute_crc32_callback(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n)
#define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index)
static mz_bool mz_zip_writer_update_zip64_extension_block(mz_zip_array *pNew_ext, mz_zip_archive *pZip, const mz_uint8 *pExt, uint32_t ext_len, mz_uint64 *pComp_size, mz_uint64 *pUncomp_size, mz_uint64 *pLocal_header_ofs, mz_uint32 *pDisk_start)
static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time, time_t modified_time)
static mz_bool mz_zip_writer_create_local_dir_header(mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, mz_uint16 extra_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date)
mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **ppBuf, size_t *pSize)
static mz_bool mz_zip_array_resize(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_size, mz_uint growing)
unsigned char mz_validate_uint16[sizeof(mz_uint16)==2 ? 1 :-1]
void * miniz_def_realloc_func(void *opaque, void *address, size_t items, size_t size)
#define MZ_WRITE_LE64(p, v)
mz_bool mz_zip_writer_init_v2(mz_zip_archive *pZip, mz_uint64 existing_size, mz_uint flags)
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)
mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename)
static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip, mz_zip_array *pArray, size_t min_new_capacity, mz_uint growing)
void * mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint flags)
mz_zip_error mz_zip_clear_last_error(mz_zip_archive *pZip)
#define TINFL_SKIP_BITS(state_index, n)
FILE * mz_zip_get_cfile(mz_zip_archive *pZip)
#define TDEFL_RLE_PREV_CODE_SIZE()
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)
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)
static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d)
void tinfl_decompressor_free(tinfl_decompressor *pDecomp)
mz_bool mz_zip_writer_add_cfile(mz_zip_archive *pZip, const char *pArchive_name, FILE *pSrc_file, mz_uint64 size_to_add, const time_t *pFile_time, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, const char *user_extra_data, mz_uint user_extra_data_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len)
#define TDEFL_PUT_BITS(b, l)
void * tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags)
@ MZ_ZIP_FLAG_WRITE_ZIP64
@ MZ_ZIP_FLAG_WRITE_ALLOW_READING
@ MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY
@ MZ_ZIP_FLAG_UTF8_FILENAME
@ MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG
@ MZ_ZIP_FLAG_COMPRESSED_DATA
@ MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY
@ MZ_ZIP_FLAG_CASE_SENSITIVE
@ MZ_ZIP_FLAG_IGNORE_PATH
size_t(* mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n)
@ TINFL_STATUS_ADLER32_MISMATCH
@ TINFL_STATUS_NEEDS_MORE_INPUT
@ TINFL_STATUS_HAS_MORE_OUTPUT
@ TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS
#define TINFL_LZ_DICT_SIZE
#define MZ_CLEAR_OBJ(obj)
int(* tinfl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser)
#define tinfl_get_adler32(r)
#define MZ_DEFAULT_WINDOW_BITS
@ TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF
@ TINFL_FLAG_HAS_MORE_INPUT
@ TINFL_FLAG_COMPUTE_ADLER32
@ TINFL_FLAG_PARSE_ZLIB_HEADER
@ TDEFL_LEVEL1_HASH_SIZE_MASK
@ TDEFL_MAX_HUFF_SYMBOLS_0
@ TDEFL_LZ_DICT_SIZE_MASK
@ TDEFL_MAX_HUFF_SYMBOLS_1
@ TDEFL_MAX_HUFF_SYMBOLS_2
@ TDEFL_FORCE_ALL_RAW_BLOCKS
@ TDEFL_GREEDY_PARSING_FLAG
@ TDEFL_FORCE_ALL_STATIC_BLOCKS
@ TDEFL_WRITE_ZLIB_HEADER
@ TDEFL_NONDETERMINISTIC_PARSING_FLAG
#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED
@ TDEFL_STATUS_PUT_BUF_FAILED
@ MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED
mz_bool(* tdefl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser)
@ MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE
@ MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE
@ MZ_ZIP_UNSUPPORTED_METHOD
@ MZ_ZIP_UNSUPPORTED_FEATURE
@ MZ_ZIP_FILE_OPEN_FAILED
@ MZ_ZIP_WRITE_CALLBACK_FAILED
@ MZ_ZIP_CRC_CHECK_FAILED
@ MZ_ZIP_FILE_CLOSE_FAILED
@ MZ_ZIP_FILE_CREATE_FAILED
@ MZ_ZIP_VALIDATION_FAILED
@ MZ_ZIP_FILE_STAT_FAILED
@ MZ_ZIP_INVALID_FILENAME
@ MZ_ZIP_COMPRESSION_FAILED
@ MZ_ZIP_UNSUPPORTED_ENCRYPTION
@ MZ_ZIP_UNSUPPORTED_MULTIDISK
@ MZ_ZIP_ARCHIVE_TOO_LARGE
@ MZ_ZIP_DECOMPRESSION_FAILED
@ MZ_ZIP_FILE_WRITE_FAILED
@ MZ_ZIP_INVALID_PARAMETER
@ MZ_ZIP_INVALID_HEADER_OR_CORRUPTED
@ MZ_ZIP_UNSUPPORTED_CDIR_SIZE
@ MZ_ZIP_FILE_READ_FAILED
@ MZ_ZIP_FAILED_FINDING_CENTRAL_DIR
@ MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE
@ MZ_ZIP_FILE_SEEK_FAILED
mz_uint32 tinfl_bit_buf_t
void * memcpy(void *dst, const void *src, size_t n)
int memcmp(const void *s1, const void *s2, size_t n)
size_t strlen(const char *s)
void * memset(void *s, int c, size_t n)
tinfl_status m_last_status
tinfl_decompressor m_decomp
struct mz_internal_state * state
const unsigned char * next_in
mz_uint32 m_external_attr
mz_uint16 m_version_needed
mz_uint16 m_version_made_by
mz_uint64 m_central_dir_ofs
mz_uint64 m_local_header_ofs
mz_uint16 m_internal_attr
char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE]
char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE]
mz_uint64 m_central_directory_file_ofs
mz_zip_error m_last_error
mz_file_write_func m_pWrite
mz_zip_internal_state * m_pState
mz_realloc_func m_pRealloc
mz_file_read_func m_pRead
mz_uint64 m_file_offset_alignment
mz_bool m_zip64_has_extended_info_fields
mz_zip_array m_sorted_central_dir_offsets
mz_uint64 m_file_archive_start_ofs
mz_zip_array m_central_dir_offsets
mz_zip_array m_central_dir
mz_uint64 m_cur_archive_file_ofs
mz_uint m_saved_match_dist
mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE]
mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]
mz_uint m_output_flush_remaining
mz_uint m_wants_to_finish
tdefl_status m_prev_return_status
mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE+TDEFL_MAX_MATCH_LEN - 1]
tdefl_put_buf_func_ptr m_pPut_buf_func
mz_uint m_output_flush_ofs
mz_uint16 m_next[TDEFL_LZ_DICT_SIZE]
mz_uint8 * m_pOutput_buf_end
mz_uint m_saved_match_len
mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]
mz_uint m_lz_code_buf_dict_pos
mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE]
mz_uint8 * m_pLZ_code_buf
mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]
mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE]
mz_int16 m_tree[TINFL_MAX_HUFF_SYMBOLS_0 *2]
mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0]
mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE]
struct tm * localtime(const time_t *clock)
time_t time(time_t *tloc)
time_t mktime(struct tm *timeptr)