cpl_minizip_zip.h

00001 /******************************************************************************
00002  * $Id: cpl_minizip_zip.h 20794 2010-10-08 16:58:27Z warmerdam $
00003  *
00004  * Project:  CPL - Common Portability Library
00005  * Author:   Frank Warmerdam, warmerdam@pobox.com
00006  * Purpose:  Adjusted minizip "zip.h" include file for zip services.
00007  *
00008  * Modified version by Even Rouault. :
00009  *   - Decoration of symbol names unz* -> cpl_unz*
00010  *   - Undef EXPORT so that we are sure the symbols are not exported
00011  *   - Remove old C style function prototypes
00012  *   - Added CPL* simplified API at bottom.
00013  *
00014  *   Original licence available in port/LICENCE_minizip
00015  *
00016  *****************************************************************************/
00017 
00018 /* zip.h -- IO for compress .zip files using zlib
00019    Version 1.01e, February 12th, 2005
00020 
00021    Copyright (C) 1998-2005 Gilles Vollant
00022 
00023    This unzip package allow creates .ZIP file, compatible with PKZip 2.04g
00024      WinZip, InfoZip tools and compatible.
00025    Multi volume ZipFile (span) are not supported.
00026    Encryption compatible with pkzip 2.04g only supported
00027    Old compressions used by old PKZip 1.x are not supported
00028 
00029   For uncompress .zip file, look at unzip.h
00030 
00031 
00032    I WAIT FEEDBACK at mail info@winimage.com
00033    Visit also http://www.winimage.com/zLibDll/unzip.html for evolution
00034 
00035    Condition of use and distribution are the same than zlib :
00036 
00037   This software is provided 'as-is', without any express or implied
00038   warranty.  In no event will the authors be held liable for any damages
00039   arising from the use of this software.
00040 
00041   Permission is granted to anyone to use this software for any purpose,
00042   including commercial applications, and to alter it and redistribute it
00043   freely, subject to the following restrictions:
00044 
00045   1. The origin of this software must not be misrepresented; you must not
00046      claim that you wrote the original software. If you use this software
00047      in a product, an acknowledgment in the product documentation would be
00048      appreciated but is not required.
00049   2. Altered source versions must be plainly marked as such, and must not be
00050      misrepresented as being the original software.
00051   3. This notice may not be removed or altered from any source distribution.
00052 
00053 
00054 */
00055 
00056 /* for more info about .ZIP format, see
00057       http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip
00058       http://www.info-zip.org/pub/infozip/doc/
00059    PkWare has also a specification at :
00060       ftp://ftp.pkware.com/probdesc.zip
00061 */
00062 
00063 #ifndef CPL_MINIZIP_ZIP_H_INCLUDED
00064 #define CPL_MINIZIP_ZIP_H_INCLUDED
00065 
00066 #include "cpl_vsi.h"
00067 #define uLong64 vsi_l_offset
00068 
00069 #ifdef __cplusplus
00070 extern "C" {
00071 #endif
00072 
00073 #ifndef _ZLIB_H
00074 #include "zlib.h"
00075 #endif
00076 
00077 #ifndef CPL_MINIZIP_IOAPI_H_INCLUDED
00078 #include "cpl_minizip_ioapi.h"
00079 #endif
00080 
00081 #define NOCRYPT
00082 #undef ZEXPORT
00083 #define ZEXPORT
00084 
00085 #if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
00086 /* like the STRICT of WIN32, we define a pointer that cannot be converted
00087     from (void*) without cast */
00088 typedef struct TagzipFile__ { int unused; } zipFile__;
00089 typedef zipFile__ *zipFile;
00090 #else
00091 typedef voidp zipFile;
00092 #endif
00093 
00094 #define ZIP_OK                          (0)
00095 #define ZIP_EOF                         (0)
00096 #define ZIP_ERRNO                       (Z_ERRNO)
00097 #define ZIP_PARAMERROR                  (-102)
00098 #define ZIP_BADZIPFILE                  (-103)
00099 #define ZIP_INTERNALERROR               (-104)
00100 
00101 #ifndef DEF_MEM_LEVEL
00102 #  if MAX_MEM_LEVEL >= 8
00103 #    define DEF_MEM_LEVEL 8
00104 #  else
00105 #    define DEF_MEM_LEVEL  MAX_MEM_LEVEL
00106 #  endif
00107 #endif
00108 /* default memLevel */
00109 
00110 /* tm_zip contain date/time info */
00111 typedef struct tm_zip_s
00112 {
00113     uInt tm_sec;            /* seconds after the minute - [0,59] */
00114     uInt tm_min;            /* minutes after the hour - [0,59] */
00115     uInt tm_hour;           /* hours since midnight - [0,23] */
00116     uInt tm_mday;           /* day of the month - [1,31] */
00117     uInt tm_mon;            /* months since January - [0,11] */
00118     uInt tm_year;           /* years - [1980..2044] */
00119 } tm_zip;
00120 
00121 typedef struct
00122 {
00123     tm_zip      tmz_date;       /* date in understandable format           */
00124     uLong       dosDate;       /* if dos_date == 0, tmu_date is used      */
00125 /*    uLong       flag;        */   /* general purpose bit flag        2 bytes */
00126 
00127     uLong       internal_fa;    /* internal file attributes        2 bytes */
00128     uLong       external_fa;    /* external file attributes        4 bytes */
00129 } zip_fileinfo;
00130 
00131 typedef const char* zipcharpc;
00132 
00133 
00134 #define APPEND_STATUS_CREATE        (0)
00135 #define APPEND_STATUS_CREATEAFTER   (1)
00136 #define APPEND_STATUS_ADDINZIP      (2)
00137 
00138 extern zipFile ZEXPORT cpl_zipOpen OF((const char *pathname, int append));
00139 /*
00140   Create a zipfile.
00141      pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
00142        an Unix computer "zlib/zlib113.zip".
00143      if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
00144        will be created at the end of the file.
00145          (useful if the file contain a self extractor code)
00146      if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will
00147        add files in existing zip (be sure you don't add file that doesn't exist)
00148      If the zipfile cannot be opened, the return value is NULL.
00149      Else, the return value is a zipFile Handle, usable with other function
00150        of this zip package.
00151 */
00152 
00153 /* Note : there is no delete function into a zipfile.
00154    If you want delete file into a zipfile, you must open a zipfile, and create another
00155    Of couse, you can use RAW reading and writing to copy the file you did not want delte
00156 */
00157 
00158 extern zipFile ZEXPORT cpl_zipOpen2 OF((const char *pathname,
00159                                    int append,
00160                                    zipcharpc* globalcomment,
00161                                    zlib_filefunc_def* pzlib_filefunc_def));
00162 
00163 extern int ZEXPORT cpl_zipOpenNewFileInZip OF((zipFile file,
00164                        const char* filename,
00165                        const zip_fileinfo* zipfi,
00166                        const void* extrafield_local,
00167                        uInt size_extrafield_local,
00168                        const void* extrafield_global,
00169                        uInt size_extrafield_global,
00170                        const char* comment,
00171                        int method,
00172                        int level));
00173 /*
00174   Open a file in the ZIP for writing.
00175   filename : the filename in zip (if NULL, '-' without quote will be used
00176   *zipfi contain supplemental information
00177   if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
00178     contains the extrafield data the the local header
00179   if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
00180     contains the extrafield data the the local header
00181   if comment != NULL, comment contain the comment string
00182   method contain the compression method (0 for store, Z_DEFLATED for deflate)
00183   level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
00184 */
00185 
00186 
00187 extern int ZEXPORT cpl_zipOpenNewFileInZip2 OF((zipFile file,
00188                                             const char* filename,
00189                                             const zip_fileinfo* zipfi,
00190                                             const void* extrafield_local,
00191                                             uInt size_extrafield_local,
00192                                             const void* extrafield_global,
00193                                             uInt size_extrafield_global,
00194                                             const char* comment,
00195                                             int method,
00196                                             int level,
00197                                             int raw));
00198 
00199 /*
00200   Same than zipOpenNewFileInZip, except if raw=1, we write raw file
00201  */
00202 
00203 extern int ZEXPORT cpl_zipOpenNewFileInZip3 OF((zipFile file,
00204                                             const char* filename,
00205                                             const zip_fileinfo* zipfi,
00206                                             const void* extrafield_local,
00207                                             uInt size_extrafield_local,
00208                                             const void* extrafield_global,
00209                                             uInt size_extrafield_global,
00210                                             const char* comment,
00211                                             int method,
00212                                             int level,
00213                                             int raw,
00214                                             int windowBits,
00215                                             int memLevel,
00216                                             int strategy,
00217                                             const char* password,
00218                                             uLong crcForCtypting));
00219 
00220 /*
00221   Same than zipOpenNewFileInZip2, except
00222     windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
00223     password : crypting password (NULL for no crypting)
00224     crcForCtypting : crc of file to compress (needed for crypting)
00225  */
00226 
00227 
00228 extern int ZEXPORT cpl_zipWriteInFileInZip OF((zipFile file,
00229                        const void* buf,
00230                        unsigned len));
00231 /*
00232   Write data in the zipfile
00233 */
00234 
00235 extern int ZEXPORT cpl_zipCloseFileInZip OF((zipFile file));
00236 /*
00237   Close the current file in the zipfile
00238 */
00239 
00240 extern int ZEXPORT cpl_zipCloseFileInZipRaw OF((zipFile file,
00241                                             uLong uncompressed_size,
00242                                             uLong crc32));
00243 /*
00244   Close the current file in the zipfile, for fiel opened with
00245     parameter raw=1 in zipOpenNewFileInZip2
00246   uncompressed_size and crc32 are value for the uncompressed size
00247 */
00248 
00249 extern int ZEXPORT cpl_zipClose OF((zipFile file,
00250                 const char* global_comment));
00251 /*
00252   Close the zipfile
00253 */
00254 
00255 #ifdef __cplusplus
00256 }
00257 #endif
00258 
00259 #endif /* _zip_H */

Generated for GDAL by doxygen 1.7.1.