summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/assimp/contrib/zip/src/zip.h
blob: 1611b54176c9f6f1932b9e53641fa308b1b674e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/*
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

#pragma once
#ifndef ZIP_H
#define ZIP_H

#include <string.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef MAX_PATH
#define MAX_PATH 32767 /* # chars in a path name including NULL */
#endif

#define ZIP_DEFAULT_COMPRESSION_LEVEL 6

/*
  This data structure is used throughout the library to represent zip archive
  - forward declaration.
*/
struct zip_t;

/*
  Opens zip archive with compression level using the given mode.

  Args:
    zipname: zip archive file name.
    level: compression level (0-9 are the standard zlib-style levels).
    mode: file access mode.
        'r': opens a file for reading/extracting (the file must exists).
        'w': creates an empty file for writing.
        'a': appends to an existing archive.

  Returns:
    The zip archive handler or NULL on error
*/
extern struct zip_t *zip_open(const char *zipname, int level, char mode);

/*
  Closes zip archive, releases resources - always finalize.

  Args:
    zip: zip archive handler.
*/
extern void zip_close(struct zip_t *zip);

/*
  Opens a new entry for writing in a zip archive.

  Args:
    zip: zip archive handler.
    entryname: an entry name in local dictionary.

  Returns:
    The return code - 0 on success, negative number (< 0) on error.
*/
extern int zip_entry_open(struct zip_t *zip, const char *entryname);

/*
  Closes a zip entry, flushes buffer and releases resources.

  Args:
    zip: zip archive handler.

  Returns:
    The return code - 0 on success, negative number (< 0) on error.
*/
extern int zip_entry_close(struct zip_t *zip);

/*
  Compresses an input buffer for the current zip entry.

  Args:
    zip: zip archive handler.
    buf: input buffer.
    bufsize: input buffer size (in bytes).

  Returns:
    The return code - 0 on success, negative number (< 0) on error.
*/
extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t bufsize);

/*
  Compresses a file for the current zip entry.

  Args:
    zip: zip archive handler.
    filename: input file.

  Returns:
    The return code - 0 on success, negative number (< 0) on error.
*/
extern int zip_entry_fwrite(struct zip_t *zip, const char *filename);

/*
  Extracts the current zip entry into output buffer.
  The function allocates sufficient memory for a output buffer.

  Args:
    zip: zip archive handler.
    buf: output buffer.
    bufsize: output buffer size (in bytes).

  Note:
    - remember to release memory allocated for a output buffer.
    - for large entries, please take a look at zip_entry_extract function.

  Returns:
    The return code - 0 on success, negative number (< 0) on error.
*/
extern int zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize);

/*
  Extracts the current zip entry into output file.

  Args:
    zip: zip archive handler.
    filename: output file.

  Returns:
    The return code - 0 on success, negative number (< 0) on error.
*/
extern int zip_entry_fread(struct zip_t *zip, const char *filename);

/*
   Extract the current zip entry using a callback function (on_extract).

   Args:
    zip: zip archive handler.
    on_extract: callback function.
    arg: opaque pointer (optional argument,
                         which you can pass to the on_extract callback)

   Returns:
    The return code - 0 on success, negative number (< 0) on error.
 */
extern int zip_entry_extract(struct zip_t *zip,
                             size_t (*on_extract)(void *arg,
                                                  unsigned long long offset,
                                                  const void *data,
                                                  size_t size),
                             void *arg);

/*
  Creates a new archive and puts files into a single zip archive.

  Args:
    zipname: zip archive file.
    filenames: input files.
    len: number of input files.

  Returns:
    The return code - 0 on success, negative number (< 0) on error.
*/
extern int zip_create(const char *zipname, const char *filenames[], size_t len);

/*
  Extracts a zip archive file into directory.

  If on_extract_entry is not NULL, the callback will be called after
  successfully extracted each zip entry.
  Returning a negative value from the callback will cause abort and return an
  error. The last argument (void *arg) is optional, which you can use to pass
  data to the on_extract_entry callback.

  Args:
    zipname: zip archive file.
    dir: output directory.
    on_extract_entry: on extract callback.
    arg: opaque pointer.

  Returns:
    The return code - 0 on success, negative number (< 0) on error.
*/
extern int zip_extract(const char *zipname, const char *dir,
                       int (*on_extract_entry)(const char *filename, void *arg),
                       void *arg);

#ifdef __cplusplus
}
#endif

#endif