1 module utile.miniz.binding;
2 
3 import core.stdc.stdio;
4 
5 extern (C):
6 
7 enum
8 {
9 	MZ_ZIP_MAX_IO_BUF_SIZE = 64 * 1024,
10 	MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 512,
11 	MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 512
12 }
13 
14 struct mz_zip_internal_state;
15 
16 struct mz_zip_archive_file_stat
17 {
18 	uint m_file_index;
19 	ulong m_central_dir_ofs;
20 	ushort m_version_made_by;
21 	ushort m_version_needed;
22 	ushort m_bit_flag;
23 	ushort m_method;
24 	ulong m_time;
25 	uint m_crc32;
26 	ulong m_comp_size;
27 	ulong m_uncomp_size;
28 	ushort m_internal_attr;
29 	uint m_external_attr;
30 	ulong m_local_header_ofs;
31 	uint m_comment_size;
32 	int m_is_directory;
33 	int m_is_encrypted;
34 	int m_is_supported;
35 	char[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE] m_filename;
36 	char[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE] m_comment;
37 }
38 
39 struct mz_zip_archive
40 {
41 	ulong m_archive_size;
42 	ulong m_central_directory_file_ofs;
43 	uint m_total_files;
44 	mz_zip_mode m_zip_mode;
45 	mz_zip_type m_zip_type;
46 	mz_zip_error m_last_error;
47 	ulong m_file_offset_alignment;
48 	mz_alloc_func m_pAlloc;
49 	mz_free_func m_pFree;
50 	mz_realloc_func m_pRealloc;
51 	void* m_pAlloc_opaque;
52 	mz_file_read_func m_pRead;
53 	mz_file_write_func m_pWrite;
54 	mz_file_needs_keepalive m_pNeeds_keepalive;
55 	void* m_pIO_opaque;
56 	mz_zip_internal_state* m_pState;
57 }
58 
59 /*struct tinfl_decompressor;
60 
61 struct mz_zip_reader_extract_iter_state
62 {
63 	mz_zip_archive* pZip;
64 	uint flags;
65 	int status;
66 	uint mz_file_crc32;
67 	ulong read_buf_size, read_buf_ofs, read_buf_avail, comp_remaining, out_buf_ofs, cur_file_ofs;
68 	mz_zip_archive_file_stat mz_file_stat;
69 	void* pRead_buf;
70 	void* pWrite_buf;
71 	size_t out_blk_remain;
72 	tinfl_decompressor inflator;
73 }*/
74 
75 alias mz_file_read_func = size_t function(void* pOpaque, ulong mz_file_ofs, void* pBuf, size_t n);
76 alias mz_file_write_func = size_t function(void* pOpaque, ulong mz_file_ofs, in void* pBuf, size_t n);
77 alias mz_file_needs_keepalive = int function(void* pOpaque);
78 
79 alias mz_alloc_func = void* function(void* opaque, size_t items, size_t size);
80 alias mz_free_func = void function(void* opaque, void* address);
81 alias mz_realloc_func = void* function(void* opaque, void* address, size_t items, size_t size);
82 
83 alias mz_zip_mode = int;
84 alias mz_zip_type = int;
85 alias mz_zip_error = int;
86 alias mz_zip_flags = int;
87 
88 enum
89 {
90 	MZ_ZIP_MODE_INVALID = 0,
91 	MZ_ZIP_MODE_READING = 1,
92 	MZ_ZIP_MODE_WRITING = 2,
93 	MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3
94 }
95 
96 enum
97 {
98 	MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100,
99 	MZ_ZIP_FLAG_IGNORE_PATH = 0x0200,
100 	MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400,
101 	MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800,
102 	MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG = 0x1000,
103 	MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY = 0x2000,
104 	MZ_ZIP_FLAG_WRITE_ZIP64 = 0x4000,
105 	MZ_ZIP_FLAG_WRITE_ALLOW_READING = 0x8000,
106 	MZ_ZIP_FLAG_ASCII_FILENAME = 0x10000
107 }
108 
109 enum
110 {
111 	MZ_ZIP_TYPE_INVALID = 0,
112 	MZ_ZIP_TYPE_USER,
113 	MZ_ZIP_TYPE_MEMORY,
114 	MZ_ZIP_TYPE_HEAP,
115 	MZ_ZIP_TYPE_FILE,
116 	MZ_ZIP_TYPE_CFILE,
117 	MZ_ZIP_TOTAL_TYPES
118 }
119 
120 enum
121 {
122 	MZ_ZIP_NO_ERROR = 0,
123 	MZ_ZIP_UNDEFINED_ERROR,
124 	MZ_ZIP_TOO_MANY_FILES,
125 	MZ_ZIP_FILE_TOO_LARGE,
126 	MZ_ZIP_UNSUPPORTED_METHOD,
127 	MZ_ZIP_UNSUPPORTED_ENCRYPTION,
128 	MZ_ZIP_UNSUPPORTED_FEATURE,
129 	MZ_ZIP_FAILED_FINDING_CENTRAL_DIR,
130 	MZ_ZIP_NOT_AN_ARCHIVE,
131 	MZ_ZIP_INVALID_HEADER_OR_CORRUPTED,
132 	MZ_ZIP_UNSUPPORTED_MULTIDISK,
133 	MZ_ZIP_DECOMPRESSION_FAILED,
134 	MZ_ZIP_COMPRESSION_FAILED,
135 	MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE,
136 	MZ_ZIP_CRC_CHECK_FAILED,
137 	MZ_ZIP_UNSUPPORTED_CDIR_SIZE,
138 	MZ_ZIP_ALLOC_FAILED,
139 	MZ_ZIP_FILE_OPEN_FAILED,
140 	MZ_ZIP_FILE_CREATE_FAILED,
141 	MZ_ZIP_FILE_WRITE_FAILED,
142 	MZ_ZIP_FILE_READ_FAILED,
143 	MZ_ZIP_FILE_CLOSE_FAILED,
144 	MZ_ZIP_FILE_SEEK_FAILED,
145 	MZ_ZIP_FILE_STAT_FAILED,
146 	MZ_ZIP_INVALID_PARAMETER,
147 	MZ_ZIP_INVALID_FILENAME,
148 	MZ_ZIP_BUF_TOO_SMALL,
149 	MZ_ZIP_INTERNAL_ERROR,
150 	MZ_ZIP_FILE_NOT_FOUND,
151 	MZ_ZIP_ARCHIVE_TOO_LARGE,
152 	MZ_ZIP_VALIDATION_FAILED,
153 	MZ_ZIP_WRITE_CALLBACK_FAILED,
154 	MZ_ZIP_TOTAL_ERRORS
155 }
156 
157 int mz_zip_reader_init(mz_zip_archive* pZip, ulong size, uint flags);
158 int mz_zip_reader_init_mem(mz_zip_archive* pZip, in void* pMem, size_t size, uint flags);
159 int mz_zip_reader_init_file(mz_zip_archive* pZip, in char* pFilename, uint flags);
160 int mz_zip_reader_init_file_v2(mz_zip_archive* pZip, in char* pFilename,
161 		uint flags, ulong mz_file_start_ofs, ulong archive_size);
162 int mz_zip_reader_init_cfile(mz_zip_archive* pZip, FILE* pFile, ulong archive_size, uint flags);
163 
164 int mz_zip_reader_end(mz_zip_archive* pZip);
165 void mz_zip_zero_struct(mz_zip_archive* pZip);
166 
167 mz_zip_mode mz_zip_get_mode(mz_zip_archive* pZip);
168 mz_zip_type mz_zip_get_type(mz_zip_archive* pZip);
169 uint mz_zip_reader_get_num_files(mz_zip_archive* pZip);
170 ulong mz_zip_get_archive_size(mz_zip_archive* pZip);
171 ulong mz_zip_get_archive_file_start_offset(mz_zip_archive* pZip);
172 
173 FILE* mz_zip_get_cfile(mz_zip_archive* pZip);
174 size_t mz_zip_read_archive_data(mz_zip_archive* pZip, ulong mz_file_ofs, void* pBuf, size_t n);
175 
176 mz_zip_error mz_zip_set_last_error(mz_zip_archive* pZip, mz_zip_error err_num);
177 mz_zip_error mz_zip_peek_last_error(mz_zip_archive* pZip);
178 mz_zip_error mz_zip_clear_last_error(mz_zip_archive* pZip);
179 mz_zip_error mz_zip_get_last_error(mz_zip_archive* pZip);
180 const(char)* mz_zip_get_error_string(mz_zip_error mz_err);
181 
182 int mz_zip_reader_is_file_a_directory(mz_zip_archive* pZip, uint mz_file_index);
183 int mz_zip_reader_is_file_encrypted(mz_zip_archive* pZip, uint mz_file_index);
184 int mz_zip_reader_is_file_supported(mz_zip_archive* pZip, uint mz_file_index);
185 
186 uint mz_zip_reader_get_filename(mz_zip_archive* pZip, uint mz_file_index,
187 		char* pFilename, uint filename_buf_size);
188 
189 int mz_zip_reader_locate_file(mz_zip_archive* pZip, in char* pName, in char* pComment, uint flags);
190 int mz_zip_reader_locate_file_v2(mz_zip_archive* pZip, in char* pName,
191 		in char* pComment, uint flags, uint* mz_file_index);
192 int mz_zip_reader_file_stat(mz_zip_archive* pZip, uint mz_file_index,
193 		mz_zip_archive_file_stat* pStat);
194 
195 int mz_zip_is_zip64(mz_zip_archive* pZip);
196 size_t mz_zip_get_central_dir_size(mz_zip_archive* pZip);
197 
198 int mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive* pZip, uint mz_file_index,
199 		void* pBuf, size_t buf_size, uint flags, void* pUser_read_buf, size_t user_read_buf_size);
200 int mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive* pZip, in char* pFilename,
201 		void* pBuf, size_t buf_size, uint flags, void* pUser_read_buf, size_t user_read_buf_size);
202 int mz_zip_reader_extract_to_mem(mz_zip_archive* pZip, uint mz_file_index,
203 		void* pBuf, size_t buf_size, uint flags);
204 int mz_zip_reader_extract_file_to_mem(mz_zip_archive* pZip, in char* pFilename,
205 		void* pBuf, size_t buf_size, uint flags);
206 
207 void* mz_zip_reader_extract_to_heap(mz_zip_archive* pZip, uint mz_file_index,
208 		size_t* pSize, uint flags);
209 void* mz_zip_reader_extract_file_to_heap(mz_zip_archive* pZip,
210 		in char* pFilename, size_t* pSize, uint flags);
211 
212 int mz_zip_reader_extract_to_callback(mz_zip_archive* pZip, uint mz_file_index,
213 		mz_file_write_func pCallback, void* pOpaque, uint flags);
214 int mz_zip_reader_extract_file_to_callback(mz_zip_archive* pZip,
215 		in char* pFilename, mz_file_write_func pCallback, void* pOpaque, uint flags);
216 
217 /*mz_zip_reader_extract_iter_state* mz_zip_reader_extract_iter_new(mz_zip_archive* pZip, uint mz_file_index, uint flags);
218 mz_zip_reader_extract_iter_state* mz_zip_reader_extract_file_iter_new(mz_zip_archive* pZip, in char* pFilename, uint flags);
219 size_t mz_zip_reader_extract_iter_read(mz_zip_reader_extract_iter_state* pState, void* pvBuf, size_t buf_size);
220 int mz_zip_reader_extract_iter_free(mz_zip_reader_extract_iter_state* pState);*/
221 
222 int mz_zip_reader_extract_to_file(mz_zip_archive* pZip, uint mz_file_index,
223 		in char* pDst_filename, uint flags);
224 int mz_zip_reader_extract_file_to_file(mz_zip_archive* pZip,
225 		in char* pArchive_filename, in char* pDst_filename, uint flags);
226 int mz_zip_reader_extract_to_cfile(mz_zip_archive* pZip, uint mz_file_index, FILE* File, uint flags);
227 int mz_zip_reader_extract_file_to_cfile(mz_zip_archive* pZip,
228 		in char* pArchive_filename, FILE* pFile, uint flags);
229 
230 int mz_zip_validate_file(mz_zip_archive* pZip, uint mz_file_index, uint flags);
231 int mz_zip_validate_archive(mz_zip_archive* pZip, uint flags);
232 int mz_zip_validate_mem_archive(in void* pMem, size_t size, uint flags, mz_zip_error* pErr);
233 int mz_zip_validate_file_archive(in char* pFilename, uint flags, mz_zip_error* pErr);
234 int mz_zip_end(mz_zip_archive* pZip);
235 
236 int mz_zip_writer_init(mz_zip_archive* pZip, ulong existing_size);
237 int mz_zip_writer_init_v2(mz_zip_archive* pZip, ulong existing_size, uint flags);
238 int mz_zip_writer_init_heap(mz_zip_archive* pZip,
239 		size_t size_to_reserve_at_beginning, size_t initial_allocation_size);
240 int mz_zip_writer_init_heap_v2(mz_zip_archive* pZip,
241 		size_t size_to_reserve_at_beginning, size_t initial_allocation_size, uint flags);
242 int mz_zip_writer_init_file(mz_zip_archive* pZip, in char* pFilename,
243 		ulong size_to_reserve_at_beginning);
244 int mz_zip_writer_init_file_v2(mz_zip_archive* pZip, in char* pFilename,
245 		ulong size_to_reserve_at_beginning, uint flags);
246 int mz_zip_writer_init_cfile(mz_zip_archive* pZip, FILE* pFile, uint flags);
247 int mz_zip_writer_init_from_reader(mz_zip_archive* pZip, in char* pFilename);
248 int mz_zip_writer_init_from_reader_v2(mz_zip_archive* pZip, in char* pFilename, uint flags);
249 
250 int mz_zip_writer_add_mem(mz_zip_archive* pZip, in char* pArchive_name,
251 		in void* pBuf, size_t buf_size, uint level_and_flags);
252 int mz_zip_writer_add_mem_ex(mz_zip_archive* pZip, in char* pArchive_name, in void* pBuf, size_t buf_size,
253 		in void* pComment, ushort comment_size, uint level_and_flags,
254 		ulong uncomp_size, uint uncomp_crc32);
255 int mz_zip_writer_add_mem_ex_v2(mz_zip_archive* pZip, in char* pArchive_name, in void* pBuf, size_t buf_size,
256 		in void* pComment, ushort comment_size, uint level_and_flags,
257 		ulong uncomp_size, uint uncomp_crc32, ulong* last_modified,
258 		in char* user_extra_data_local,
259 		uint user_extra_data_local_len, in char* user_extra_data_central,
260 		uint user_extra_data_central_len);
261 
262 int mz_zip_writer_add_file(mz_zip_archive* pZip, in char* pArchive_name,
263 		in char* pSrc_filename, in void* pComment, ushort comment_size, uint level_and_flags);
264 int mz_zip_writer_add_cfile(mz_zip_archive* pZip, in char* pArchive_name, FILE* pSrc_file, ulong size_to_add,
265 		in ulong* pFile_time, in void* pComment, ushort comment_size, uint level_and_flags, in char* user_extra_data_local,
266 		uint user_extra_data_local_len, in char* user_extra_data_central,
267 		uint user_extra_data_central_len);
268 int mz_zip_writer_add_from_zip_reader(mz_zip_archive* pZip,
269 		mz_zip_archive* pSource_zip, uint src_file_index);
270 
271 int mz_zip_writer_finalize_archive(mz_zip_archive* pZip);
272 int mz_zip_writer_finalize_heap_archive(mz_zip_archive* pZip, void** ppBuf, size_t* pSize);
273 int mz_zip_writer_end(mz_zip_archive* pZip);
274 
275 int mz_zip_add_mem_to_archive_file_in_place(in char* pZip_filename, in char* pArchive_name,
276 		in void* pBuf, size_t buf_size, in void* pComment, ushort comment_size, uint level_and_flags);
277 int mz_zip_add_mem_to_archive_file_in_place_v2(in char* pZip_filename, in char* pArchive_name, in void* pBuf,
278 		size_t buf_size, in void* pComment, ushort comment_size,
279 		uint level_and_flags, mz_zip_error* pErr);
280 
281 void* mz_zip_extract_archive_file_to_heap(in char* pZip_filename,
282 		in char* pArchive_name, size_t* pSize, uint flags);
283 void* mz_zip_extract_archive_file_to_heap_v2(in char* pZip_filename,
284 		in char* pArchive_name, in char* pComment, size_t* pSize, uint flags, mz_zip_error* pErr);