zip/src/zip.h

303 lines
8.0 KiB
C
Raw Normal View History

2015-03-23 15:08:14 -07:00
/*
2017-02-19 00:31:45 +01:00
* 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.
*/
2015-03-23 15:08:14 -07:00
#pragma once
2017-02-19 00:31:45 +01:00
#ifndef ZIP_H
2015-03-23 15:08:14 -07:00
#define ZIP_H
2015-03-24 02:33:15 -07:00
#include <string.h>
2015-03-23 15:08:14 -07:00
#ifdef __cplusplus
extern "C" {
#endif
#ifndef MAX_PATH
2017-02-19 00:31:45 +01:00
#define MAX_PATH 32767 /* # chars in a path name including NULL */
2015-03-23 15:08:14 -07:00
#endif
2017-02-19 00:31:45 +01:00
#define ZIP_DEFAULT_COMPRESSION_LEVEL 6
2015-03-23 15:08:14 -07:00
2017-02-19 00:31:45 +01:00
/*
This data structure is used throughout the library to represent zip archive
- forward declaration.
*/
2015-03-24 14:44:50 -07:00
struct zip_t;
2015-03-23 15:08:14 -07:00
2015-03-24 02:33:15 -07:00
/*
2017-02-19 00:31:45 +01:00
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
2015-03-24 02:33:15 -07:00
*/
2017-02-19 14:14:05 +01:00
extern struct zip_t *zip_open(const char *zipname, int level, char mode);
2017-02-19 00:31:45 +01:00
/*
2018-01-06 02:39:55 +01:00
Closes the zip archive, releases resources - always finalize.
2015-03-23 15:08:14 -07:00
2017-02-19 00:31:45 +01:00
Args:
zip: zip archive handler.
*/
2017-02-19 14:14:05 +01:00
extern void zip_close(struct zip_t *zip);
2015-03-23 15:08:14 -07:00
2015-03-24 03:19:14 -07:00
/*
2018-01-08 11:33:02 +01:00
Opens an entry by name in the zip archive.
For zip archive opened in 'w' or 'a' mode the function will append
a new entry. In readonly mode the function tries to locate the entry
in global dictionary.
2017-02-19 00:31:45 +01:00
Args:
zip: zip archive handler.
entryname: an entry name in local dictionary.
Returns:
The return code - 0 on success, negative number (< 0) on error.
2015-03-24 03:19:14 -07:00
*/
2017-02-19 14:14:05 +01:00
extern int zip_entry_open(struct zip_t *zip, const char *entryname);
2015-03-23 15:08:14 -07:00
2018-01-08 11:33:02 +01:00
/*
Opens a new entry by index in the zip archive.
This function is only valid if zip archive was opened in 'r' (readonly) mode.
Args:
zip: zip archive handler.
index: index in local dictionary.
Returns:
The return code - 0 on success, negative number (< 0) on error.
*/
extern int zip_entry_openbyindex(struct zip_t *zip, int index);
2015-03-24 03:19:14 -07:00
/*
2017-02-19 00:31:45 +01:00
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.
2015-03-24 03:19:14 -07:00
*/
2017-02-19 14:14:05 +01:00
extern int zip_entry_close(struct zip_t *zip);
2015-03-23 15:08:14 -07:00
/*
Returns a local name of the current zip entry.
The main difference between user's entry name and local entry name
is optional relative path.
Following .ZIP File Format Specification - the path stored MUST not contain
a drive or device letter, or a leading slash.
All slashes MUST be forward slashes '/' as opposed to backwards slashes '\'
for compatibility with Amiga and UNIX file systems etc.
Args:
zip: zip archive handler.
Returns:
The pointer to the current zip entry name, or NULL on error.
*/
extern const char *zip_entry_name(struct zip_t *zip);
/*
Returns an index of the current zip entry.
Args:
zip: zip archive handler.
Returns:
The index on success, negative number (< 0) on error.
*/
extern int zip_entry_index(struct zip_t *zip);
2018-01-08 11:33:02 +01:00
/*
Determines if the current zip entry is a directory entry.
Args:
zip: zip archive handler.
Returns:
The return code - 1 (true), 0 (false), negative number (< 0) on error.
*/
extern int zip_entry_isdir(struct zip_t *zip);
2018-03-06 11:16:13 +01:00
/*
Returns an uncompressed size of the current zip entry.
Args:
zip: zip archive handler.
Returns:
The uncompressed size in bytes.
*/
extern unsigned long long zip_entry_size(struct zip_t *zip);
/*
Returns CRC-32 checksum of the current zip entry.
Args:
zip: zip archive handler.
Returns:
The CRC-32 checksum.
*/
extern unsigned int zip_entry_crc32(struct zip_t *zip);
2015-03-24 03:19:14 -07:00
/*
Compresses an input buffer for the current zip entry.
2017-02-19 00:31:45 +01:00
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.
2015-03-24 03:19:14 -07:00
*/
2017-02-19 14:14:05 +01:00
extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t bufsize);
2015-03-23 15:08:14 -07:00
2015-03-24 03:19:14 -07:00
/*
Compresses a file for the current zip entry.
2017-02-19 00:31:45 +01:00
Args:
zip: zip archive handler.
filename: input file.
Returns:
The return code - 0 on success, negative number (< 0) on error.
2015-03-24 03:19:14 -07:00
*/
2017-02-19 14:14:05 +01:00
extern int zip_entry_fwrite(struct zip_t *zip, const char *filename);
2015-03-23 15:08:14 -07:00
2015-03-24 03:19:14 -07:00
/*
2017-02-19 00:31:45 +01:00
Extracts the current zip entry into output buffer.
The function allocates sufficient memory for a output buffer.
2017-02-19 00:31:45 +01:00
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.
2017-02-19 00:31:45 +01:00
Returns:
The return code - 0 on success, negative number (< 0) on error.
*/
2017-02-19 14:14:05 +01:00
extern int zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize);
2017-02-19 00:31:45 +01:00
2018-03-07 13:58:47 +01:00
/*
Extracts the current zip entry into a memory buffer using no memory allocation.
Args:
zip: zip archive handler.
buf: preallocated output buffer.
bufsize: output buffer size (in bytes).
Note:
- ensure supplied output buffer is large enough.
- zip_entry_size function (returns uncompressed size for the current entry)
can be handy to estimate how big buffer is needed.
- for large entries, please take a look at zip_entry_extract function.
Returns:
The return code - 0 on success, negative number (< 0) on error (e.g. bufsize
2018-03-07 14:04:53 +01:00
is not large enough).
2018-03-07 13:58:47 +01:00
*/
extern int zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize);
2017-02-19 00:31:45 +01:00
/*
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.
*/
2017-02-19 14:14:05 +01:00
extern int zip_entry_fread(struct zip_t *zip, const char *filename);
2017-02-19 00:31:45 +01:00
/*
2018-01-06 02:39:55 +01:00
Extracts the current zip entry using a callback function (on_extract).
2018-01-06 02:39:55 +01:00
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);
2018-01-06 02:39:55 +01:00
/*
Returns the number of all entries (files and directories) in the zip archive.
2018-01-06 02:39:55 +01:00
Args:
zip: zip archive handler.
Returns:
The return code - the number of entries on success,
negative number (< 0) on error.
*/
extern int zip_total_entries(struct zip_t *zip);
2017-02-19 00:31:45 +01:00
/*
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.
2015-03-24 03:19:14 -07:00
*/
2017-02-19 14:14:05 +01:00
extern int zip_create(const char *zipname, const char *filenames[], size_t len);
2015-03-24 03:19:14 -07:00
/*
2017-02-19 00:31:45 +01:00
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.
2015-04-01 00:05:40 +02:00
2017-02-19 00:31:45 +01:00
Args:
zipname: zip archive file.
dir: output directory.
on_extract_entry: on extract callback.
arg: opaque pointer.
2015-03-23 15:08:14 -07:00
2017-02-19 00:31:45 +01:00
Returns:
The return code - 0 on success, negative number (< 0) on error.
2015-03-24 03:19:14 -07:00
*/
2017-02-19 14:14:05 +01:00
extern int zip_extract(const char *zipname, const char *dir,
int (*on_extract_entry)(const char *filename, void *arg),
void *arg);
2015-03-23 15:08:14 -07:00
#ifdef __cplusplus
}
#endif
#endif