You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
302 lines
14 KiB
302 lines
14 KiB
/* mz_compat.h -- Backwards compatible interface for older versions |
|
Version 2.3.3, June 10, 2018 |
|
part of the MiniZip project |
|
|
|
Copyright (C) 2010-2018 Nathan Moinvaziri |
|
https://github.com/nmoinvaz/minizip |
|
Copyright (C) 1998-2010 Gilles Vollant |
|
http://www.winimage.com/zLibDll/minizip.html |
|
|
|
This program is distributed under the terms of the same license as zlib. |
|
See the accompanying LICENSE file for the full text of the license. |
|
*/ |
|
|
|
#ifndef MZ_COMPAT_H |
|
#define MZ_COMPAT_H |
|
|
|
#include <stdint.h> |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
#ifdef HAVE_ZLIB |
|
#include "zlib.h" |
|
#else |
|
#define ZEXPORT |
|
#define MAX_WBITS (15) |
|
#define DEF_MEM_LEVEL (8) |
|
#endif |
|
|
|
/***************************************************************************/ |
|
|
|
#if defined(USE_FILE32API) |
|
# define MZ_USE_FILE32API |
|
# define fopen64 fopen |
|
# define ftello64 ftell |
|
# define fseeko64 fseek |
|
#else |
|
# if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || \ |
|
defined(__OpenBSD__) || defined(__APPLE__) || defined(__ANDROID__) |
|
# define fopen64 fopen |
|
# define ftello64 ftello |
|
# define fseeko64 fseeko |
|
# endif |
|
# ifdef _MSC_VER |
|
# define fopen64 fopen |
|
# if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC))) |
|
# define ftello64 _ftelli64 |
|
# define fseeko64 _fseeki64 |
|
# else /* old MSC */ |
|
# define ftello64 ftell |
|
# define fseeko64 fseek |
|
# endif |
|
# endif |
|
#endif |
|
|
|
/***************************************************************************/ |
|
|
|
#if defined(STRICTZIP) || defined(STRICTZIPUNZIP) |
|
/* like the STRICT of WIN32, we define a pointer that cannot be converted |
|
from (void*) without cast */ |
|
typedef struct TagzipFile__ { int unused; } zip_file__; |
|
typedef zip_file__ *zipFile; |
|
#else |
|
typedef void *zipFile; |
|
#endif |
|
|
|
/***************************************************************************/ |
|
|
|
typedef void *zlib_filefunc_def; |
|
typedef void *zlib_filefunc64_def; |
|
typedef const char *zipcharpc; |
|
|
|
typedef struct tm tm_unz; |
|
typedef struct tm tm_zip; |
|
|
|
typedef uint64_t ZPOS64_T; |
|
|
|
/***************************************************************************/ |
|
|
|
typedef struct |
|
{ |
|
uint32_t dosDate; |
|
struct tm tmz_date; |
|
uint16_t internal_fa; // internal file attributes 2 bytes |
|
uint32_t external_fa; // external file attributes 4 bytes |
|
} zip_fileinfo; |
|
|
|
/***************************************************************************/ |
|
|
|
#define ZIP_OK (0) |
|
#define ZIP_EOF (0) |
|
#define ZIP_ERRNO (-1) |
|
#define ZIP_PARAMERROR (-102) |
|
#define ZIP_BADZIPFILE (-103) |
|
#define ZIP_INTERNALERROR (-104) |
|
|
|
#define Z_BZIP2ED (12) |
|
|
|
#define APPEND_STATUS_CREATE (1) |
|
#define APPEND_STATUS_CREATEAFTER (2) |
|
#define APPEND_STATUS_ADDINZIP (3) |
|
|
|
/***************************************************************************/ |
|
|
|
extern zipFile ZEXPORT zipOpen(const char *path, int append); |
|
extern zipFile ZEXPORT zipOpen64(const void *path, int append); |
|
extern zipFile ZEXPORT zipOpen2(const char *path, int append, const char **globalcomment, |
|
zlib_filefunc_def *pzlib_filefunc_def); |
|
extern zipFile ZEXPORT zipOpen2_64(const void *path, int append, const char **globalcomment, |
|
zlib_filefunc64_def *pzlib_filefunc_def); |
|
|
|
extern int ZEXPORT zipOpenNewFileInZip3(zipFile file, const char *filename, const zip_fileinfo *zipfi, |
|
const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, |
|
uint16_t size_extrafield_global, const char *comment, uint16_t compression_method, int level, |
|
int raw, int windowBits, int memLevel, int strategy, const char *password, |
|
uint32_t crc_for_crypting); |
|
extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, |
|
const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, |
|
uint16_t size_extrafield_global, const char *comment, uint16_t compression_method, int level, |
|
int raw, int windowBits, int memLevel, int strategy, const char *password, |
|
uint32_t crc_for_crypting, int zip64); |
|
extern int ZEXPORT zipOpenNewFileInZip4(zipFile file, const char *filename, const zip_fileinfo *zipfi, |
|
const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, |
|
uint16_t size_extrafield_global, const char *comment, uint16_t compression_method, int level, |
|
int raw, int windowBits, int memLevel, int strategy, const char *password, |
|
uint32_t crc_for_crypting, uint16_t version_madeby, uint16_t flag_base); |
|
extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, |
|
const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, |
|
uint16_t size_extrafield_global, const char *comment, uint16_t compression_method, int level, |
|
int raw, int windowBits, int memLevel, int strategy, const char *password, |
|
uint32_t crc_for_crypting, uint16_t version_madeby, uint16_t flag_base, int zip64); |
|
extern int ZEXPORT zipOpenNewFileInZip5(zipFile file, const char *filename, const zip_fileinfo *zipfi, |
|
const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, |
|
uint16_t size_extrafield_global, const char *comment, uint16_t compression_method, int level, |
|
int raw, int windowBits, int memLevel, int strategy, const char *password, |
|
uint32_t crc_for_crypting, uint16_t version_madeby, uint16_t flag_base, int zip64); |
|
|
|
extern int ZEXPORT zipWriteInFileInZip(zipFile file, const void *buf, uint32_t len); |
|
|
|
extern int ZEXPORT zipCloseFileInZipRaw(zipFile file, uint32_t uncompressed_size, uint32_t crc32); |
|
extern int ZEXPORT zipCloseFileInZipRaw64(zipFile file, uint64_t uncompressed_size, uint32_t crc32); |
|
extern int ZEXPORT zipCloseFileInZip(zipFile file); |
|
extern int ZEXPORT zipCloseFileInZip64(zipFile file); |
|
|
|
extern int ZEXPORT zipClose(zipFile file, const char *global_comment); |
|
extern int ZEXPORT zipClose_64(zipFile file, const char *global_comment); |
|
extern int ZEXPORT zipClose2_64(zipFile file, const char *global_comment, uint16_t version_madeby); |
|
|
|
/***************************************************************************/ |
|
|
|
#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) |
|
/* like the STRICT of WIN32, we define a pointer that cannot be converted |
|
from (void*) without cast */ |
|
typedef struct TagunzFile__ { int unused; } unz_file__; |
|
typedef unz_file__ *unzFile; |
|
#else |
|
typedef void *unzFile; |
|
#endif |
|
|
|
/***************************************************************************/ |
|
|
|
#define UNZ_OK (0) |
|
#define UNZ_END_OF_LIST_OF_FILE (-100) |
|
#define UNZ_ERRNO (-1) |
|
#define UNZ_EOF (0) |
|
#define UNZ_PARAMERROR (-102) |
|
#define UNZ_BADZIPFILE (-103) |
|
#define UNZ_INTERNALERROR (-104) |
|
#define UNZ_CRCERROR (-105) |
|
#define UNZ_BADPASSWORD (-106) |
|
|
|
/***************************************************************************/ |
|
|
|
typedef struct unz_global_info64_s |
|
{ |
|
uint64_t number_entry; // total number of entries in the central dir on this disk |
|
uint32_t number_disk_with_CD; // number the the disk with central dir, used for spanning ZIP |
|
uint16_t size_comment; // size of the global comment of the zipfile |
|
} unz_global_info64; |
|
|
|
typedef struct unz_global_info_s |
|
{ |
|
uint32_t number_entry; // total number of entries in the central dir on this disk |
|
uint32_t number_disk_with_CD; // number the the disk with central dir, used for spanning ZIP |
|
uint16_t size_comment; // size of the global comment of the zipfile |
|
} unz_global_info; |
|
|
|
typedef struct unz_file_info64_s |
|
{ |
|
uint16_t version; // version made by 2 bytes |
|
uint16_t version_needed; // version needed to extract 2 bytes |
|
uint16_t flag; // general purpose bit flag 2 bytes |
|
uint16_t compression_method; // compression method 2 bytes |
|
uint32_t dosDate; // last mod file date in Dos fmt 4 bytes |
|
struct tm tmu_date; |
|
uint32_t crc; // crc-32 4 bytes |
|
uint64_t compressed_size; // compressed size 8 bytes |
|
uint64_t uncompressed_size; // uncompressed size 8 bytes |
|
uint16_t size_filename; // filename length 2 bytes |
|
uint16_t size_file_extra; // extra field length 2 bytes |
|
uint16_t size_file_comment; // file comment length 2 bytes |
|
|
|
uint32_t disk_num_start; // disk number start 4 bytes |
|
uint16_t internal_fa; // internal file attributes 2 bytes |
|
uint32_t external_fa; // external file attributes 4 bytes |
|
|
|
uint64_t disk_offset; |
|
|
|
uint16_t size_file_extra_internal; |
|
} unz_file_info64; |
|
|
|
typedef struct unz_file_info_s |
|
{ |
|
uint16_t version; // version made by 2 bytes |
|
uint16_t version_needed; // version needed to extract 2 bytes |
|
uint16_t flag; // general purpose bit flag 2 bytes |
|
uint16_t compression_method; // compression method 2 bytes |
|
uint32_t dosDate; // last mod file date in Dos fmt 4 bytes |
|
struct tm tmu_date; |
|
uint32_t crc; // crc-32 4 bytes |
|
uint32_t compressed_size; // compressed size 4 bytes |
|
uint32_t uncompressed_size; // uncompressed size 4 bytes |
|
uint16_t size_filename; // filename length 2 bytes |
|
uint16_t size_file_extra; // extra field length 2 bytes |
|
uint16_t size_file_comment; // file comment length 2 bytes |
|
|
|
uint16_t disk_num_start; // disk number start 2 bytes |
|
uint16_t internal_fa; // internal file attributes 2 bytes |
|
uint32_t external_fa; // external file attributes 4 bytes |
|
|
|
uint64_t disk_offset; |
|
} unz_file_info; |
|
|
|
/***************************************************************************/ |
|
|
|
typedef int (*unzFileNameComparer)(unzFile file, const char *filename1, const char *filename2); |
|
typedef int (*unzIteratorFunction)(unzFile file); |
|
typedef int (*unzIteratorFunction2)(unzFile file, unz_file_info64 *pfile_info, char *filename, |
|
uint16_t filename_size, void *extrafield, uint16_t extrafield_size, char *comment, uint16_t comment_size); |
|
|
|
/***************************************************************************/ |
|
|
|
extern unzFile ZEXPORT unzOpen(const char *path); |
|
extern unzFile ZEXPORT unzOpen64(const void *path); |
|
extern unzFile ZEXPORT unzOpen2(const char *path, zlib_filefunc_def *pzlib_filefunc_def); |
|
extern unzFile ZEXPORT unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def); |
|
|
|
extern int ZEXPORT unzClose(unzFile file); |
|
extern int ZEXPORT unzGetGlobalInfo(unzFile file, unz_global_info* pglobal_info32); |
|
extern int ZEXPORT unzGetGlobalInfo64(unzFile file, unz_global_info64 *pglobal_info); |
|
extern int ZEXPORT unzGetGlobalComment(unzFile file, char *comment, uint16_t comment_size); |
|
extern int ZEXPORT unzOpenCurrentFile(unzFile file); |
|
extern int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char *password); |
|
extern int ZEXPORT unzOpenCurrentFile2(unzFile file, int *method, int *level, int raw); |
|
extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int *method, int *level, int raw, const char *password); |
|
extern int ZEXPORT unzReadCurrentFile(unzFile file, void *buf, uint32_t len); |
|
extern int ZEXPORT unzCloseCurrentFile(unzFile file); |
|
|
|
extern int ZEXPORT unzGetCurrentFileInfo(unzFile file, unz_file_info *pfile_info, char *filename, |
|
uint16_t filename_size, void *extrafield, uint16_t extrafield_size, char *comment, uint16_t comment_size); |
|
extern int ZEXPORT unzGetCurrentFileInfo64(unzFile file, unz_file_info64 * pfile_info, char *filename, |
|
uint16_t filename_size, void *extrafield, uint16_t extrafield_size, char *comment, uint16_t comment_size); |
|
extern int ZEXPORT unzGoToFirstFile(unzFile file); |
|
extern int ZEXPORT unzGoToNextFile(unzFile file); |
|
extern int ZEXPORT unzLocateFile(unzFile file, const char *filename, unzFileNameComparer filename_compare_func); |
|
|
|
extern int64_t ZEXPORT unzGetOffset64(unzFile file); |
|
extern int32_t ZEXPORT unzGetOffset(unzFile file); |
|
extern int ZEXPORT unzSetOffset64(unzFile file, uint64_t pos); |
|
extern int ZEXPORT unzSetOffset(unzFile file, uint32_t pos); |
|
extern int ZEXPORT unzGetLocalExtrafield(unzFile file, void *buf, unsigned len); |
|
|
|
/***************************************************************************/ |
|
|
|
void fill_fopen_filefunc(zlib_filefunc_def *pzlib_filefunc_def); |
|
void fill_fopen64_filefunc(zlib_filefunc64_def *pzlib_filefunc_def); |
|
void fill_win32_filefunc(zlib_filefunc_def *pzlib_filefunc_def); |
|
void fill_win32_filefunc64(zlib_filefunc64_def *pzlib_filefunc_def); |
|
void fill_win32_filefunc64A(zlib_filefunc64_def *pzlib_filefunc_def); |
|
void fill_win32_filefunc64W(zlib_filefunc64_def *pzlib_filefunc_def); |
|
|
|
/***************************************************************************/ |
|
|
|
#define check_file_exists mz_os_file_exists |
|
#define dosdate_to_tm mz_zip_dosdate_to_tm |
|
#define change_file_date mz_os_set_file_date |
|
#define get_file_date mz_os_get_file_date |
|
#define is_large_file(x) (mz_os_get_file_size(x) >= UINT32_MAX) |
|
#define makedir mz_make_dir |
|
#define get_file_crc(p,b,bs,rc) mz_get_file_crc(p,rc) |
|
|
|
#define MKDIR mz_os_make_dir |
|
#define CHDIR chdir |
|
|
|
/***************************************************************************/ |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#endif
|
|
|