Contents of /trunk/src/unzip.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (hide annotations)
Sat Jun 20 11:08:47 2009 UTC (14 years, 11 months ago) by harbaum
File MIME type: text/plain
File size: 12968 byte(s)
Initial import
1 harbaum 1 /* unzip.h -- IO for uncompress .zip files using zlib
2     Version 1.01e, February 12th, 2005
3    
4     Copyright (C) 1998-2005 Gilles Vollant
5    
6     This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
7     WinZip, InfoZip tools and compatible.
8    
9     Multi volume ZipFile (span) are not supported.
10     Encryption compatible with pkzip 2.04g only supported
11     Old compressions used by old PKZip 1.x are not supported
12    
13    
14     I WAIT FEEDBACK at mail info@winimage.com
15     Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution
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    
38     /* for more info about .ZIP format, see
39     http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip
40     http://www.info-zip.org/pub/infozip/doc/
41     PkWare has also a specification at :
42     ftp://ftp.pkware.com/probdesc.zip
43     */
44    
45     #ifndef _unz_H
46     #define _unz_H
47    
48     #ifdef __cplusplus
49     extern "C" {
50     #endif
51    
52     #ifndef _ZLIB_H
53     #include "zlib.h"
54     #endif
55    
56     #ifndef _ZLIBIOAPI_H
57     #include "ioapi.h"
58     #endif
59    
60     #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
61     /* like the STRICT of WIN32, we define a pointer that cannot be converted
62     from (void*) without cast */
63     typedef struct TagunzFile__ { int unused; } unzFile__;
64     typedef unzFile__ *unzFile;
65     #else
66     typedef voidp unzFile;
67     #endif
68    
69    
70     #define UNZ_OK (0)
71     #define UNZ_END_OF_LIST_OF_FILE (-100)
72     #define UNZ_ERRNO (Z_ERRNO)
73     #define UNZ_EOF (0)
74     #define UNZ_PARAMERROR (-102)
75     #define UNZ_BADZIPFILE (-103)
76     #define UNZ_INTERNALERROR (-104)
77     #define UNZ_CRCERROR (-105)
78    
79     /* tm_unz contain date/time info */
80     typedef struct tm_unz_s
81     {
82     uInt tm_sec; /* seconds after the minute - [0,59] */
83     uInt tm_min; /* minutes after the hour - [0,59] */
84     uInt tm_hour; /* hours since midnight - [0,23] */
85     uInt tm_mday; /* day of the month - [1,31] */
86     uInt tm_mon; /* months since January - [0,11] */
87     uInt tm_year; /* years - [1980..2044] */
88     } tm_unz;
89    
90     /* unz_global_info structure contain global data about the ZIPfile
91     These data comes from the end of central dir */
92     typedef struct unz_global_info_s
93     {
94     uLong number_entry; /* total number of entries in
95     the central dir on this disk */
96     uLong size_comment; /* size of the global comment of the zipfile */
97     } unz_global_info;
98    
99    
100     /* unz_file_info contain information about a file in the zipfile */
101     typedef struct unz_file_info_s
102     {
103     uLong version; /* version made by 2 bytes */
104     uLong version_needed; /* version needed to extract 2 bytes */
105     uLong flag; /* general purpose bit flag 2 bytes */
106     uLong compression_method; /* compression method 2 bytes */
107     uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
108     uLong crc; /* crc-32 4 bytes */
109     uLong compressed_size; /* compressed size 4 bytes */
110     uLong uncompressed_size; /* uncompressed size 4 bytes */
111     uLong size_filename; /* filename length 2 bytes */
112     uLong size_file_extra; /* extra field length 2 bytes */
113     uLong size_file_comment; /* file comment length 2 bytes */
114    
115     uLong disk_num_start; /* disk number start 2 bytes */
116     uLong internal_fa; /* internal file attributes 2 bytes */
117     uLong external_fa; /* external file attributes 4 bytes */
118    
119     tm_unz tmu_date;
120     } unz_file_info;
121    
122     extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
123     const char* fileName2,
124     int iCaseSensitivity));
125     /*
126     Compare two filename (fileName1,fileName2).
127     If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
128     If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
129     or strcasecmp)
130     If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
131     (like 1 on Unix, 2 on Windows)
132     */
133    
134    
135     extern unzFile ZEXPORT unzOpen OF((const char *path));
136     /*
137     Open a Zip file. path contain the full pathname (by example,
138     on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
139     "zlib/zlib113.zip".
140     If the zipfile cannot be opened (file don't exist or in not valid), the
141     return value is NULL.
142     Else, the return value is a unzFile Handle, usable with other function
143     of this unzip package.
144     */
145    
146     extern unzFile ZEXPORT unzOpen2 OF((const char *path,
147     zlib_filefunc_def* pzlib_filefunc_def));
148     /*
149     Open a Zip file, like unzOpen, but provide a set of file low level API
150     for read/write the zip file (see ioapi.h)
151     */
152    
153     extern int ZEXPORT unzClose OF((unzFile file));
154     /*
155     Close a ZipFile opened with unzipOpen.
156     If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
157     these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
158     return UNZ_OK if there is no problem. */
159    
160     extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
161     unz_global_info *pglobal_info));
162     /*
163     Write info about the ZipFile in the *pglobal_info structure.
164     No preparation of the structure is needed
165     return UNZ_OK if there is no problem. */
166    
167    
168     extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
169     char *szComment,
170     uLong uSizeBuf));
171     /*
172     Get the global comment string of the ZipFile, in the szComment buffer.
173     uSizeBuf is the size of the szComment buffer.
174     return the number of byte copied or an error code <0
175     */
176    
177    
178     /***************************************************************************/
179     /* Unzip package allow you browse the directory of the zipfile */
180    
181     extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
182     /*
183     Set the current file of the zipfile to the first file.
184     return UNZ_OK if there is no problem
185     */
186    
187     extern int ZEXPORT unzGoToNextFile OF((unzFile file));
188     /*
189     Set the current file of the zipfile to the next file.
190     return UNZ_OK if there is no problem
191     return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
192     */
193    
194     extern int ZEXPORT unzLocateFile OF((unzFile file,
195     const char *szFileName,
196     int iCaseSensitivity));
197     /*
198     Try locate the file szFileName in the zipfile.
199     For the iCaseSensitivity signification, see unzStringFileNameCompare
200    
201     return value :
202     UNZ_OK if the file is found. It becomes the current file.
203     UNZ_END_OF_LIST_OF_FILE if the file is not found
204     */
205    
206    
207     /* ****************************************** */
208     /* Ryan supplied functions */
209     /* unz_file_info contain information about a file in the zipfile */
210     typedef struct unz_file_pos_s
211     {
212     uLong pos_in_zip_directory; /* offset in zip file directory */
213     uLong num_of_file; /* # of file */
214     } unz_file_pos;
215    
216     extern int ZEXPORT unzGetFilePos(
217     unzFile file,
218     unz_file_pos* file_pos);
219    
220     extern int ZEXPORT unzGoToFilePos(
221     unzFile file,
222     unz_file_pos* file_pos);
223    
224     /* ****************************************** */
225    
226     extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
227     unz_file_info *pfile_info,
228     char *szFileName,
229     uLong fileNameBufferSize,
230     void *extraField,
231     uLong extraFieldBufferSize,
232     char *szComment,
233     uLong commentBufferSize));
234     /*
235     Get Info about the current file
236     if pfile_info!=NULL, the *pfile_info structure will contain somes info about
237     the current file
238     if szFileName!=NULL, the filemane string will be copied in szFileName
239     (fileNameBufferSize is the size of the buffer)
240     if extraField!=NULL, the extra field information will be copied in extraField
241     (extraFieldBufferSize is the size of the buffer).
242     This is the Central-header version of the extra field
243     if szComment!=NULL, the comment string of the file will be copied in szComment
244     (commentBufferSize is the size of the buffer)
245     */
246    
247     /***************************************************************************/
248     /* for reading the content of the current zipfile, you can open it, read data
249     from it, and close it (you can close it before reading all the file)
250     */
251    
252     extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
253     /*
254     Open for reading data the current file in the zipfile.
255     If there is no error, the return value is UNZ_OK.
256     */
257    
258     extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
259     const char* password));
260     /*
261     Open for reading data the current file in the zipfile.
262     password is a crypting password
263     If there is no error, the return value is UNZ_OK.
264     */
265    
266     extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
267     int* method,
268     int* level,
269     int raw));
270     /*
271     Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
272     if raw==1
273     *method will receive method of compression, *level will receive level of
274     compression
275     note : you can set level parameter as NULL (if you did not want known level,
276     but you CANNOT set method parameter as NULL
277     */
278    
279     extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
280     int* method,
281     int* level,
282     int raw,
283     const char* password));
284     /*
285     Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
286     if raw==1
287     *method will receive method of compression, *level will receive level of
288     compression
289     note : you can set level parameter as NULL (if you did not want known level,
290     but you CANNOT set method parameter as NULL
291     */
292    
293    
294     extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
295     /*
296     Close the file in zip opened with unzOpenCurrentFile
297     Return UNZ_CRCERROR if all the file was read but the CRC is not good
298     */
299    
300     extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
301     voidp buf,
302     unsigned len));
303     /*
304     Read bytes from the current file (opened by unzOpenCurrentFile)
305     buf contain buffer where data must be copied
306     len the size of buf.
307    
308     return the number of byte copied if somes bytes are copied
309     return 0 if the end of file was reached
310     return <0 with error code if there is an error
311     (UNZ_ERRNO for IO error, or zLib error for uncompress error)
312     */
313    
314     extern z_off_t ZEXPORT unztell OF((unzFile file));
315     /*
316     Give the current position in uncompressed data
317     */
318    
319     extern int ZEXPORT unzeof OF((unzFile file));
320     /*
321     return 1 if the end of file was reached, 0 elsewhere
322     */
323    
324     extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
325     voidp buf,
326     unsigned len));
327     /*
328     Read extra field from the current file (opened by unzOpenCurrentFile)
329     This is the local-header version of the extra field (sometimes, there is
330     more info in the local-header version than in the central-header)
331    
332     if buf==NULL, it return the size of the local extra field
333    
334     if buf!=NULL, len is the size of the buffer, the extra header is copied in
335     buf.
336     the return value is the number of bytes copied in buf, or (if <0)
337     the error code
338     */
339    
340     /***************************************************************************/
341    
342     /* Get the current file offset */
343     extern uLong ZEXPORT unzGetOffset (unzFile file);
344    
345     /* Set the current file offset */
346     extern int ZEXPORT unzSetOffset (unzFile file, uLong pos);
347    
348    
349    
350     #ifdef __cplusplus
351     }
352     #endif
353    
354     #endif /* _unz_H */