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