pull/13387/head
			
			
		
		
							parent
							
								
									da9331f8ff
								
							
						
					
					
						commit
						7ec613a562
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -12,17 +12,29 @@ | ||||||
| #ifndef ZIP_H | #ifndef ZIP_H | ||||||
| #define ZIP_H | #define ZIP_H | ||||||
| 
 | 
 | ||||||
|  | #include <stdint.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| 
 | 
 | ||||||
|  | #ifndef ZIP_SHARED | ||||||
|  | #define ZIP_EXPORT | ||||||
|  | #else | ||||||
|  | #ifdef _WIN32 | ||||||
|  | #ifdef ZIP_BUILD_SHARED | ||||||
|  | #define ZIP_EXPORT __declspec(dllexport) | ||||||
|  | #else | ||||||
|  | #define ZIP_EXPORT __declspec(dllimport) | ||||||
|  | #endif | ||||||
|  | #else | ||||||
|  | #define ZIP_EXPORT __attribute__((visibility("default"))) | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) &&               \ | #if !defined(_POSIX_C_SOURCE) && defined(_MSC_VER) | ||||||
|     !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) &&              \ |  | ||||||
|     !defined(_SSIZE_T) && !defined(_SSIZE_T_) && !defined(_SSIZE_T_DECLARED) |  | ||||||
| 
 |  | ||||||
| // 64-bit Windows is the only mainstream platform
 | // 64-bit Windows is the only mainstream platform
 | ||||||
| // where sizeof(long) != sizeof(void*)
 | // where sizeof(long) != sizeof(void*)
 | ||||||
| #ifdef _WIN64 | #ifdef _WIN64 | ||||||
|  | @ -30,19 +42,10 @@ typedef long long ssize_t; /* byte count or error */ | ||||||
| #else | #else | ||||||
| typedef long ssize_t; /* byte count or error */ | typedef long ssize_t; /* byte count or error */ | ||||||
| #endif | #endif | ||||||
| 
 |  | ||||||
| #define _SSIZE_T_DEFINED |  | ||||||
| #define _SSIZE_T_DEFINED_ |  | ||||||
| #define __DEFINED_ssize_t |  | ||||||
| #define __ssize_t_defined |  | ||||||
| #define _SSIZE_T |  | ||||||
| #define _SSIZE_T_ |  | ||||||
| #define _SSIZE_T_DECLARED |  | ||||||
| 
 |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifndef MAX_PATH | #ifndef MAX_PATH | ||||||
| #define MAX_PATH 32767 /* # chars in a path name including NULL */ | #define MAX_PATH 1024 /* # chars in a path name including NULL */ | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | @ -59,9 +62,49 @@ typedef long ssize_t; /* byte count or error */ | ||||||
| /**
 | /**
 | ||||||
|  * Default zip compression level. |  * Default zip compression level. | ||||||
|  */ |  */ | ||||||
| 
 |  | ||||||
| #define ZIP_DEFAULT_COMPRESSION_LEVEL 6 | #define ZIP_DEFAULT_COMPRESSION_LEVEL 6 | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Error codes | ||||||
|  |  */ | ||||||
|  | #define ZIP_ENOINIT -1      // not initialized
 | ||||||
|  | #define ZIP_EINVENTNAME -2  // invalid entry name
 | ||||||
|  | #define ZIP_ENOENT -3       // entry not found
 | ||||||
|  | #define ZIP_EINVMODE -4     // invalid zip mode
 | ||||||
|  | #define ZIP_EINVLVL -5      // invalid compression level
 | ||||||
|  | #define ZIP_ENOSUP64 -6     // no zip 64 support
 | ||||||
|  | #define ZIP_EMEMSET -7      // memset error
 | ||||||
|  | #define ZIP_EWRTENT -8      // cannot write data to entry
 | ||||||
|  | #define ZIP_ETDEFLINIT -9   // cannot initialize tdefl compressor
 | ||||||
|  | #define ZIP_EINVIDX -10     // invalid index
 | ||||||
|  | #define ZIP_ENOHDR -11      // header not found
 | ||||||
|  | #define ZIP_ETDEFLBUF -12   // cannot flush tdefl buffer
 | ||||||
|  | #define ZIP_ECRTHDR -13     // cannot create entry header
 | ||||||
|  | #define ZIP_EWRTHDR -14     // cannot write entry header
 | ||||||
|  | #define ZIP_EWRTDIR -15     // cannot write to central dir
 | ||||||
|  | #define ZIP_EOPNFILE -16    // cannot open file
 | ||||||
|  | #define ZIP_EINVENTTYPE -17 // invalid entry type
 | ||||||
|  | #define ZIP_EMEMNOALLOC -18 // extracting data using no memory allocation
 | ||||||
|  | #define ZIP_ENOFILE -19     // file not found
 | ||||||
|  | #define ZIP_ENOPERM -20     // no permission
 | ||||||
|  | #define ZIP_EOOMEM -21      // out of memory
 | ||||||
|  | #define ZIP_EINVZIPNAME -22 // invalid zip archive name
 | ||||||
|  | #define ZIP_EMKDIR -23      // make dir error
 | ||||||
|  | #define ZIP_ESYMLINK -24    // symlink error
 | ||||||
|  | #define ZIP_ECLSZIP -25     // close archive error
 | ||||||
|  | #define ZIP_ECAPSIZE -26    // capacity size too small
 | ||||||
|  | #define ZIP_EFSEEK -27      // fseek error
 | ||||||
|  | #define ZIP_EFREAD -28      // fread error
 | ||||||
|  | #define ZIP_EFWRITE -29     // fwrite error
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Looks up the error message string coresponding to an error number. | ||||||
|  |  * @param errnum error number | ||||||
|  |  * @return error message string coresponding to errnum or NULL if error is not | ||||||
|  |  * found. | ||||||
|  |  */ | ||||||
|  | extern ZIP_EXPORT const char *zip_strerror(int errnum); | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * @struct zip_t |  * @struct zip_t | ||||||
|  * |  * | ||||||
|  | @ -82,14 +125,15 @@ struct zip_t; | ||||||
|  * |  * | ||||||
|  * @return the zip archive handler or NULL on error |  * @return the zip archive handler or NULL on error | ||||||
|  */ |  */ | ||||||
| extern struct zip_t *zip_open(const char *zipname, int level, char mode); | extern ZIP_EXPORT struct zip_t *zip_open(const char *zipname, int level, | ||||||
|  |                                          char mode); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Closes the zip archive, releases resources - always finalize. |  * Closes the zip archive, releases resources - always finalize. | ||||||
|  * |  * | ||||||
|  * @param zip zip archive handler. |  * @param zip zip archive handler. | ||||||
|  */ |  */ | ||||||
| extern void zip_close(struct zip_t *zip); | extern ZIP_EXPORT void zip_close(struct zip_t *zip); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Determines if the archive has a zip64 end of central directory headers. |  * Determines if the archive has a zip64 end of central directory headers. | ||||||
|  | @ -99,7 +143,7 @@ extern void zip_close(struct zip_t *zip); | ||||||
|  * @return the return code - 1 (true), 0 (false), negative number (< 0) on |  * @return the return code - 1 (true), 0 (false), negative number (< 0) on | ||||||
|  *         error. |  *         error. | ||||||
|  */ |  */ | ||||||
| extern int zip_is64(struct zip_t *zip); | extern ZIP_EXPORT int zip_is64(struct zip_t *zip); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Opens an entry by name in the zip archive. |  * Opens an entry by name in the zip archive. | ||||||
|  | @ -113,7 +157,7 @@ extern int zip_is64(struct zip_t *zip); | ||||||
|  * |  * | ||||||
|  * @return the return code - 0 on success, negative number (< 0) on error. |  * @return the return code - 0 on success, negative number (< 0) on error. | ||||||
|  */ |  */ | ||||||
| extern int zip_entry_open(struct zip_t *zip, const char *entryname); | extern ZIP_EXPORT int zip_entry_open(struct zip_t *zip, const char *entryname); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Opens a new entry by index in the zip archive. |  * Opens a new entry by index in the zip archive. | ||||||
|  | @ -125,7 +169,7 @@ extern int zip_entry_open(struct zip_t *zip, const char *entryname); | ||||||
|  * |  * | ||||||
|  * @return the return code - 0 on success, negative number (< 0) on error. |  * @return the return code - 0 on success, negative number (< 0) on error. | ||||||
|  */ |  */ | ||||||
| extern int zip_entry_openbyindex(struct zip_t *zip, int index); | extern ZIP_EXPORT int zip_entry_openbyindex(struct zip_t *zip, int index); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Closes a zip entry, flushes buffer and releases resources. |  * Closes a zip entry, flushes buffer and releases resources. | ||||||
|  | @ -134,7 +178,7 @@ extern int zip_entry_openbyindex(struct zip_t *zip, int index); | ||||||
|  * |  * | ||||||
|  * @return the return code - 0 on success, negative number (< 0) on error. |  * @return the return code - 0 on success, negative number (< 0) on error. | ||||||
|  */ |  */ | ||||||
| extern int zip_entry_close(struct zip_t *zip); | extern ZIP_EXPORT int zip_entry_close(struct zip_t *zip); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Returns a local name of the current zip entry. |  * Returns a local name of the current zip entry. | ||||||
|  | @ -150,7 +194,7 @@ extern int zip_entry_close(struct zip_t *zip); | ||||||
|  * |  * | ||||||
|  * @return the pointer to the current zip entry name, or NULL on error. |  * @return the pointer to the current zip entry name, or NULL on error. | ||||||
|  */ |  */ | ||||||
| extern const char *zip_entry_name(struct zip_t *zip); | extern ZIP_EXPORT const char *zip_entry_name(struct zip_t *zip); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Returns an index of the current zip entry. |  * Returns an index of the current zip entry. | ||||||
|  | @ -159,7 +203,7 @@ extern const char *zip_entry_name(struct zip_t *zip); | ||||||
|  * |  * | ||||||
|  * @return the index on success, negative number (< 0) on error. |  * @return the index on success, negative number (< 0) on error. | ||||||
|  */ |  */ | ||||||
| extern int zip_entry_index(struct zip_t *zip); | extern ZIP_EXPORT int zip_entry_index(struct zip_t *zip); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Determines if the current zip entry is a directory entry. |  * Determines if the current zip entry is a directory entry. | ||||||
|  | @ -169,7 +213,7 @@ extern int zip_entry_index(struct zip_t *zip); | ||||||
|  * @return the return code - 1 (true), 0 (false), negative number (< 0) on |  * @return the return code - 1 (true), 0 (false), negative number (< 0) on | ||||||
|  *         error. |  *         error. | ||||||
|  */ |  */ | ||||||
| extern int zip_entry_isdir(struct zip_t *zip); | extern ZIP_EXPORT int zip_entry_isdir(struct zip_t *zip); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Returns an uncompressed size of the current zip entry. |  * Returns an uncompressed size of the current zip entry. | ||||||
|  | @ -178,7 +222,7 @@ extern int zip_entry_isdir(struct zip_t *zip); | ||||||
|  * |  * | ||||||
|  * @return the uncompressed size in bytes. |  * @return the uncompressed size in bytes. | ||||||
|  */ |  */ | ||||||
| extern unsigned long long zip_entry_size(struct zip_t *zip); | extern ZIP_EXPORT unsigned long long zip_entry_size(struct zip_t *zip); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Returns CRC-32 checksum of the current zip entry. |  * Returns CRC-32 checksum of the current zip entry. | ||||||
|  | @ -187,7 +231,7 @@ extern unsigned long long zip_entry_size(struct zip_t *zip); | ||||||
|  * |  * | ||||||
|  * @return the CRC-32 checksum. |  * @return the CRC-32 checksum. | ||||||
|  */ |  */ | ||||||
| extern unsigned int zip_entry_crc32(struct zip_t *zip); | extern ZIP_EXPORT unsigned int zip_entry_crc32(struct zip_t *zip); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Compresses an input buffer for the current zip entry. |  * Compresses an input buffer for the current zip entry. | ||||||
|  | @ -198,7 +242,8 @@ extern unsigned int zip_entry_crc32(struct zip_t *zip); | ||||||
|  * |  * | ||||||
|  * @return the return code - 0 on success, negative number (< 0) on error. |  * @return 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); | extern ZIP_EXPORT int zip_entry_write(struct zip_t *zip, const void *buf, | ||||||
|  |                                       size_t bufsize); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Compresses a file for the current zip entry. |  * Compresses a file for the current zip entry. | ||||||
|  | @ -208,7 +253,7 @@ extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t bufsize); | ||||||
|  * |  * | ||||||
|  * @return the return code - 0 on success, negative number (< 0) on error. |  * @return the return code - 0 on success, negative number (< 0) on error. | ||||||
|  */ |  */ | ||||||
| extern int zip_entry_fwrite(struct zip_t *zip, const char *filename); | extern ZIP_EXPORT int zip_entry_fwrite(struct zip_t *zip, const char *filename); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Extracts the current zip entry into output buffer. |  * Extracts the current zip entry into output buffer. | ||||||
|  | @ -223,9 +268,10 @@ extern int zip_entry_fwrite(struct zip_t *zip, const char *filename); | ||||||
|  *       for large entries, please take a look at zip_entry_extract function. |  *       for large entries, please take a look at zip_entry_extract function. | ||||||
|  * |  * | ||||||
|  * @return the return code - the number of bytes actually read on success. |  * @return the return code - the number of bytes actually read on success. | ||||||
|  *         Otherwise a -1 on error. |  *         Otherwise a negative number (< 0) on error. | ||||||
|  */ |  */ | ||||||
| extern ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize); | extern ZIP_EXPORT ssize_t zip_entry_read(struct zip_t *zip, void **buf, | ||||||
|  |                                          size_t *bufsize); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Extracts the current zip entry into a memory buffer using no memory |  * Extracts the current zip entry into a memory buffer using no memory | ||||||
|  | @ -237,14 +283,15 @@ extern ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize); | ||||||
|  * |  * | ||||||
|  * @note ensure supplied output buffer is large enough. |  * @note ensure supplied output buffer is large enough. | ||||||
|  *       zip_entry_size function (returns uncompressed size for the current |  *       zip_entry_size function (returns uncompressed size for the current | ||||||
|  *       entry) can be handy to estimate how big buffer is needed. for large |  *       entry) can be handy to estimate how big buffer is needed. | ||||||
|  * entries, please take a look at zip_entry_extract function. |  *       For large entries, please take a look at zip_entry_extract function. | ||||||
|  * |  * | ||||||
|  * @return the return code - the number of bytes actually read on success. |  * @return the return code - the number of bytes actually read on success. | ||||||
|  *         Otherwise a -1 on error (e.g. bufsize is not large enough). |  *         Otherwise a negative number (< 0) on error (e.g. bufsize is not large | ||||||
|  |  * enough). | ||||||
|  */ |  */ | ||||||
| extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, | extern ZIP_EXPORT ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, | ||||||
|                                      size_t bufsize); |                                                 size_t bufsize); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Extracts the current zip entry into output file. |  * Extracts the current zip entry into output file. | ||||||
|  | @ -254,7 +301,7 @@ extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, | ||||||
|  * |  * | ||||||
|  * @return the return code - 0 on success, negative number (< 0) on error. |  * @return the return code - 0 on success, negative number (< 0) on error. | ||||||
|  */ |  */ | ||||||
| extern int zip_entry_fread(struct zip_t *zip, const char *filename); | extern ZIP_EXPORT int zip_entry_fread(struct zip_t *zip, const char *filename); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Extracts the current zip entry using a callback function (on_extract). |  * Extracts the current zip entry using a callback function (on_extract). | ||||||
|  | @ -266,9 +313,9 @@ extern int zip_entry_fread(struct zip_t *zip, const char *filename); | ||||||
|  * |  * | ||||||
|  * @return the return code - 0 on success, negative number (< 0) on error. |  * @return the return code - 0 on success, negative number (< 0) on error. | ||||||
|  */ |  */ | ||||||
| extern int | extern ZIP_EXPORT int | ||||||
| zip_entry_extract(struct zip_t *zip, | zip_entry_extract(struct zip_t *zip, | ||||||
|                   size_t (*on_extract)(void *arg, unsigned long long offset, |                   size_t (*on_extract)(void *arg, uint64_t offset, | ||||||
|                                        const void *data, size_t size), |                                        const void *data, size_t size), | ||||||
|                   void *arg); |                   void *arg); | ||||||
| 
 | 
 | ||||||
|  | @ -280,40 +327,18 @@ zip_entry_extract(struct zip_t *zip, | ||||||
|  * @return the return code - the number of entries on success, negative number |  * @return the return code - the number of entries on success, negative number | ||||||
|  *         (< 0) on error. |  *         (< 0) on error. | ||||||
|  */ |  */ | ||||||
| extern int zip_total_entries(struct zip_t *zip); | extern ZIP_EXPORT ssize_t zip_entries_total(struct zip_t *zip); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Creates a new archive and puts files into a single zip archive. |  * Deletes zip archive entries. | ||||||
|  * |  * | ||||||
|  * @param zipname zip archive file. |  * @param zip zip archive handler. | ||||||
|  * @param filenames input files. |  * @param entries array of zip archive entries to be deleted. | ||||||
|  * @param len: number of input files. |  * @param len the number of entries to be deleted. | ||||||
|  * |  * @return the number of deleted entries, or negative number (< 0) on error. | ||||||
|  * @return the return code - 0 on success, negative number (< 0) on error. |  | ||||||
|  */ |  */ | ||||||
| extern int zip_create(const char *zipname, const char *filenames[], size_t len); | extern ZIP_EXPORT ssize_t zip_entries_delete(struct zip_t *zip, | ||||||
| 
 |                                              char *const entries[], 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. |  | ||||||
|  * |  | ||||||
|  * @param zipname zip archive file. |  | ||||||
|  * @param dir output directory. |  | ||||||
|  * @param on_extract_entry on extract callback. |  | ||||||
|  * @param arg opaque pointer. |  | ||||||
|  * |  | ||||||
|  * @return 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); |  | ||||||
| // temporary working unzip solution
 |  | ||||||
| extern int zip_extract_without_callback(const char *zipname, const char *dir); |  | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Extracts a zip archive stream into directory. |  * Extracts a zip archive stream into directory. | ||||||
|  | @ -332,12 +357,76 @@ extern int zip_extract_without_callback(const char *zipname, const char *dir); | ||||||
|  * |  * | ||||||
|  * @return the return code - 0 on success, negative number (< 0) on error. |  * @return the return code - 0 on success, negative number (< 0) on error. | ||||||
|  */ |  */ | ||||||
| extern int zip_extract_stream(const char *stream, size_t size, const char *dir, | extern ZIP_EXPORT int | ||||||
|                               int (*on_extract)(const char *filename, | zip_stream_extract(const char *stream, size_t size, const char *dir, | ||||||
|                                                 void *arg), |                    int (*on_extract)(const char *filename, void *arg), | ||||||
|                               void *arg); |                    void *arg); | ||||||
| /** @} */ |  | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Opens zip archive stream into memory. | ||||||
|  |  * | ||||||
|  |  * @param stream zip archive stream. | ||||||
|  |  * @param size stream size. | ||||||
|  |  * | ||||||
|  |  * @return the zip archive handler or NULL on error | ||||||
|  |  */ | ||||||
|  | extern ZIP_EXPORT struct zip_t *zip_stream_open(const char *stream, size_t size, | ||||||
|  |                                                 int level, char mode); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Copy zip archive stream output buffer. | ||||||
|  |  * | ||||||
|  |  * @param zip zip archive handler. | ||||||
|  |  * @param buf output buffer. User should free buf. | ||||||
|  |  * @param bufsize output buffer size (in bytes). | ||||||
|  |  * | ||||||
|  |  * @return copy size | ||||||
|  |  */ | ||||||
|  | extern ZIP_EXPORT ssize_t zip_stream_copy(struct zip_t *zip, void **buf, | ||||||
|  |                                           size_t *bufsize); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Close zip archive releases resources. | ||||||
|  |  * | ||||||
|  |  * @param zip zip archive handler. | ||||||
|  |  * | ||||||
|  |  * @return | ||||||
|  |  */ | ||||||
|  | extern ZIP_EXPORT void zip_stream_close(struct zip_t *zip); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Creates a new archive and puts files into a single zip archive. | ||||||
|  |  * | ||||||
|  |  * @param zipname zip archive file. | ||||||
|  |  * @param filenames input files. | ||||||
|  |  * @param len: number of input files. | ||||||
|  |  * | ||||||
|  |  * @return the return code - 0 on success, negative number (< 0) on error. | ||||||
|  |  */ | ||||||
|  | extern ZIP_EXPORT 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. | ||||||
|  |  * | ||||||
|  |  * @param zipname zip archive file. | ||||||
|  |  * @param dir output directory. | ||||||
|  |  * @param on_extract_entry on extract callback. | ||||||
|  |  * @param arg opaque pointer. | ||||||
|  |  * | ||||||
|  |  * @return the return code - 0 on success, negative number (< 0) on error. | ||||||
|  |  */ | ||||||
|  | extern ZIP_EXPORT int zip_extract(const char *zipname, const char *dir, | ||||||
|  |                                   int (*on_extract_entry)(const char *filename, | ||||||
|  |                                                           void *arg), | ||||||
|  |                                   void *arg); | ||||||
|  | /** @} */ | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue