GDAL
cpl_minizip_zip.h
1 /******************************************************************************
2  * $Id$
3  *
4  * Project: CPL - Common Portability Library
5  * Author: Frank Warmerdam, warmerdam@pobox.com
6  * Purpose: Adjusted minizip "zip.h" include file for zip services.
7  *
8  * Modified version by Even Rouault. :
9  * - Decoration of symbol names unz* -> cpl_unz*
10  * - Undef EXPORT so that we are sure the symbols are not exported
11  * - Remove old C style function prototypes
12  * - Added CPL* simplified API at bottom.
13  *
14  * Original licence available in port/LICENCE_minizip
15  *
16  *****************************************************************************/
17 
18 /* zip.h -- IO for compress .zip files using zlib
19  Version 1.01e, February 12th, 2005
20 
21  Copyright (C) 1998-2005 Gilles Vollant
22 
23  This unzip package allow creates .ZIP file, compatible with PKZip 2.04g
24  WinZip, InfoZip tools and compatible.
25  Multi volume ZipFile (span) are not supported.
26  Encryption compatible with pkzip 2.04g only supported
27  Old compressions used by old PKZip 1.x are not supported
28 
29  For uncompress .zip file, look at unzip.h
30 
31  I WAIT FEEDBACK at mail info@winimage.com
32  Visit also http://www.winimage.com/zLibDll/unzip.html for evolution
33 
34  Condition of use and distribution are the same than zlib :
35 
36  This software is provided 'as-is', without any express or implied
37  warranty. In no event will the authors be held liable for any damages
38  arising from the use of this software.
39 
40  Permission is granted to anyone to use this software for any purpose,
41  including commercial applications, and to alter it and redistribute it
42  freely, subject to the following restrictions:
43 
44  1. The origin of this software must not be misrepresented; you must not
45  claim that you wrote the original software. If you use this software
46  in a product, an acknowledgment in the product documentation would be
47  appreciated but is not required.
48  2. Altered source versions must be plainly marked as such, and must not be
49  misrepresented as being the original software.
50  3. This notice may not be removed or altered from any source distribution.
51 */
52 
53 /* for more info about .ZIP format, see
54  http://www.info-zip.org/pub/infozip/doc/appnote-981119-iz.zip
55  http://www.info-zip.org/pub/infozip/doc/
56  PkWare has also a specification at :
57  ftp://ftp.pkware.com/probdesc.zip
58 */
59 
60 #ifndef CPL_MINIZIP_ZIP_H_INCLUDED
61 #define CPL_MINIZIP_ZIP_H_INCLUDED
62 
63 #ifndef DOXYGEN_SKIP
64 
65 #include "cpl_vsi.h"
66 #define uLong64 vsi_l_offset
67 typedef vsi_l_offset ZPOS64_T;
68 
69 #ifdef __cplusplus
70 extern "C"
71 {
72 #endif
73 
74 #ifndef _ZLIB_H
75 #include "cpl_zlib_header.h" // to avoid warnings when including zlib.h
76 #endif
77 
78 #ifndef CPL_MINIZIP_IOAPI_H_INCLUDED
79 #include "cpl_minizip_ioapi.h"
80 #endif
81 
82 #include <stdbool.h>
83 
84 #define NOCRYPT
85 #undef ZEXPORT
86 #define ZEXPORT
87 
88 #if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
89  /* like the STRICT of WIN32, we define a pointer that cannot be converted
90  from (void*) without cast */
91  typedef struct TagzipFile__
92  {
93  int unused;
94  } zipFile__;
95  typedef zipFile__ *zipFile;
96 #else
97 typedef voidp zipFile;
98 #endif
99 
100 #define ZIP_OK (0)
101 #define ZIP_EOF (0)
102 #define ZIP_ERRNO (Z_ERRNO)
103 #define ZIP_PARAMERROR (-102)
104 #define ZIP_BADZIPFILE (-103)
105 #define ZIP_INTERNALERROR (-104)
106 
107 #ifndef DEF_MEM_LEVEL
108 #if MAX_MEM_LEVEL >= 8
109 #define DEF_MEM_LEVEL 8
110 #else
111 #define DEF_MEM_LEVEL MAX_MEM_LEVEL
112 #endif
113 #endif
114  /* default memLevel */
115 
116  /* tm_zip contain date/time info */
117  typedef struct tm_zip_s
118  {
119  uInt tm_sec; /* seconds after the minute - [0,59] */
120  uInt tm_min; /* minutes after the hour - [0,59] */
121  uInt tm_hour; /* hours since midnight - [0,23] */
122  uInt tm_mday; /* day of the month - [1,31] */
123  uInt tm_mon; /* months since January - [0,11] */
124  uInt tm_year; /* years - [1980..2044] */
125  } tm_zip;
126 
127  typedef struct
128  {
129  tm_zip tmz_date; /* date in understandable format */
130  uLong dosDate; /* if dos_date == 0, tmu_date is used */
131  /* uLong flag; */ /* general purpose bit flag 2
132  bytes */
133 
134  uLong internal_fa; /* internal file attributes 2 bytes */
135  uLong external_fa; /* external file attributes 4 bytes */
136  } zip_fileinfo;
137 
138  typedef const char *zipcharpc;
139 
140 #define APPEND_STATUS_CREATE (0)
141 #define APPEND_STATUS_CREATEAFTER (1)
142 #define APPEND_STATUS_ADDINZIP (2)
143 
144  extern zipFile ZEXPORT cpl_zipOpen(const char *pathname, int append);
145  /*
146  Create a zipfile.
147  pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip"
148  or on an Unix computer "zlib/zlib113.zip". if the file pathname exist and
149  append==APPEND_STATUS_CREATEAFTER, the zip will be created at the end of
150  the file. (useful if the file contain a self extractor code) if the file
151  pathname exist and append==APPEND_STATUS_ADDINZIP, we will add files in
152  existing zip (be sure you don't add file that doesn't exist) If the
153  zipfile cannot be opened, the return value is NULL. Else, the return value
154  is a zipFile Handle, usable with other function of this zip package.
155  */
156 
157  /* Note : there is no delete function for a zipfile.
158  If you want delete file in a zipfile, you must open a zipfile, and create
159  another. Of course, you can use RAW reading and writing to copy the file
160  you did not want delete.
161  */
162 
163  extern zipFile ZEXPORT cpl_zipOpen2(const char *pathname, int append,
164  zipcharpc *globalcomment,
165  zlib_filefunc_def *pzlib_filefunc_def);
166 
167  extern int ZEXPORT cpl_zipOpenNewFileInZip(
168  zipFile file, const char *filename, const zip_fileinfo *zipfi,
169  const void *extrafield_local, uInt size_extrafield_local,
170  const void *extrafield_global, uInt size_extrafield_global,
171  const char *comment, int method, int level);
172  /*
173  Open a file in the ZIP for writing.
174  filename : the filename in zip (if NULL, '-' without quote will be used
175  *zipfi contain supplemental information
176  if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
177  contains the extrafield data the local header
178  if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
179  contains the extrafield data the local header
180  if comment != NULL, comment contain the comment string
181  method contain the compression method (0 for store, Z_DEFLATED for
182  deflate) level contain the level of compression (can be
183  Z_DEFAULT_COMPRESSION)
184  */
185 
186  extern int ZEXPORT cpl_zipOpenNewFileInZip2(
187  zipFile file, const char *filename, const zip_fileinfo *zipfi,
188  const void *extrafield_local, uInt size_extrafield_local,
189  const void *extrafield_global, uInt size_extrafield_global,
190  const char *comment, int method, int level, int raw);
191 
192  /*
193  Same than zipOpenNewFileInZip, except if raw=1, we write raw file
194  */
195 
196  extern int ZEXPORT cpl_zipOpenNewFileInZip3(
197  zipFile file, const char *filename, const zip_fileinfo *zipfi,
198  const void *extrafield_local, uInt size_extrafield_local,
199  const void *extrafield_global, uInt size_extrafield_global,
200  const char *comment, int method, int level, int raw, int windowBits,
201  int memLevel, int strategy, const char *password, uLong crcForCtypting,
202  bool bZip64, bool bIncludeInCentralDirectory);
203 
204  /*
205  Same than zipOpenNewFileInZip2, except
206  windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
207  password : crypting password (NULL for no crypting)
208  crcForCtypting : crc of file to compress (needed for crypting)
209  */
210 
211  extern int ZEXPORT cpl_zipWriteInFileInZip(zipFile file, const void *buf,
212  unsigned len);
213  /*
214  Write data in the zipfile
215  */
216 
217  extern int ZEXPORT cpl_zipCloseFileInZip(zipFile file);
218  /*
219  Close the current file in the zipfile
220  */
221 
222  extern int ZEXPORT cpl_zipCloseFileInZipRaw(zipFile file,
223  ZPOS64_T uncompressed_size,
224  uLong crc32);
225  /*
226  Close the current file in the zipfile, for file opened with
227  parameter raw=1 in zipOpenNewFileInZip2
228  uncompressed_size and crc32 are value for the uncompressed size
229  */
230 
231  extern int ZEXPORT cpl_zipClose(zipFile file, const char *global_comment);
232  /*
233  Close the zipfile
234  */
235 
236 #ifdef __cplusplus
237 }
238 #endif
239 
240 #endif /* #ifndef DOXYGEN_SKIP */
241 
242 #endif /* _zip_H */
cpl_vsi.h
vsi_l_offset
GUIntBig vsi_l_offset
Type for a file offset.
Definition: cpl_vsi.h:146