libacfutils
A general purpose library of utility functions designed to make it easier to develop addons for the X-Plane flight simulator.
Loading...
Searching...
No Matches
zip.h
1/*
2 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
3 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
5 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
6 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
7 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
8 * OTHER DEALINGS IN THE SOFTWARE.
9 */
10
11#pragma once
12#ifndef ZIP_H
13#define ZIP_H
14
15#include <stdint.h>
16#include <stdio.h>
17#include <string.h>
18#include <sys/types.h>
19
20#ifndef ZIP_SHARED
21#define ZIP_EXPORT
22#else
23#ifdef _WIN32
24#ifdef ZIP_BUILD_SHARED
25#define ZIP_EXPORT __declspec(dllexport)
26#else
27#define ZIP_EXPORT __declspec(dllimport)
28#endif
29#else
30#define ZIP_EXPORT __attribute__((visibility("default")))
31#endif
32#endif
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
38#if !defined(_POSIX_C_SOURCE) && defined(_MSC_VER)
39// 64-bit Windows is the only mainstream platform
40// where sizeof(long) != sizeof(void*)
41#ifdef _WIN64
42typedef long long ssize_t; /* byte count or error */
43#else
44typedef long ssize_t; /* byte count or error */
45#endif
46#endif
47
62#define ZIP_DEFAULT_COMPRESSION_LEVEL 6
63
67#define ZIP_ENOINIT -1 // not initialized
68#define ZIP_EINVENTNAME -2 // invalid entry name
69#define ZIP_ENOENT -3 // entry not found
70#define ZIP_EINVMODE -4 // invalid zip mode
71#define ZIP_EINVLVL -5 // invalid compression level
72#define ZIP_ENOSUP64 -6 // no zip 64 support
73#define ZIP_EMEMSET -7 // memset error
74#define ZIP_EWRTENT -8 // cannot write data to entry
75#define ZIP_ETDEFLINIT -9 // cannot initialize tdefl compressor
76#define ZIP_EINVIDX -10 // invalid index
77#define ZIP_ENOHDR -11 // header not found
78#define ZIP_ETDEFLBUF -12 // cannot flush tdefl buffer
79#define ZIP_ECRTHDR -13 // cannot create entry header
80#define ZIP_EWRTHDR -14 // cannot write entry header
81#define ZIP_EWRTDIR -15 // cannot write to central dir
82#define ZIP_EOPNFILE -16 // cannot open file
83#define ZIP_EINVENTTYPE -17 // invalid entry type
84#define ZIP_EMEMNOALLOC -18 // extracting data using no memory allocation
85#define ZIP_ENOFILE -19 // file not found
86#define ZIP_ENOPERM -20 // no permission
87#define ZIP_EOOMEM -21 // out of memory
88#define ZIP_EINVZIPNAME -22 // invalid zip archive name
89#define ZIP_EMKDIR -23 // make dir error
90#define ZIP_ESYMLINK -24 // symlink error
91#define ZIP_ECLSZIP -25 // close archive error
92#define ZIP_ECAPSIZE -26 // capacity size too small
93#define ZIP_EFSEEK -27 // fseek error
94#define ZIP_EFREAD -28 // fread error
95#define ZIP_EFWRITE -29 // fwrite error
96#define ZIP_ERINIT -30 // cannot initialize reader
97#define ZIP_EWINIT -31 // cannot initialize writer
98#define ZIP_EWRINIT -32 // cannot initialize writer from reader
99
106extern ZIP_EXPORT const char *zip_strerror(int errnum);
107
114struct zip_t;
115
128extern ZIP_EXPORT struct zip_t *zip_open(const char *zipname, int level,
129 char mode);
130
145extern ZIP_EXPORT struct zip_t *
146zip_openwitherror(const char *zipname, int level, char mode, int *errnum);
147
153extern ZIP_EXPORT void zip_close(struct zip_t *zip);
154
163extern ZIP_EXPORT int zip_is64(struct zip_t *zip);
164
173extern ZIP_EXPORT int zip_offset(struct zip_t *zip, uint64_t *offset);
174
187extern ZIP_EXPORT int zip_entry_open(struct zip_t *zip, const char *entryname);
188
201extern ZIP_EXPORT int zip_entry_opencasesensitive(struct zip_t *zip,
202 const char *entryname);
203
214extern ZIP_EXPORT int zip_entry_openbyindex(struct zip_t *zip, size_t index);
215
223extern ZIP_EXPORT int zip_entry_close(struct zip_t *zip);
224
239extern ZIP_EXPORT const char *zip_entry_name(struct zip_t *zip);
240
248extern ZIP_EXPORT ssize_t zip_entry_index(struct zip_t *zip);
249
258extern ZIP_EXPORT int zip_entry_isdir(struct zip_t *zip);
259
268extern ZIP_EXPORT unsigned long long zip_entry_size(struct zip_t *zip);
269
277extern ZIP_EXPORT unsigned long long zip_entry_uncomp_size(struct zip_t *zip);
278
286extern ZIP_EXPORT unsigned long long zip_entry_comp_size(struct zip_t *zip);
287
295extern ZIP_EXPORT unsigned int zip_entry_crc32(struct zip_t *zip);
296
305extern ZIP_EXPORT unsigned long long zip_entry_dir_offset(struct zip_t *zip);
306
314extern ZIP_EXPORT unsigned long long zip_entry_header_offset(struct zip_t *zip);
315
325extern ZIP_EXPORT int zip_entry_write(struct zip_t *zip, const void *buf,
326 size_t bufsize);
327
336extern ZIP_EXPORT int zip_entry_fwrite(struct zip_t *zip, const char *filename);
337
353extern ZIP_EXPORT ssize_t zip_entry_read(struct zip_t *zip, void **buf,
354 size_t *bufsize);
355
373extern ZIP_EXPORT ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf,
374 size_t bufsize);
375
384extern ZIP_EXPORT int zip_entry_fread(struct zip_t *zip, const char *filename);
385
396extern ZIP_EXPORT int
398 size_t (*on_extract)(void *arg, uint64_t offset,
399 const void *data, size_t size),
400 void *arg);
401
410extern ZIP_EXPORT ssize_t zip_entries_total(struct zip_t *zip);
411
420extern ZIP_EXPORT ssize_t zip_entries_delete(struct zip_t *zip,
421 char *const entries[], size_t len);
422
431extern ZIP_EXPORT ssize_t zip_entries_deletebyindex(struct zip_t *zip,
432 size_t entries[],
433 size_t len);
434
452extern ZIP_EXPORT int
453zip_stream_extract(const char *stream, size_t size, const char *dir,
454 int (*on_extract)(const char *filename, void *arg),
455 void *arg);
456
470extern ZIP_EXPORT struct zip_t *zip_stream_open(const char *stream, size_t size,
471 int level, char mode);
472
488extern ZIP_EXPORT struct zip_t *zip_stream_openwitherror(const char *stream,
489 size_t size, int level,
490 char mode,
491 int *errnum);
492
502extern ZIP_EXPORT ssize_t zip_stream_copy(struct zip_t *zip, void **buf,
503 size_t *bufsize);
504
512extern ZIP_EXPORT void zip_stream_close(struct zip_t *zip);
513
528extern ZIP_EXPORT struct zip_t *zip_cstream_open(FILE *stream, int level,
529 char mode);
530
546extern ZIP_EXPORT struct zip_t *
547zip_cstream_openwitherror(FILE *stream, int level, char mode, int *errnum);
548
555extern ZIP_EXPORT void zip_cstream_close(struct zip_t *zip);
556
566extern ZIP_EXPORT int zip_create(const char *zipname, const char *filenames[],
567 size_t len);
568
585extern ZIP_EXPORT int zip_extract(const char *zipname, const char *dir,
586 int (*on_extract_entry)(const char *filename,
587 void *arg),
588 void *arg);
590#ifdef __cplusplus
591}
592#endif
593
594#endif
int zip_is64(struct zip_t *zip)
Definition zip.c:1054
int zip_entry_extract(struct zip_t *zip, size_t(*on_extract)(void *arg, uint64_t offset, const void *data, size_t size), void *arg)
struct zip_t * zip_openwitherror(const char *zipname, int level, char mode, int *errnum)
Definition zip.c:944
unsigned long long zip_entry_size(struct zip_t *zip)
Definition zip.c:1477
int zip_entry_isdir(struct zip_t *zip)
Definition zip.c:1461
ssize_t zip_entry_index(struct zip_t *zip)
Definition zip.c:1452
const char * zip_entry_name(struct zip_t *zip)
Definition zip.c:1444
struct zip_t * zip_open(const char *zipname, int level, char mode)
Definition zip.c:939
ssize_t zip_entries_deletebyindex(struct zip_t *zip, size_t entries[], size_t len)
Definition zip.c:1774
void zip_stream_close(struct zip_t *zip)
Definition zip.c:1898
int zip_entry_fread(struct zip_t *zip, const char *filename)
Definition zip.c:1657
struct zip_t * zip_stream_open(const char *stream, size_t size, int level, char mode)
Definition zip.c:1829
const char * zip_strerror(int errnum)
Definition zip.c:153
ssize_t zip_stream_copy(struct zip_t *zip, void **buf, size_t *bufsize)
Definition zip.c:1879
ssize_t zip_entries_delete(struct zip_t *zip, char *const entries[], size_t len)
Definition zip.c:1739
int zip_entry_fwrite(struct zip_t *zip, const char *filename)
Definition zip.c:1539
void zip_cstream_close(struct zip_t *zip)
Definition zip.c:1990
ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize)
Definition zip.c:1634
int zip_offset(struct zip_t *zip, uint64_t *offset)
Definition zip.c:1063
struct zip_t * zip_cstream_open(FILE *stream, int level, char mode)
Definition zip.c:1906
unsigned int zip_entry_crc32(struct zip_t *zip)
Definition zip.c:1489
unsigned long long zip_entry_uncomp_size(struct zip_t *zip)
Definition zip.c:1481
struct zip_t * zip_stream_openwitherror(const char *stream, size_t size, int level, char mode, int *errnum)
Definition zip.c:1835
int zip_create(const char *zipname, const char *filenames[], size_t len)
Definition zip.c:1992
void zip_close(struct zip_t *zip)
Definition zip.c:1032
int zip_entry_open(struct zip_t *zip, const char *entryname)
Definition zip.c:1277
int zip_entry_opencasesensitive(struct zip_t *zip, const char *entryname)
Definition zip.c:1281
int zip_extract(const char *zipname, const char *dir, int(*on_extract_entry)(const char *filename, void *arg), void *arg)
Definition zip.c:2074
struct zip_t * zip_cstream_openwitherror(FILE *stream, int level, char mode, int *errnum)
Definition zip.c:1911
int zip_entry_close(struct zip_t *zip)
Definition zip.c:1348
unsigned long long zip_entry_header_offset(struct zip_t *zip)
Definition zip.c:1497
int zip_entry_openbyindex(struct zip_t *zip, size_t index)
Definition zip.c:1285
int zip_entry_write(struct zip_t *zip, const void *buf, size_t bufsize)
Definition zip.c:1501
ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize)
Definition zip.c:1604
unsigned long long zip_entry_dir_offset(struct zip_t *zip)
Definition zip.c:1493
ssize_t zip_entries_total(struct zip_t *zip)
Definition zip.c:1730
int zip_stream_extract(const char *stream, size_t size, const char *dir, int(*on_extract)(const char *filename, void *arg), void *arg)
Definition zip.c:1809
unsigned long long zip_entry_comp_size(struct zip_t *zip)
Definition zip.c:1485
Definition zip.c:98