![]() |
Ignite Tools
|
00001 /* unzip.h -- IO for uncompress .zip files using zlib 00002 Version 1.01e, February 12th, 2005 00003 00004 Copyright (C) 1998-2005 Gilles Vollant 00005 00006 This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g 00007 WinZip, InfoZip tools and compatible. 00008 00009 Multi volume ZipFile (span) are not supported. 00010 Encryption compatible with pkzip 2.04g only supported 00011 Old compressions used by old PKZip 1.x are not supported 00012 00013 00014 I WAIT FEEDBACK at mail info@winimage.com 00015 Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution 00016 00017 Condition of use and distribution are the same than zlib : 00018 00019 This software is provided 'as-is', without any express or implied 00020 warranty. In no event will the authors be held liable for any damages 00021 arising from the use of this software. 00022 00023 Permission is granted to anyone to use this software for any purpose, 00024 including commercial applications, and to alter it and redistribute it 00025 freely, subject to the following restrictions: 00026 00027 1. The origin of this software must not be misrepresented; you must not 00028 claim that you wrote the original software. If you use this software 00029 in a product, an acknowledgment in the product documentation would be 00030 appreciated but is not required. 00031 2. Altered source versions must be plainly marked as such, and must not be 00032 misrepresented as being the original software. 00033 3. This notice may not be removed or altered from any source distribution. 00034 00035 00036 */ 00037 00038 /* for more info about .ZIP format, see 00039 http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip 00040 http://www.info-zip.org/pub/infozip/doc/ 00041 PkWare has also a specification at : 00042 ftp://ftp.pkware.com/probdesc.zip 00043 */ 00044 00045 #ifndef _unz_H 00046 #define _unz_H 00047 00048 #ifdef __cplusplus 00049 extern "C" { 00050 #endif 00051 00052 #ifndef _ZLIB_H 00053 #include "zlib.h" 00054 #endif 00055 00056 #ifndef _ZLIBIOAPI_H 00057 #include "UA_ioapi.h" 00058 #endif 00059 00060 #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) 00061 /* like the STRICT of WIN32, we define a pointer that cannot be converted 00062 from (void*) without cast */ 00063 typedef struct TagunzFile__ { int unused; } unzFile__; 00064 typedef unzFile__ *unzFile; 00065 #else 00066 typedef voidp unzFile; 00067 #endif 00068 00069 00070 #define UNZ_OK (0) 00071 #define UNZ_END_OF_LIST_OF_FILE (-100) 00072 #define UNZ_ERRNO (Z_ERRNO) 00073 #define UNZ_EOF (0) 00074 #define UNZ_PARAMERROR (-102) 00075 #define UNZ_BADZIPFILE (-103) 00076 #define UNZ_INTERNALERROR (-104) 00077 #define UNZ_CRCERROR (-105) 00078 00079 /* tm_unz contain date/time info */ 00080 typedef struct tm_unz_s 00081 { 00082 uInt tm_sec; /* seconds after the minute - [0,59] */ 00083 uInt tm_min; /* minutes after the hour - [0,59] */ 00084 uInt tm_hour; /* hours since midnight - [0,23] */ 00085 uInt tm_mday; /* day of the month - [1,31] */ 00086 uInt tm_mon; /* months since January - [0,11] */ 00087 uInt tm_year; /* years - [1980..2044] */ 00088 } tm_unz; 00089 00090 /* unz_global_info structure contain global data about the ZIPfile 00091 These data comes from the end of central dir */ 00092 typedef struct unz_global_info_s 00093 { 00094 uLong number_entry; /* total number of entries in 00095 the central dir on this disk */ 00096 uLong size_comment; /* size of the global comment of the zipfile */ 00097 } unz_global_info; 00098 00099 00100 /* unz_file_info contain information about a file in the zipfile */ 00101 typedef struct unz_file_info_s 00102 { 00103 uLong version; /* version made by 2 bytes */ 00104 uLong version_needed; /* version needed to extract 2 bytes */ 00105 uLong flag; /* general purpose bit flag 2 bytes */ 00106 uLong compression_method; /* compression method 2 bytes */ 00107 uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ 00108 uLong crc; /* crc-32 4 bytes */ 00109 uLong compressed_size; /* compressed size 4 bytes */ 00110 uLong uncompressed_size; /* uncompressed size 4 bytes */ 00111 uLong size_filename; /* filename length 2 bytes */ 00112 uLong size_file_extra; /* extra field length 2 bytes */ 00113 uLong size_file_comment; /* file comment length 2 bytes */ 00114 00115 uLong disk_num_start; /* disk number start 2 bytes */ 00116 uLong internal_fa; /* internal file attributes 2 bytes */ 00117 uLong external_fa; /* external file attributes 4 bytes */ 00118 00119 tm_unz tmu_date; 00120 } unz_file_info; 00121 00122 extern int ZEXPORT UA_unzStringFileNameCompare OF ((const char* fileName1, 00123 const char* fileName2, 00124 int iCaseSensitivity)); 00125 /* 00126 Compare two filename (fileName1,fileName2). 00127 If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) 00128 If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi 00129 or strcasecmp) 00130 If iCaseSenisivity = 0, case sensitivity is defaut of your operating system 00131 (like 1 on Unix, 2 on Windows) 00132 */ 00133 00134 00135 extern unzFile ZEXPORT UA_unzOpen OF((const char *path)); 00136 /* 00137 Open a Zip file. path contain the full pathname (by example, 00138 on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer 00139 "zlib/zlib113.zip". 00140 If the zipfile cannot be opened (file don't exist or in not valid), the 00141 return value is NULL. 00142 Else, the return value is a unzFile Handle, usable with other function 00143 of this unzip package. 00144 */ 00145 00146 extern unzFile ZEXPORT UA_unzOpen2 OF((const char *path, 00147 zlib_filefunc_def* pzlib_filefunc_def)); 00148 /* 00149 Open a Zip file, like UA_unzOpen, but provide a set of file low level API 00150 for read/write the zip file (see ioapi.h) 00151 */ 00152 00153 extern int ZEXPORT UA_unzClose OF((unzFile file)); 00154 /* 00155 Close a ZipFile opened with unzipOpen. 00156 If there is files inside the .Zip opened with UA_unzOpenCurrentFile (see later), 00157 these files MUST be closed with unzipCloseCurrentFile before call unzipClose. 00158 return UNZ_OK if there is no problem. */ 00159 00160 extern int ZEXPORT UA_unzGetGlobalInfo OF((unzFile file, 00161 unz_global_info *pglobal_info)); 00162 /* 00163 Write info about the ZipFile in the *pglobal_info structure. 00164 No preparation of the structure is needed 00165 return UNZ_OK if there is no problem. */ 00166 00167 00168 extern int ZEXPORT UA_unzGetGlobalComment OF((unzFile file, 00169 char *szComment, 00170 uLong uSizeBuf)); 00171 /* 00172 Get the global comment string of the ZipFile, in the szComment buffer. 00173 uSizeBuf is the size of the szComment buffer. 00174 return the number of byte copied or an error code <0 00175 */ 00176 00177 00178 /***************************************************************************/ 00179 /* Unzip package allow you browse the directory of the zipfile */ 00180 00181 extern int ZEXPORT UA_unzGoToFirstFile OF((unzFile file)); 00182 /* 00183 Set the current file of the zipfile to the first file. 00184 return UNZ_OK if there is no problem 00185 */ 00186 00187 extern int ZEXPORT UA_unzGoToNextFile OF((unzFile file)); 00188 /* 00189 Set the current file of the zipfile to the next file. 00190 return UNZ_OK if there is no problem 00191 return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. 00192 */ 00193 00194 extern int ZEXPORT UA_unzLocateFile OF((unzFile file, 00195 const char *szFileName, 00196 int iCaseSensitivity)); 00197 /* 00198 Try locate the file szFileName in the zipfile. 00199 For the iCaseSensitivity signification, see UA_unzStringFileNameCompare 00200 00201 return value : 00202 UNZ_OK if the file is found. It becomes the current file. 00203 UNZ_END_OF_LIST_OF_FILE if the file is not found 00204 */ 00205 00206 00207 /* ****************************************** */ 00208 /* Ryan supplied functions */ 00209 /* unz_file_info contain information about a file in the zipfile */ 00210 typedef struct unz_file_pos_s 00211 { 00212 uLong pos_in_zip_directory; /* offset in zip file directory */ 00213 uLong num_of_file; /* # of file */ 00214 } unz_file_pos; 00215 00216 extern int ZEXPORT UA_unzGetFilePos( 00217 unzFile file, 00218 unz_file_pos* file_pos); 00219 00220 extern int ZEXPORT UA_unzGoToFilePos( 00221 unzFile file, 00222 unz_file_pos* file_pos); 00223 00224 /* ****************************************** */ 00225 00226 extern int ZEXPORT UA_unzGetCurrentFileInfo OF((unzFile file, 00227 unz_file_info *pfile_info, 00228 char *szFileName, 00229 uLong fileNameBufferSize, 00230 void *extraField, 00231 uLong extraFieldBufferSize, 00232 char *szComment, 00233 uLong commentBufferSize)); 00234 /* 00235 Get Info about the current file 00236 if pfile_info!=NULL, the *pfile_info structure will contain somes info about 00237 the current file 00238 if szFileName!=NULL, the filemane string will be copied in szFileName 00239 (fileNameBufferSize is the size of the buffer) 00240 if extraField!=NULL, the extra field information will be copied in extraField 00241 (extraFieldBufferSize is the size of the buffer). 00242 This is the Central-header version of the extra field 00243 if szComment!=NULL, the comment string of the file will be copied in szComment 00244 (commentBufferSize is the size of the buffer) 00245 */ 00246 00247 /***************************************************************************/ 00248 /* for reading the content of the current zipfile, you can open it, read data 00249 from it, and close it (you can close it before reading all the file) 00250 */ 00251 00252 extern int ZEXPORT UA_unzOpenCurrentFile OF((unzFile file)); 00253 /* 00254 Open for reading data the current file in the zipfile. 00255 If there is no error, the return value is UNZ_OK. 00256 */ 00257 00258 extern int ZEXPORT UA_unzOpenCurrentFilePassword OF((unzFile file, 00259 const char* password)); 00260 /* 00261 Open for reading data the current file in the zipfile. 00262 password is a crypting password 00263 If there is no error, the return value is UNZ_OK. 00264 */ 00265 00266 extern int ZEXPORT UA_unzOpenCurrentFile2 OF((unzFile file, 00267 int* method, 00268 int* level, 00269 int raw)); 00270 /* 00271 Same than UA_unzOpenCurrentFile, but open for read raw the file (not uncompress) 00272 if raw==1 00273 *method will receive method of compression, *level will receive level of 00274 compression 00275 note : you can set level parameter as NULL (if you did not want known level, 00276 but you CANNOT set method parameter as NULL 00277 */ 00278 00279 extern int ZEXPORT UA_unzOpenCurrentFile3 OF((unzFile file, 00280 int* method, 00281 int* level, 00282 int raw, 00283 const char* password)); 00284 /* 00285 Same than UA_unzOpenCurrentFile, but open for read raw the file (not uncompress) 00286 if raw==1 00287 *method will receive method of compression, *level will receive level of 00288 compression 00289 note : you can set level parameter as NULL (if you did not want known level, 00290 but you CANNOT set method parameter as NULL 00291 */ 00292 00293 00294 extern int ZEXPORT UA_unzCloseCurrentFile OF((unzFile file)); 00295 /* 00296 Close the file in zip opened with UA_unzOpenCurrentFile 00297 Return UNZ_CRCERROR if all the file was read but the CRC is not good 00298 */ 00299 00300 extern int ZEXPORT UA_unzReadCurrentFile OF((unzFile file, 00301 voidp buf, 00302 unsigned len)); 00303 /* 00304 Read bytes from the current file (opened by UA_unzOpenCurrentFile) 00305 buf contain buffer where data must be copied 00306 len the size of buf. 00307 00308 return the number of byte copied if somes bytes are copied 00309 return 0 if the end of file was reached 00310 return <0 with error code if there is an error 00311 (UNZ_ERRNO for IO error, or zLib error for uncompress error) 00312 */ 00313 00314 extern z_off_t ZEXPORT UA_unztell OF((unzFile file)); 00315 /* 00316 Give the current position in uncompressed data 00317 */ 00318 00319 extern int ZEXPORT UA_unzeof OF((unzFile file)); 00320 /* 00321 return 1 if the end of file was reached, 0 elsewhere 00322 */ 00323 00324 extern int ZEXPORT UA_unzGetLocalExtrafield OF((unzFile file, 00325 voidp buf, 00326 unsigned len)); 00327 /* 00328 Read extra field from the current file (opened by UA_unzOpenCurrentFile) 00329 This is the local-header version of the extra field (sometimes, there is 00330 more info in the local-header version than in the central-header) 00331 00332 if buf==NULL, it return the size of the local extra field 00333 00334 if buf!=NULL, len is the size of the buffer, the extra header is copied in 00335 buf. 00336 the return value is the number of bytes copied in buf, or (if <0) 00337 the error code 00338 */ 00339 00340 /***************************************************************************/ 00341 00342 /* Get the current file offset */ 00343 extern uLong ZEXPORT UA_unzGetOffset (unzFile file); 00344 00345 /* Set the current file offset */ 00346 extern int ZEXPORT UA_unzSetOffset (unzFile file, uLong pos); 00347 00348 00349 00350 #ifdef __cplusplus 00351 } 00352 #endif 00353 00354 #endif /* _unz_H */