"Fossies" - the Fresh Open Source Software Archive 
Member "libextractor-1.11/src/common/unzip.h" (30 Jan 2021, 8373 Bytes) of package /linux/privat/libextractor-1.11.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "unzip.h" see the
Fossies "Dox" file reference documentation.
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 */
83 struct EXTRACTOR_UnzipDateTimeInfo
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 */
120 struct EXTRACTOR_UnzipFileInfo
121 {
122 /**
123 * version made by 2 bytes
124 */
125 uLong version;
126
127 /**
128 * version needed to extract 2 bytes
129 */
130 uLong version_needed;
131
132 /**
133 * general purpose bit flag 2 bytes
134 */
135 uLong flag;
136
137 /**
138 * compression method 2 bytes
139 */
140 uLong compression_method;
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 */
155 uLong compressed_size;
156
157 /**
158 * uncompressed size 4 bytes
159 */
160 uLong uncompressed_size;
161
162 /**
163 * filename length 2 bytes
164 */
165 uLong size_filename;
166
167 /**
168 * extra field length 2 bytes
169 */
170 uLong size_file_extra;
171
172 /**
173 * file comment length 2 bytes
174 */
175 uLong size_file_comment;
176
177 /**
178 * disk number start 2 bytes
179 */
180 uLong disk_num_start;
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 */
195 struct EXTRACTOR_UnzipDateTimeInfo tmu_date;
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 *
207 EXTRACTOR_common_unzip_open (struct EXTRACTOR_ExtractContext *ec);
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
219 EXTRACTOR_common_unzip_get_global_comment (struct EXTRACTOR_UnzipFile *file,
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
231 EXTRACTOR_common_unzip_close (struct EXTRACTOR_UnzipFile *file);
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
241 EXTRACTOR_common_unzip_go_to_first_file (struct EXTRACTOR_UnzipFile *file);
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
252 EXTRACTOR_common_unzip_go_to_next_file (struct EXTRACTOR_UnzipFile *file);
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
267 EXTRACTOR_common_unzip_go_find_local_file (struct EXTRACTOR_UnzipFile *file,
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
287 EXTRACTOR_common_unzip_get_current_file_info (struct EXTRACTOR_UnzipFile *file,
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
305 EXTRACTOR_common_unzip_open_current_file (struct EXTRACTOR_UnzipFile *file);
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
319 EXTRACTOR_common_unzip_read_current_file (struct EXTRACTOR_UnzipFile *file,
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
330 EXTRACTOR_common_unzip_close_current_file (struct EXTRACTOR_UnzipFile *file);
331
332
333 #endif
334 /* LE_COMMON_UNZIP_H */