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.
303 lines
14 KiB
303 lines
14 KiB
3 years ago
|
/* 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
|