Line data Source code
1 0 : /* unzip.h -- IO for uncompress .zip files using zlib
2 : Version 1.1, February 14h, 2010
3 : part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
4 :
5 : Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
6 :
7 : Modifications of Unzip for Zip64
8 : Copyright (C) 2007-2008 Even Rouault
9 :
10 : Modifications for Zip64 support on both zip and unzip
11 : Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
12 :
13 : For more info read MiniZip_info.txt
14 :
15 : ---------------------------------------------------------------------------------
16 :
17 : Condition of use and distribution are the same than zlib :
18 :
19 : This software is provided 'as-is', without any express or implied
20 : warranty. In no event will the authors be held liable for any damages
21 : arising from the use of this software.
22 :
23 : Permission is granted to anyone to use this software for any purpose,
24 : including commercial applications, and to alter it and redistribute it
25 : freely, subject to the following restrictions:
26 :
27 : 1. The origin of this software must not be misrepresented; you must not
28 : claim that you wrote the original software. If you use this software
29 : in a product, an acknowledgment in the product documentation would be
30 : appreciated but is not required.
31 : 2. Altered source versions must be plainly marked as such, and must not be
32 : misrepresented as being the original software.
33 : 3. This notice may not be removed or altered from any source distribution.
34 :
35 : ---------------------------------------------------------------------------------
36 :
37 : Changes
38 :
39 : See header of unzip64.c
40 :
41 : */
42 :
43 : #ifndef _unz64_H
44 : #define _unz64_H
45 :
46 : #ifdef __cplusplus
47 : extern "C" {
48 : #endif
49 :
50 : #ifndef _ZLIB_H
51 : #include "zlib.h"
52 : #endif
53 :
54 : #ifndef _ZLIBIOAPI_H
55 : #include "ioapi.h"
56 : #endif
57 :
58 : #ifdef HAVE_BZIP2
59 : #include "bzlib.h"
60 : #endif
61 :
62 0 : #define Z_BZIP2ED 12
63 :
64 : #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
65 : /* like the STRICT of WIN32, we define a pointer that cannot be converted
66 : from (void*) without cast */
67 : typedef struct TagunzFile__ { int unused; } unzFile__;
68 : typedef unzFile__ *unzFile;
69 : #else
70 0 : typedef voidp unzFile;
71 : #endif
72 :
73 :
74 0 : #define UNZ_OK (0)
75 0 : #define UNZ_END_OF_LIST_OF_FILE (-100)
76 0 : #define UNZ_ERRNO (Z_ERRNO)
77 0 : #define UNZ_EOF (0)
78 0 : #define UNZ_PARAMERROR (-102)
79 0 : #define UNZ_BADZIPFILE (-103)
80 0 : #define UNZ_INTERNALERROR (-104)
81 0 : #define UNZ_CRCERROR (-105)
82 :
83 : /* tm_unz contain date/time info */
84 0 : typedef struct tm_unz_s
85 : {
86 0 : uInt tm_sec; /* seconds after the minute - [0,59] */
87 0 : uInt tm_min; /* minutes after the hour - [0,59] */
88 0 : uInt tm_hour; /* hours since midnight - [0,23] */
89 0 : uInt tm_mday; /* day of the month - [1,31] */
90 0 : uInt tm_mon; /* months since January - [0,11] */
91 0 : uInt tm_year; /* years - [1980..2044] */
92 0 : } tm_unz;
93 :
94 : /* unz_global_info structure contain global data about the ZIPfile
95 : These data comes from the end of central dir */
96 0 : typedef struct unz_global_info64_s
97 : {
98 0 : ZPOS64_T number_entry; /* total number of entries in
99 : the central dir on this disk */
100 0 : uLong size_comment; /* size of the global comment of the zipfile */
101 0 : } unz_global_info64;
102 :
103 0 : typedef struct unz_global_info_s
104 : {
105 0 : uLong number_entry; /* total number of entries in
106 : the central dir on this disk */
107 0 : uLong size_comment; /* size of the global comment of the zipfile */
108 0 : } unz_global_info;
109 :
110 : /* unz_file_info contain information about a file in the zipfile */
111 0 : typedef struct unz_file_info64_s
112 : {
113 0 : uLong version; /* version made by 2 bytes */
114 0 : uLong version_needed; /* version needed to extract 2 bytes */
115 0 : uLong flag; /* general purpose bit flag 2 bytes */
116 0 : uLong compression_method; /* compression method 2 bytes */
117 0 : uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
118 0 : uLong crc; /* crc-32 4 bytes */
119 0 : ZPOS64_T compressed_size; /* compressed size 8 bytes */
120 0 : ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */
121 0 : uLong size_filename; /* filename length 2 bytes */
122 0 : uLong size_file_extra; /* extra field length 2 bytes */
123 0 : uLong size_file_comment; /* file comment length 2 bytes */
124 :
125 0 : uLong disk_num_start; /* disk number start 2 bytes */
126 0 : uLong internal_fa; /* internal file attributes 2 bytes */
127 0 : uLong external_fa; /* external file attributes 4 bytes */
128 :
129 0 : tm_unz tmu_date;
130 0 : } unz_file_info64;
131 :
132 0 : typedef struct unz_file_info_s
133 : {
134 0 : uLong version; /* version made by 2 bytes */
135 0 : uLong version_needed; /* version needed to extract 2 bytes */
136 0 : uLong flag; /* general purpose bit flag 2 bytes */
137 0 : uLong compression_method; /* compression method 2 bytes */
138 0 : uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
139 0 : uLong crc; /* crc-32 4 bytes */
140 0 : uLong compressed_size; /* compressed size 4 bytes */
141 0 : uLong uncompressed_size; /* uncompressed size 4 bytes */
142 0 : uLong size_filename; /* filename length 2 bytes */
143 0 : uLong size_file_extra; /* extra field length 2 bytes */
144 0 : uLong size_file_comment; /* file comment length 2 bytes */
145 :
146 0 : uLong disk_num_start; /* disk number start 2 bytes */
147 0 : uLong internal_fa; /* internal file attributes 2 bytes */
148 0 : uLong external_fa; /* external file attributes 4 bytes */
149 :
150 0 : tm_unz tmu_date;
151 0 : } unz_file_info;
152 :
153 0 : extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
154 : const char* fileName2,
155 : int iCaseSensitivity));
156 : /*
157 : Compare two filename (fileName1,fileName2).
158 : If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
159 : If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
160 : or strcasecmp)
161 : If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
162 : (like 1 on Unix, 2 on Windows)
163 : */
164 :
165 :
166 0 : extern unzFile ZEXPORT unzOpen OF((const char *path));
167 0 : extern unzFile ZEXPORT unzOpen64 OF((const void *path));
168 : /*
169 : Open a Zip file. path contain the full pathname (by example,
170 : on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
171 : "zlib/zlib113.zip".
172 : If the zipfile cannot be opened (file don't exist or in not valid), the
173 : return value is NULL.
174 : Else, the return value is a unzFile Handle, usable with other function
175 : of this unzip package.
176 : the "64" function take a const void* pointer, because the path is just the
177 : value passed to the open64_file_func callback.
178 : Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path
179 : is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char*
180 : does not describe the reality
181 : */
182 :
183 :
184 0 : extern unzFile ZEXPORT unzOpen2 OF((const char *path,
185 : zlib_filefunc_def* pzlib_filefunc_def));
186 : /*
187 : Open a Zip file, like unzOpen, but provide a set of file low level API
188 : for read/write the zip file (see ioapi.h)
189 : */
190 :
191 0 : extern unzFile ZEXPORT unzOpen2_64 OF((const void *path,
192 : zlib_filefunc64_def* pzlib_filefunc_def));
193 : /*
194 : Open a Zip file, like unz64Open, but provide a set of file low level API
195 : for read/write the zip file (see ioapi.h)
196 : */
197 :
198 1 : extern int ZEXPORT unzClose OF((unzFile file));
199 : /*
200 : Close a ZipFile opened with unzipOpen.
201 : If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
202 : these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
203 : return UNZ_OK if there is no problem. */
204 :
205 0 : extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
206 : unz_global_info *pglobal_info));
207 :
208 0 : extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file,
209 : unz_global_info64 *pglobal_info));
210 : /*
211 : Write info about the ZipFile in the *pglobal_info structure.
212 : No preparation of the structure is needed
213 : return UNZ_OK if there is no problem. */
214 :
215 :
216 0 : extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
217 : char *szComment,
218 : uLong uSizeBuf));
219 : /*
220 : Get the global comment string of the ZipFile, in the szComment buffer.
221 : uSizeBuf is the size of the szComment buffer.
222 : return the number of byte copied or an error code <0
223 : */
224 :
225 :
226 : /***************************************************************************/
227 : /* Unzip package allow you browse the directory of the zipfile */
228 :
229 : extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
230 : /*
231 : Set the current file of the zipfile to the first file.
232 : return UNZ_OK if there is no problem
233 : */
234 :
235 : extern int ZEXPORT unzGoToNextFile OF((unzFile file));
236 : /*
237 : Set the current file of the zipfile to the next file.
238 : return UNZ_OK if there is no problem
239 : return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
240 : */
241 :
242 0 : extern int ZEXPORT unzLocateFile OF((unzFile file,
243 : const char *szFileName,
244 : int iCaseSensitivity));
245 : /*
246 : Try locate the file szFileName in the zipfile.
247 : For the iCaseSensitivity signification, see unzStringFileNameCompare
248 :
249 : return value :
250 : UNZ_OK if the file is found. It becomes the current file.
251 : UNZ_END_OF_LIST_OF_FILE if the file is not found
252 : */
253 :
254 :
255 : /* ****************************************** */
256 : /* Ryan supplied functions */
257 : /* unz_file_info contain information about a file in the zipfile */
258 0 : typedef struct unz_file_pos_s
259 : {
260 0 : uLong pos_in_zip_directory; /* offset in zip file directory */
261 0 : uLong num_of_file; /* # of file */
262 0 : } unz_file_pos;
263 :
264 0 : extern int ZEXPORT unzGetFilePos(
265 : unzFile file,
266 : unz_file_pos* file_pos);
267 :
268 0 : extern int ZEXPORT unzGoToFilePos(
269 : unzFile file,
270 : unz_file_pos* file_pos);
271 :
272 0 : typedef struct unz64_file_pos_s
273 : {
274 0 : ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */
275 0 : ZPOS64_T num_of_file; /* # of file */
276 0 : } unz64_file_pos;
277 :
278 0 : extern int ZEXPORT unzGetFilePos64(
279 : unzFile file,
280 : unz64_file_pos* file_pos);
281 :
282 0 : extern int ZEXPORT unzGoToFilePos64(
283 : unzFile file,
284 : const unz64_file_pos* file_pos);
285 :
286 : /* ****************************************** */
287 :
288 0 : extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file,
289 : unz_file_info64 *pfile_info,
290 : char *szFileName,
291 : uLong fileNameBufferSize,
292 : void *extraField,
293 : uLong extraFieldBufferSize,
294 : char *szComment,
295 : uLong commentBufferSize));
296 :
297 0 : extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
298 : unz_file_info *pfile_info,
299 : char *szFileName,
300 : uLong fileNameBufferSize,
301 : void *extraField,
302 : uLong extraFieldBufferSize,
303 : char *szComment,
304 : uLong commentBufferSize));
305 : /*
306 : Get Info about the current file
307 : if pfile_info!=NULL, the *pfile_info structure will contain somes info about
308 : the current file
309 : if szFileName!=NULL, the filemane string will be copied in szFileName
310 : (fileNameBufferSize is the size of the buffer)
311 : if extraField!=NULL, the extra field information will be copied in extraField
312 : (extraFieldBufferSize is the size of the buffer).
313 : This is the Central-header version of the extra field
314 : if szComment!=NULL, the comment string of the file will be copied in szComment
315 : (commentBufferSize is the size of the buffer)
316 : */
317 :
318 :
319 : /** Addition for GDAL : START */
320 :
321 : extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));
322 :
323 : /** Addition for GDAL : END */
324 :
325 :
326 : /***************************************************************************/
327 : /* for reading the content of the current zipfile, you can open it, read data
328 : from it, and close it (you can close it before reading all the file)
329 : */
330 :
331 : extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
332 : /*
333 : Open for reading data the current file in the zipfile.
334 : If there is no error, the return value is UNZ_OK.
335 : */
336 :
337 0 : extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
338 : const char* password));
339 : /*
340 : Open for reading data the current file in the zipfile.
341 : password is a crypting password
342 : If there is no error, the return value is UNZ_OK.
343 : */
344 :
345 0 : extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
346 : int* method,
347 : int* level,
348 : int raw));
349 : /*
350 : Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
351 : if raw==1
352 : *method will receive method of compression, *level will receive level of
353 : compression
354 : note : you can set level parameter as NULL (if you did not want known level,
355 : but you CANNOT set method parameter as NULL
356 : */
357 :
358 0 : extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
359 : int* method,
360 : int* level,
361 : int raw,
362 : const char* password));
363 : /*
364 : Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
365 : if raw==1
366 : *method will receive method of compression, *level will receive level of
367 : compression
368 : note : you can set level parameter as NULL (if you did not want known level,
369 : but you CANNOT set method parameter as NULL
370 : */
371 :
372 :
373 : extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
374 : /*
375 : Close the file in zip opened with unzOpenCurrentFile
376 : Return UNZ_CRCERROR if all the file was read but the CRC is not good
377 : */
378 :
379 0 : extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
380 : voidp buf,
381 : unsigned len));
382 : /*
383 : Read bytes from the current file (opened by unzOpenCurrentFile)
384 : buf contain buffer where data must be copied
385 : len the size of buf.
386 :
387 : return the number of byte copied if somes bytes are copied
388 : return 0 if the end of file was reached
389 : return <0 with error code if there is an error
390 : (UNZ_ERRNO for IO error, or zLib error for uncompress error)
391 : */
392 :
393 : extern z_off_t ZEXPORT unztell OF((unzFile file));
394 :
395 : extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file));
396 : /*
397 : Give the current position in uncompressed data
398 : */
399 :
400 : extern int ZEXPORT unzeof OF((unzFile file));
401 : /*
402 : return 1 if the end of file was reached, 0 elsewhere
403 : */
404 :
405 : extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
406 : voidp buf,
407 : unsigned len));
408 : /*
409 : Read extra field from the current file (opened by unzOpenCurrentFile)
410 : This is the local-header version of the extra field (sometimes, there is
411 : more info in the local-header version than in the central-header)
412 :
413 : if buf==NULL, it return the size of the local extra field
414 :
415 : if buf!=NULL, len is the size of the buffer, the extra header is copied in
416 : buf.
417 : the return value is the number of bytes copied in buf, or (if <0)
418 : the error code
419 : */
420 :
421 : /***************************************************************************/
422 :
423 : /* Get the current file offset */
424 0 : extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file);
425 0 : extern uLong ZEXPORT unzGetOffset (unzFile file);
426 :
427 : /* Set the current file offset */
428 0 : extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos);
429 0 : extern int ZEXPORT unzSetOffset (unzFile file, uLong pos);
430 :
431 :
432 :
433 : #ifdef __cplusplus
434 : }
435 : #endif
436 :
437 : #endif /* _unz64_H */
|