libextractor  1.11
About: GNU libextractor is a library used to extract meta-data from files of arbitrary type.
  Fossies Dox: libextractor-1.11.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

unzip.h
Go to the documentation of this file.
1 /*
2  This file is part of libextractor.
3  Copyright (C) 2008, 2012 Christian Grothoff (and other contributing authors)
4 
5  libextractor is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published
7  by the Free Software Foundation; either version 3, or (at your
8  option) any later version.
9 
10  libextractor is distributed in the hope that it will be useful, but
11  WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with libextractor; see the file COPYING. If not, write to the
17  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  Boston, MA 02110-1301, USA.
19 */
20 /**
21  * @file common/unzip.h
22  * @brief API to access ZIP archives
23  * @author Christian Grothoff
24  *
25  * This code is based in part on
26  * unzip 1.00 Copyright 1998-2003 Gilles Vollant
27  * http://www.winimage.com/zLibDll"
28  */
29 #ifndef LE_COMMON_UNZIP_H
30 #define LE_COMMON_UNZIP_H
31 
32 #include <zlib.h>
33 
34 /**
35  * Operation was successful.
36  */
37 #define EXTRACTOR_UNZIP_OK (0)
38 
39 /**
40  * Cannot move to next file, we are at the end
41  */
42 #define EXTRACTOR_UNZIP_END_OF_LIST_OF_FILE (-100)
43 
44 /**
45  * IO error, see errno.
46  */
47 #define EXTRACTOR_UNZIP_ERRNO (Z_ERRNO)
48 
49 /**
50  * Reached end of the file (NOTE: same as OK!)
51  */
52 #define EXTRACTOR_UNZIP_EOF (0)
53 
54 /**
55  * Invalid arguments to call.
56  */
57 #define EXTRACTOR_UNZIP_PARAMERROR (-102)
58 
59 /**
60  * Not a zip file (or malformed)
61  */
62 #define EXTRACTOR_UNZIP_BADZIPFILE (-103)
63 
64 /**
65  * Internal error.
66  */
67 #define EXTRACTOR_UNZIP_INTERNALERROR (-104)
68 
69 /**
70  * Checksum failure.
71  */
72 #define EXTRACTOR_UNZIP_CRCERROR (-105)
73 
74 /**
75  * Handle for a ZIP archive.
76  */
77 struct EXTRACTOR_UnzipFile;
78 
79 
80 /**
81  * date/time information
82  */
84 {
85  /**
86  * seconds after the minute - [0,59]
87  */
88  uInt tm_sec;
89 
90  /**
91  * minutes after the hour - [0,59]
92  */
93  uInt tm_min;
94 
95  /**
96  * hours since midnight - [0,23]
97  */
98  uInt tm_hour;
99 
100  /**
101  * day of the month - [1,31]
102  */
103  uInt tm_mday;
104 
105  /**
106  * months since January - [0,11]
107  */
108  uInt tm_mon;
109 
110  /**
111  * years - [1980..2044]
112  */
113  uInt tm_year;
114 };
115 
116 
117 /**
118  * Information about a file in the zipfile
119  */
121 {
122  /**
123  * version made by 2 bytes
124  */
125  uLong version;
126 
127  /**
128  * version needed to extract 2 bytes
129  */
131 
132  /**
133  * general purpose bit flag 2 bytes
134  */
135  uLong flag;
136 
137  /**
138  * compression method 2 bytes
139  */
141 
142  /**
143  * last mod file date in Dos fmt 4 bytes
144  */
145  uLong dosDate;
146 
147  /**
148  * crc-32 4 bytes
149  */
150  uLong crc;
151 
152  /**
153  * compressed size 4 bytes
154  */
156 
157  /**
158  * uncompressed size 4 bytes
159  */
161 
162  /**
163  * filename length 2 bytes
164  */
166 
167  /**
168  * extra field length 2 bytes
169  */
171 
172  /**
173  * file comment length 2 bytes
174  */
176 
177  /**
178  * disk number start 2 bytes
179  */
181 
182  /**
183  * internal file attributes 2 bytes
184  */
185  uLong internal_fa;
186 
187  /**
188  * external file attributes 4 bytes
189  */
190  uLong external_fa;
191 
192  /**
193  * Time and date of last modification.
194  */
196 };
197 
198 
199 /**
200  * Open a zip file for processing using the data access
201  * functions from the extract context.
202  *
203  * @param ec extract context to use
204  * @return handle to zip data, NULL on error
205  */
206 struct EXTRACTOR_UnzipFile *
208 
209 
210 /**
211  * Obtain the global comment from a ZIP file.
212  *
213  * @param file unzip file to inspect
214  * @param comment where to copy the comment
215  * @param comment_len maximum number of bytes available in comment
216  * @return EXTRACTOR_UNZIP_OK on success
217  */
218 int
220  char *comment,
221  size_t comment_len);
222 
223 
224 /**
225  * Close a ZipFile.
226  *
227  * @param file zip file to close
228  * @return EXTRACTOR_UNZIP_OK if there is no problem.
229  */
230 int
232 
233 
234 /**
235  * Set the current file of the zipfile to the first file.
236  *
237  * @param file zipfile to manipulate
238  * @return UNZ_OK if there is no problem
239  */
240 int
242 
243 
244 /**
245  * Set the current file of the zipfile to the next file.
246  *
247  * @param file zipfile to manipulate
248  * @return EXTRACTOR_UNZIP_OK if there is no problem,
249  * EXTRACTOR_UNZIP_END_OF_LIST_OF_FILE if the actual file was the latest.
250  */
251 int
253 
254 
255 /**
256  * Try locate the file szFileName in the zipfile.
257  *
258  * @param file zipfile to manipulate
259  * @param szFileName name to find
260  * @param iCaseSensitivity, use 1 for case sensitivity (like strcmp);
261  * 2 for no case sensitivity (like strcmpi or strcasecmp); or
262  * 0 for defaut of your operating system (like 1 on Unix, 2 on Windows)
263  * @return EXTRACTOR_UNZIP_OK if the file is found. It becomes the current file.
264  * EXTRACTOR_UNZIP_END_OF_LIST_OF_FILE if the file is not found
265  */
266 int
268  const char *szFileName,
269  int iCaseSensitivity);
270 
271 
272 /**
273  * Write info about the ZipFile in the *pglobal_info structure.
274  * No preparation of the structure is needed.
275  *
276  * @param file zipfile to manipulate
277  * @param pfile_info file information to initialize
278  * @param szFileName where to write the name of the current file
279  * @param fileNameBufferSize number of bytes available in szFileName
280  * @param extraField where to write extra data
281  * @param extraFieldBufferSize number of bytes available in extraField
282  * @param szComment where to write the comment on the current file
283  * @param commentBufferSize number of bytes available in szComment
284  * @return EXTRACTOR_UNZIP_OK if there is no problem.
285  */
286 int
288  struct EXTRACTOR_UnzipFileInfo *
289  pfile_info,
290  char *szFileName,
291  uLong fileNameBufferSize,
292  void *extraField,
293  uLong extraFieldBufferSize,
294  char *szComment,
295  uLong commentBufferSize);
296 
297 
298 /**
299  * Open for reading data the current file in the zipfile.
300  *
301  * @param file zipfile to manipulate
302  * @return EXTRACTOR_UNZIP_OK on success
303  */
304 int
306 
307 
308 /**
309  * Read bytes from the current file (must have been opened).
310  *
311  * @param buf contain buffer where data must be copied
312  * @param len the size of buf.
313  * @return the number of byte copied if somes bytes are copied
314  * 0 if the end of file was reached
315  * <0 with error code if there is an error
316  * (EXTRACTOR_UNZIP_ERRNO for IO error, or zLib error for uncompress error)
317  */
318 ssize_t
320  void *buf,
321  size_t len);
322 
323 
324 /**
325  * Close the file in zip opened with EXTRACTOR_common_unzip_open_current_file.
326  *
327  * @return EXTRACTOR_UNZIP_CRCERROR if all the file was read but the CRC is not good
328  */
329 int
331 
332 
333 #endif
334 /* LE_COMMON_UNZIP_H */
uLong compression_method
Definition: unzip.h:140
struct EXTRACTOR_UnzipDateTimeInfo tmu_date
Definition: unzip.h:195
int EXTRACTOR_common_unzip_open_current_file(struct EXTRACTOR_UnzipFile *file)
Definition: unzip.c:1259
int EXTRACTOR_common_unzip_go_to_next_file(struct EXTRACTOR_UnzipFile *file)
Definition: unzip.c:933
ssize_t EXTRACTOR_common_unzip_read_current_file(struct EXTRACTOR_UnzipFile *file, void *buf, size_t len)
Definition: unzip.c:1038
int EXTRACTOR_common_unzip_go_find_local_file(struct EXTRACTOR_UnzipFile *file, const char *szFileName, int iCaseSensitivity)
Definition: unzip.c:969
int EXTRACTOR_common_unzip_get_current_file_info(struct EXTRACTOR_UnzipFile *file, struct EXTRACTOR_UnzipFileInfo *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)
Definition: unzip.c:908
struct EXTRACTOR_UnzipFile * EXTRACTOR_common_unzip_open(struct EXTRACTOR_ExtractContext *ec)
Definition: unzip.c:1421
int EXTRACTOR_common_unzip_go_to_first_file(struct EXTRACTOR_UnzipFile *file)
Definition: unzip.c:707
int EXTRACTOR_common_unzip_close(struct EXTRACTOR_UnzipFile *file)
Definition: unzip.c:854
int EXTRACTOR_common_unzip_get_global_comment(struct EXTRACTOR_UnzipFile *file, char *comment, size_t comment_len)
Definition: unzip.c:874
int EXTRACTOR_common_unzip_close_current_file(struct EXTRACTOR_UnzipFile *file)
Definition: unzip.c:823