packvfs

annotate test/zipcat/src/minizip/zip.h @ 3:ef6c1472607f

jesus fucking christ that was easy... written a test prog "zipcat" to try out zlib's contrib library "minizip", to list and read files out of zip archives directly...
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 04 Nov 2013 06:46:17 +0200
parents
children
rev   line source
nuclear@3 1 /* zip.h -- IO on .zip files using zlib
nuclear@3 2 Version 1.1, February 14h, 2010
nuclear@3 3 part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
nuclear@3 4
nuclear@3 5 Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
nuclear@3 6
nuclear@3 7 Modifications for Zip64 support
nuclear@3 8 Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
nuclear@3 9
nuclear@3 10 For more info read MiniZip_info.txt
nuclear@3 11
nuclear@3 12 ---------------------------------------------------------------------------
nuclear@3 13
nuclear@3 14 Condition of use and distribution are the same than zlib :
nuclear@3 15
nuclear@3 16 This software is provided 'as-is', without any express or implied
nuclear@3 17 warranty. In no event will the authors be held liable for any damages
nuclear@3 18 arising from the use of this software.
nuclear@3 19
nuclear@3 20 Permission is granted to anyone to use this software for any purpose,
nuclear@3 21 including commercial applications, and to alter it and redistribute it
nuclear@3 22 freely, subject to the following restrictions:
nuclear@3 23
nuclear@3 24 1. The origin of this software must not be misrepresented; you must not
nuclear@3 25 claim that you wrote the original software. If you use this software
nuclear@3 26 in a product, an acknowledgment in the product documentation would be
nuclear@3 27 appreciated but is not required.
nuclear@3 28 2. Altered source versions must be plainly marked as such, and must not be
nuclear@3 29 misrepresented as being the original software.
nuclear@3 30 3. This notice may not be removed or altered from any source distribution.
nuclear@3 31
nuclear@3 32 ---------------------------------------------------------------------------
nuclear@3 33
nuclear@3 34 Changes
nuclear@3 35
nuclear@3 36 See header of zip.h
nuclear@3 37
nuclear@3 38 */
nuclear@3 39
nuclear@3 40 #ifndef _zip12_H
nuclear@3 41 #define _zip12_H
nuclear@3 42
nuclear@3 43 #ifdef __cplusplus
nuclear@3 44 extern "C" {
nuclear@3 45 #endif
nuclear@3 46
nuclear@3 47 //#define HAVE_BZIP2
nuclear@3 48
nuclear@3 49 #ifndef _ZLIB_H
nuclear@3 50 #include "zlib.h"
nuclear@3 51 #endif
nuclear@3 52
nuclear@3 53 #ifndef _ZLIBIOAPI_H
nuclear@3 54 #include "ioapi.h"
nuclear@3 55 #endif
nuclear@3 56
nuclear@3 57 #ifdef HAVE_BZIP2
nuclear@3 58 #include "bzlib.h"
nuclear@3 59 #endif
nuclear@3 60
nuclear@3 61 #define Z_BZIP2ED 12
nuclear@3 62
nuclear@3 63 #if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
nuclear@3 64 /* like the STRICT of WIN32, we define a pointer that cannot be converted
nuclear@3 65 from (void*) without cast */
nuclear@3 66 typedef struct TagzipFile__ { int unused; } zipFile__;
nuclear@3 67 typedef zipFile__ *zipFile;
nuclear@3 68 #else
nuclear@3 69 typedef voidp zipFile;
nuclear@3 70 #endif
nuclear@3 71
nuclear@3 72 #define ZIP_OK (0)
nuclear@3 73 #define ZIP_EOF (0)
nuclear@3 74 #define ZIP_ERRNO (Z_ERRNO)
nuclear@3 75 #define ZIP_PARAMERROR (-102)
nuclear@3 76 #define ZIP_BADZIPFILE (-103)
nuclear@3 77 #define ZIP_INTERNALERROR (-104)
nuclear@3 78
nuclear@3 79 #ifndef DEF_MEM_LEVEL
nuclear@3 80 # if MAX_MEM_LEVEL >= 8
nuclear@3 81 # define DEF_MEM_LEVEL 8
nuclear@3 82 # else
nuclear@3 83 # define DEF_MEM_LEVEL MAX_MEM_LEVEL
nuclear@3 84 # endif
nuclear@3 85 #endif
nuclear@3 86 /* default memLevel */
nuclear@3 87
nuclear@3 88 /* tm_zip contain date/time info */
nuclear@3 89 typedef struct tm_zip_s
nuclear@3 90 {
nuclear@3 91 uInt tm_sec; /* seconds after the minute - [0,59] */
nuclear@3 92 uInt tm_min; /* minutes after the hour - [0,59] */
nuclear@3 93 uInt tm_hour; /* hours since midnight - [0,23] */
nuclear@3 94 uInt tm_mday; /* day of the month - [1,31] */
nuclear@3 95 uInt tm_mon; /* months since January - [0,11] */
nuclear@3 96 uInt tm_year; /* years - [1980..2044] */
nuclear@3 97 } tm_zip;
nuclear@3 98
nuclear@3 99 typedef struct
nuclear@3 100 {
nuclear@3 101 tm_zip tmz_date; /* date in understandable format */
nuclear@3 102 uLong dosDate; /* if dos_date == 0, tmu_date is used */
nuclear@3 103 /* uLong flag; */ /* general purpose bit flag 2 bytes */
nuclear@3 104
nuclear@3 105 uLong internal_fa; /* internal file attributes 2 bytes */
nuclear@3 106 uLong external_fa; /* external file attributes 4 bytes */
nuclear@3 107 } zip_fileinfo;
nuclear@3 108
nuclear@3 109 typedef const char* zipcharpc;
nuclear@3 110
nuclear@3 111
nuclear@3 112 #define APPEND_STATUS_CREATE (0)
nuclear@3 113 #define APPEND_STATUS_CREATEAFTER (1)
nuclear@3 114 #define APPEND_STATUS_ADDINZIP (2)
nuclear@3 115
nuclear@3 116 extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
nuclear@3 117 extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));
nuclear@3 118 /*
nuclear@3 119 Create a zipfile.
nuclear@3 120 pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
nuclear@3 121 an Unix computer "zlib/zlib113.zip".
nuclear@3 122 if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
nuclear@3 123 will be created at the end of the file.
nuclear@3 124 (useful if the file contain a self extractor code)
nuclear@3 125 if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will
nuclear@3 126 add files in existing zip (be sure you don't add file that doesn't exist)
nuclear@3 127 If the zipfile cannot be opened, the return value is NULL.
nuclear@3 128 Else, the return value is a zipFile Handle, usable with other function
nuclear@3 129 of this zip package.
nuclear@3 130 */
nuclear@3 131
nuclear@3 132 /* Note : there is no delete function into a zipfile.
nuclear@3 133 If you want delete file into a zipfile, you must open a zipfile, and create another
nuclear@3 134 Of couse, you can use RAW reading and writing to copy the file you did not want delte
nuclear@3 135 */
nuclear@3 136
nuclear@3 137 extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
nuclear@3 138 int append,
nuclear@3 139 zipcharpc* globalcomment,
nuclear@3 140 zlib_filefunc_def* pzlib_filefunc_def));
nuclear@3 141
nuclear@3 142 extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
nuclear@3 143 int append,
nuclear@3 144 zipcharpc* globalcomment,
nuclear@3 145 zlib_filefunc64_def* pzlib_filefunc_def));
nuclear@3 146
nuclear@3 147 extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
nuclear@3 148 const char* filename,
nuclear@3 149 const zip_fileinfo* zipfi,
nuclear@3 150 const void* extrafield_local,
nuclear@3 151 uInt size_extrafield_local,
nuclear@3 152 const void* extrafield_global,
nuclear@3 153 uInt size_extrafield_global,
nuclear@3 154 const char* comment,
nuclear@3 155 int method,
nuclear@3 156 int level));
nuclear@3 157
nuclear@3 158 extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
nuclear@3 159 const char* filename,
nuclear@3 160 const zip_fileinfo* zipfi,
nuclear@3 161 const void* extrafield_local,
nuclear@3 162 uInt size_extrafield_local,
nuclear@3 163 const void* extrafield_global,
nuclear@3 164 uInt size_extrafield_global,
nuclear@3 165 const char* comment,
nuclear@3 166 int method,
nuclear@3 167 int level,
nuclear@3 168 int zip64));
nuclear@3 169
nuclear@3 170 /*
nuclear@3 171 Open a file in the ZIP for writing.
nuclear@3 172 filename : the filename in zip (if NULL, '-' without quote will be used
nuclear@3 173 *zipfi contain supplemental information
nuclear@3 174 if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
nuclear@3 175 contains the extrafield data the the local header
nuclear@3 176 if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
nuclear@3 177 contains the extrafield data the the local header
nuclear@3 178 if comment != NULL, comment contain the comment string
nuclear@3 179 method contain the compression method (0 for store, Z_DEFLATED for deflate)
nuclear@3 180 level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
nuclear@3 181 zip64 is set to 1 if a zip64 extended information block should be added to the local file header.
nuclear@3 182 this MUST be '1' if the uncompressed size is >= 0xffffffff.
nuclear@3 183
nuclear@3 184 */
nuclear@3 185
nuclear@3 186
nuclear@3 187 extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
nuclear@3 188 const char* filename,
nuclear@3 189 const zip_fileinfo* zipfi,
nuclear@3 190 const void* extrafield_local,
nuclear@3 191 uInt size_extrafield_local,
nuclear@3 192 const void* extrafield_global,
nuclear@3 193 uInt size_extrafield_global,
nuclear@3 194 const char* comment,
nuclear@3 195 int method,
nuclear@3 196 int level,
nuclear@3 197 int raw));
nuclear@3 198
nuclear@3 199
nuclear@3 200 extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,
nuclear@3 201 const char* filename,
nuclear@3 202 const zip_fileinfo* zipfi,
nuclear@3 203 const void* extrafield_local,
nuclear@3 204 uInt size_extrafield_local,
nuclear@3 205 const void* extrafield_global,
nuclear@3 206 uInt size_extrafield_global,
nuclear@3 207 const char* comment,
nuclear@3 208 int method,
nuclear@3 209 int level,
nuclear@3 210 int raw,
nuclear@3 211 int zip64));
nuclear@3 212 /*
nuclear@3 213 Same than zipOpenNewFileInZip, except if raw=1, we write raw file
nuclear@3 214 */
nuclear@3 215
nuclear@3 216 extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
nuclear@3 217 const char* filename,
nuclear@3 218 const zip_fileinfo* zipfi,
nuclear@3 219 const void* extrafield_local,
nuclear@3 220 uInt size_extrafield_local,
nuclear@3 221 const void* extrafield_global,
nuclear@3 222 uInt size_extrafield_global,
nuclear@3 223 const char* comment,
nuclear@3 224 int method,
nuclear@3 225 int level,
nuclear@3 226 int raw,
nuclear@3 227 int windowBits,
nuclear@3 228 int memLevel,
nuclear@3 229 int strategy,
nuclear@3 230 const char* password,
nuclear@3 231 uLong crcForCrypting));
nuclear@3 232
nuclear@3 233 extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
nuclear@3 234 const char* filename,
nuclear@3 235 const zip_fileinfo* zipfi,
nuclear@3 236 const void* extrafield_local,
nuclear@3 237 uInt size_extrafield_local,
nuclear@3 238 const void* extrafield_global,
nuclear@3 239 uInt size_extrafield_global,
nuclear@3 240 const char* comment,
nuclear@3 241 int method,
nuclear@3 242 int level,
nuclear@3 243 int raw,
nuclear@3 244 int windowBits,
nuclear@3 245 int memLevel,
nuclear@3 246 int strategy,
nuclear@3 247 const char* password,
nuclear@3 248 uLong crcForCrypting,
nuclear@3 249 int zip64
nuclear@3 250 ));
nuclear@3 251
nuclear@3 252 /*
nuclear@3 253 Same than zipOpenNewFileInZip2, except
nuclear@3 254 windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
nuclear@3 255 password : crypting password (NULL for no crypting)
nuclear@3 256 crcForCrypting : crc of file to compress (needed for crypting)
nuclear@3 257 */
nuclear@3 258
nuclear@3 259 extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
nuclear@3 260 const char* filename,
nuclear@3 261 const zip_fileinfo* zipfi,
nuclear@3 262 const void* extrafield_local,
nuclear@3 263 uInt size_extrafield_local,
nuclear@3 264 const void* extrafield_global,
nuclear@3 265 uInt size_extrafield_global,
nuclear@3 266 const char* comment,
nuclear@3 267 int method,
nuclear@3 268 int level,
nuclear@3 269 int raw,
nuclear@3 270 int windowBits,
nuclear@3 271 int memLevel,
nuclear@3 272 int strategy,
nuclear@3 273 const char* password,
nuclear@3 274 uLong crcForCrypting,
nuclear@3 275 uLong versionMadeBy,
nuclear@3 276 uLong flagBase
nuclear@3 277 ));
nuclear@3 278
nuclear@3 279
nuclear@3 280 extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
nuclear@3 281 const char* filename,
nuclear@3 282 const zip_fileinfo* zipfi,
nuclear@3 283 const void* extrafield_local,
nuclear@3 284 uInt size_extrafield_local,
nuclear@3 285 const void* extrafield_global,
nuclear@3 286 uInt size_extrafield_global,
nuclear@3 287 const char* comment,
nuclear@3 288 int method,
nuclear@3 289 int level,
nuclear@3 290 int raw,
nuclear@3 291 int windowBits,
nuclear@3 292 int memLevel,
nuclear@3 293 int strategy,
nuclear@3 294 const char* password,
nuclear@3 295 uLong crcForCrypting,
nuclear@3 296 uLong versionMadeBy,
nuclear@3 297 uLong flagBase,
nuclear@3 298 int zip64
nuclear@3 299 ));
nuclear@3 300 /*
nuclear@3 301 Same than zipOpenNewFileInZip4, except
nuclear@3 302 versionMadeBy : value for Version made by field
nuclear@3 303 flag : value for flag field (compression level info will be added)
nuclear@3 304 */
nuclear@3 305
nuclear@3 306
nuclear@3 307 extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
nuclear@3 308 const void* buf,
nuclear@3 309 unsigned len));
nuclear@3 310 /*
nuclear@3 311 Write data in the zipfile
nuclear@3 312 */
nuclear@3 313
nuclear@3 314 extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
nuclear@3 315 /*
nuclear@3 316 Close the current file in the zipfile
nuclear@3 317 */
nuclear@3 318
nuclear@3 319 extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
nuclear@3 320 uLong uncompressed_size,
nuclear@3 321 uLong crc32));
nuclear@3 322
nuclear@3 323 extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
nuclear@3 324 ZPOS64_T uncompressed_size,
nuclear@3 325 uLong crc32));
nuclear@3 326
nuclear@3 327 /*
nuclear@3 328 Close the current file in the zipfile, for file opened with
nuclear@3 329 parameter raw=1 in zipOpenNewFileInZip2
nuclear@3 330 uncompressed_size and crc32 are value for the uncompressed size
nuclear@3 331 */
nuclear@3 332
nuclear@3 333 extern int ZEXPORT zipClose OF((zipFile file,
nuclear@3 334 const char* global_comment));
nuclear@3 335 /*
nuclear@3 336 Close the zipfile
nuclear@3 337 */
nuclear@3 338
nuclear@3 339
nuclear@3 340 extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));
nuclear@3 341 /*
nuclear@3 342 zipRemoveExtraInfoBlock - Added by Mathias Svensson
nuclear@3 343
nuclear@3 344 Remove extra information block from a extra information data for the local file header or central directory header
nuclear@3 345
nuclear@3 346 It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.
nuclear@3 347
nuclear@3 348 0x0001 is the signature header for the ZIP64 extra information blocks
nuclear@3 349
nuclear@3 350 usage.
nuclear@3 351 Remove ZIP64 Extra information from a central director extra field data
nuclear@3 352 zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001);
nuclear@3 353
nuclear@3 354 Remove ZIP64 Extra information from a Local File Header extra field data
nuclear@3 355 zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001);
nuclear@3 356 */
nuclear@3 357
nuclear@3 358 #ifdef __cplusplus
nuclear@3 359 }
nuclear@3 360 #endif
nuclear@3 361
nuclear@3 362 #endif /* _zip64_H */