kusano 7d535a
/* zip.h -- IO on .zip files using zlib
kusano 7d535a
   Version 1.1, February 14h, 2010
kusano 7d535a
   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
kusano 7d535a
kusano 7d535a
         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
kusano 7d535a
kusano 7d535a
         Modifications for Zip64 support
kusano 7d535a
         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
kusano 7d535a
kusano 7d535a
         For more info read MiniZip_info.txt
kusano 7d535a
kusano 7d535a
         ---------------------------------------------------------------------------
kusano 7d535a
kusano 7d535a
   Condition of use and distribution are the same than zlib :
kusano 7d535a
kusano 7d535a
  This software is provided 'as-is', without any express or implied
kusano 7d535a
  warranty.  In no event will the authors be held liable for any damages
kusano 7d535a
  arising from the use of this software.
kusano 7d535a
kusano 7d535a
  Permission is granted to anyone to use this software for any purpose,
kusano 7d535a
  including commercial applications, and to alter it and redistribute it
kusano 7d535a
  freely, subject to the following restrictions:
kusano 7d535a
kusano 7d535a
  1. The origin of this software must not be misrepresented; you must not
kusano 7d535a
     claim that you wrote the original software. If you use this software
kusano 7d535a
     in a product, an acknowledgment in the product documentation would be
kusano 7d535a
     appreciated but is not required.
kusano 7d535a
  2. Altered source versions must be plainly marked as such, and must not be
kusano 7d535a
     misrepresented as being the original software.
kusano 7d535a
  3. This notice may not be removed or altered from any source distribution.
kusano 7d535a
kusano 7d535a
        ---------------------------------------------------------------------------
kusano 7d535a
kusano 7d535a
        Changes
kusano 7d535a
kusano 7d535a
        See header of zip.h
kusano 7d535a
kusano 7d535a
*/
kusano 7d535a
kusano 7d535a
#ifndef _zip12_H
kusano 7d535a
#define _zip12_H
kusano 7d535a
kusano 7d535a
#ifdef __cplusplus
kusano 7d535a
extern "C" {
kusano 7d535a
#endif
kusano 7d535a
kusano 7d535a
//#define HAVE_BZIP2
kusano 7d535a
kusano 7d535a
#ifndef _ZLIB_H
kusano 7d535a
#include "zlib.h"
kusano 7d535a
#endif
kusano 7d535a
kusano 7d535a
#ifndef _ZLIBIOAPI_H
kusano 7d535a
#include "ioapi.h"
kusano 7d535a
#endif
kusano 7d535a
kusano 7d535a
#ifdef HAVE_BZIP2
kusano 7d535a
#include "bzlib.h"
kusano 7d535a
#endif
kusano 7d535a
kusano 7d535a
#define Z_BZIP2ED 12
kusano 7d535a
kusano 7d535a
#if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
kusano 7d535a
/* like the STRICT of WIN32, we define a pointer that cannot be converted
kusano 7d535a
    from (void*) without cast */
kusano 7d535a
typedef struct TagzipFile__ { int unused; } zipFile__;
kusano 7d535a
typedef zipFile__ *zipFile;
kusano 7d535a
#else
kusano 7d535a
typedef voidp zipFile;
kusano 7d535a
#endif
kusano 7d535a
kusano 7d535a
#define ZIP_OK                          (0)
kusano 7d535a
#define ZIP_EOF                         (0)
kusano 7d535a
#define ZIP_ERRNO                       (Z_ERRNO)
kusano 7d535a
#define ZIP_PARAMERROR                  (-102)
kusano 7d535a
#define ZIP_BADZIPFILE                  (-103)
kusano 7d535a
#define ZIP_INTERNALERROR               (-104)
kusano 7d535a
kusano 7d535a
#ifndef DEF_MEM_LEVEL
kusano 7d535a
#  if MAX_MEM_LEVEL >= 8
kusano 7d535a
#    define DEF_MEM_LEVEL 8
kusano 7d535a
#  else
kusano 7d535a
#    define DEF_MEM_LEVEL  MAX_MEM_LEVEL
kusano 7d535a
#  endif
kusano 7d535a
#endif
kusano 7d535a
/* default memLevel */
kusano 7d535a
kusano 7d535a
/* tm_zip contain date/time info */
kusano 7d535a
typedef struct tm_zip_s
kusano 7d535a
{
kusano 7d535a
    uInt tm_sec;            /* seconds after the minute - [0,59] */
kusano 7d535a
    uInt tm_min;            /* minutes after the hour - [0,59] */
kusano 7d535a
    uInt tm_hour;           /* hours since midnight - [0,23] */
kusano 7d535a
    uInt tm_mday;           /* day of the month - [1,31] */
kusano 7d535a
    uInt tm_mon;            /* months since January - [0,11] */
kusano 7d535a
    uInt tm_year;           /* years - [1980..2044] */
kusano 7d535a
} tm_zip;
kusano 7d535a
kusano 7d535a
typedef struct
kusano 7d535a
{
kusano 7d535a
    tm_zip      tmz_date;       /* date in understandable format           */
kusano 7d535a
    uLong       dosDate;       /* if dos_date == 0, tmu_date is used      */
kusano 7d535a
/*    uLong       flag;        */   /* general purpose bit flag        2 bytes */
kusano 7d535a
kusano 7d535a
    uLong       internal_fa;    /* internal file attributes        2 bytes */
kusano 7d535a
    uLong       external_fa;    /* external file attributes        4 bytes */
kusano 7d535a
} zip_fileinfo;
kusano 7d535a
kusano 7d535a
typedef const char* zipcharpc;
kusano 7d535a
kusano 7d535a
kusano 7d535a
#define APPEND_STATUS_CREATE        (0)
kusano 7d535a
#define APPEND_STATUS_CREATEAFTER   (1)
kusano 7d535a
#define APPEND_STATUS_ADDINZIP      (2)
kusano 7d535a
kusano 7d535a
extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
kusano 7d535a
extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));
kusano 7d535a
/*
kusano 7d535a
  Create a zipfile.
kusano 7d535a
     pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
kusano 7d535a
       an Unix computer "zlib/zlib113.zip".
kusano 7d535a
     if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
kusano 7d535a
       will be created at the end of the file.
kusano 7d535a
         (useful if the file contain a self extractor code)
kusano 7d535a
     if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will
kusano 7d535a
       add files in existing zip (be sure you don't add file that doesn't exist)
kusano 7d535a
     If the zipfile cannot be opened, the return value is NULL.
kusano 7d535a
     Else, the return value is a zipFile Handle, usable with other function
kusano 7d535a
       of this zip package.
kusano 7d535a
*/
kusano 7d535a
kusano 7d535a
/* Note : there is no delete function into a zipfile.
kusano 7d535a
   If you want delete file into a zipfile, you must open a zipfile, and create another
kusano 7d535a
   Of couse, you can use RAW reading and writing to copy the file you did not want delte
kusano 7d535a
*/
kusano 7d535a
kusano 7d535a
extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
kusano 7d535a
                                   int append,
kusano 7d535a
                                   zipcharpc* globalcomment,
kusano 7d535a
                                   zlib_filefunc_def* pzlib_filefunc_def));
kusano 7d535a
kusano 7d535a
extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
kusano 7d535a
                                   int append,
kusano 7d535a
                                   zipcharpc* globalcomment,
kusano 7d535a
                                   zlib_filefunc64_def* pzlib_filefunc_def));
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
kusano 7d535a
                       const char* filename,
kusano 7d535a
                       const zip_fileinfo* zipfi,
kusano 7d535a
                       const void* extrafield_local,
kusano 7d535a
                       uInt size_extrafield_local,
kusano 7d535a
                       const void* extrafield_global,
kusano 7d535a
                       uInt size_extrafield_global,
kusano 7d535a
                       const char* comment,
kusano 7d535a
                       int method,
kusano 7d535a
                       int level));
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
kusano 7d535a
                       const char* filename,
kusano 7d535a
                       const zip_fileinfo* zipfi,
kusano 7d535a
                       const void* extrafield_local,
kusano 7d535a
                       uInt size_extrafield_local,
kusano 7d535a
                       const void* extrafield_global,
kusano 7d535a
                       uInt size_extrafield_global,
kusano 7d535a
                       const char* comment,
kusano 7d535a
                       int method,
kusano 7d535a
                       int level,
kusano 7d535a
                       int zip64));
kusano 7d535a
kusano 7d535a
/*
kusano 7d535a
  Open a file in the ZIP for writing.
kusano 7d535a
  filename : the filename in zip (if NULL, '-' without quote will be used
kusano 7d535a
  *zipfi contain supplemental information
kusano 7d535a
  if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
kusano 7d535a
    contains the extrafield data the the local header
kusano 7d535a
  if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
kusano 7d535a
    contains the extrafield data the the local header
kusano 7d535a
  if comment != NULL, comment contain the comment string
kusano 7d535a
  method contain the compression method (0 for store, Z_DEFLATED for deflate)
kusano 7d535a
  level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
kusano 7d535a
  zip64 is set to 1 if a zip64 extended information block should be added to the local file header.
kusano 7d535a
                    this MUST be '1' if the uncompressed size is >= 0xffffffff.
kusano 7d535a
kusano 7d535a
*/
kusano 7d535a
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
kusano 7d535a
                                            const char* filename,
kusano 7d535a
                                            const zip_fileinfo* zipfi,
kusano 7d535a
                                            const void* extrafield_local,
kusano 7d535a
                                            uInt size_extrafield_local,
kusano 7d535a
                                            const void* extrafield_global,
kusano 7d535a
                                            uInt size_extrafield_global,
kusano 7d535a
                                            const char* comment,
kusano 7d535a
                                            int method,
kusano 7d535a
                                            int level,
kusano 7d535a
                                            int raw));
kusano 7d535a
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,
kusano 7d535a
                                            const char* filename,
kusano 7d535a
                                            const zip_fileinfo* zipfi,
kusano 7d535a
                                            const void* extrafield_local,
kusano 7d535a
                                            uInt size_extrafield_local,
kusano 7d535a
                                            const void* extrafield_global,
kusano 7d535a
                                            uInt size_extrafield_global,
kusano 7d535a
                                            const char* comment,
kusano 7d535a
                                            int method,
kusano 7d535a
                                            int level,
kusano 7d535a
                                            int raw,
kusano 7d535a
                                            int zip64));
kusano 7d535a
/*
kusano 7d535a
  Same than zipOpenNewFileInZip, except if raw=1, we write raw file
kusano 7d535a
 */
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
kusano 7d535a
                                            const char* filename,
kusano 7d535a
                                            const zip_fileinfo* zipfi,
kusano 7d535a
                                            const void* extrafield_local,
kusano 7d535a
                                            uInt size_extrafield_local,
kusano 7d535a
                                            const void* extrafield_global,
kusano 7d535a
                                            uInt size_extrafield_global,
kusano 7d535a
                                            const char* comment,
kusano 7d535a
                                            int method,
kusano 7d535a
                                            int level,
kusano 7d535a
                                            int raw,
kusano 7d535a
                                            int windowBits,
kusano 7d535a
                                            int memLevel,
kusano 7d535a
                                            int strategy,
kusano 7d535a
                                            const char* password,
kusano 7d535a
                                            uLong crcForCrypting));
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
kusano 7d535a
                                            const char* filename,
kusano 7d535a
                                            const zip_fileinfo* zipfi,
kusano 7d535a
                                            const void* extrafield_local,
kusano 7d535a
                                            uInt size_extrafield_local,
kusano 7d535a
                                            const void* extrafield_global,
kusano 7d535a
                                            uInt size_extrafield_global,
kusano 7d535a
                                            const char* comment,
kusano 7d535a
                                            int method,
kusano 7d535a
                                            int level,
kusano 7d535a
                                            int raw,
kusano 7d535a
                                            int windowBits,
kusano 7d535a
                                            int memLevel,
kusano 7d535a
                                            int strategy,
kusano 7d535a
                                            const char* password,
kusano 7d535a
                                            uLong crcForCrypting,
kusano 7d535a
                                            int zip64
kusano 7d535a
                                            ));
kusano 7d535a
kusano 7d535a
/*
kusano 7d535a
  Same than zipOpenNewFileInZip2, except
kusano 7d535a
    windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
kusano 7d535a
    password : crypting password (NULL for no crypting)
kusano 7d535a
    crcForCrypting : crc of file to compress (needed for crypting)
kusano 7d535a
 */
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
kusano 7d535a
                                            const char* filename,
kusano 7d535a
                                            const zip_fileinfo* zipfi,
kusano 7d535a
                                            const void* extrafield_local,
kusano 7d535a
                                            uInt size_extrafield_local,
kusano 7d535a
                                            const void* extrafield_global,
kusano 7d535a
                                            uInt size_extrafield_global,
kusano 7d535a
                                            const char* comment,
kusano 7d535a
                                            int method,
kusano 7d535a
                                            int level,
kusano 7d535a
                                            int raw,
kusano 7d535a
                                            int windowBits,
kusano 7d535a
                                            int memLevel,
kusano 7d535a
                                            int strategy,
kusano 7d535a
                                            const char* password,
kusano 7d535a
                                            uLong crcForCrypting,
kusano 7d535a
                                            uLong versionMadeBy,
kusano 7d535a
                                            uLong flagBase
kusano 7d535a
                                            ));
kusano 7d535a
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
kusano 7d535a
                                            const char* filename,
kusano 7d535a
                                            const zip_fileinfo* zipfi,
kusano 7d535a
                                            const void* extrafield_local,
kusano 7d535a
                                            uInt size_extrafield_local,
kusano 7d535a
                                            const void* extrafield_global,
kusano 7d535a
                                            uInt size_extrafield_global,
kusano 7d535a
                                            const char* comment,
kusano 7d535a
                                            int method,
kusano 7d535a
                                            int level,
kusano 7d535a
                                            int raw,
kusano 7d535a
                                            int windowBits,
kusano 7d535a
                                            int memLevel,
kusano 7d535a
                                            int strategy,
kusano 7d535a
                                            const char* password,
kusano 7d535a
                                            uLong crcForCrypting,
kusano 7d535a
                                            uLong versionMadeBy,
kusano 7d535a
                                            uLong flagBase,
kusano 7d535a
                                            int zip64
kusano 7d535a
                                            ));
kusano 7d535a
/*
kusano 7d535a
  Same than zipOpenNewFileInZip4, except
kusano 7d535a
    versionMadeBy : value for Version made by field
kusano 7d535a
    flag : value for flag field (compression level info will be added)
kusano 7d535a
 */
kusano 7d535a
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
kusano 7d535a
                       const void* buf,
kusano 7d535a
                       unsigned len));
kusano 7d535a
/*
kusano 7d535a
  Write data in the zipfile
kusano 7d535a
*/
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
kusano 7d535a
/*
kusano 7d535a
  Close the current file in the zipfile
kusano 7d535a
*/
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
kusano 7d535a
                                            uLong uncompressed_size,
kusano 7d535a
                                            uLong crc32));
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
kusano 7d535a
                                            ZPOS64_T uncompressed_size,
kusano 7d535a
                                            uLong crc32));
kusano 7d535a
kusano 7d535a
/*
kusano 7d535a
  Close the current file in the zipfile, for file opened with
kusano 7d535a
    parameter raw=1 in zipOpenNewFileInZip2
kusano 7d535a
  uncompressed_size and crc32 are value for the uncompressed size
kusano 7d535a
*/
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipClose OF((zipFile file,
kusano 7d535a
                const char* global_comment));
kusano 7d535a
/*
kusano 7d535a
  Close the zipfile
kusano 7d535a
*/
kusano 7d535a
kusano 7d535a
kusano 7d535a
extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));
kusano 7d535a
/*
kusano 7d535a
  zipRemoveExtraInfoBlock -  Added by Mathias Svensson
kusano 7d535a
kusano 7d535a
  Remove extra information block from a extra information data for the local file header or central directory header
kusano 7d535a
kusano 7d535a
  It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.
kusano 7d535a
kusano 7d535a
  0x0001 is the signature header for the ZIP64 extra information blocks
kusano 7d535a
kusano 7d535a
  usage.
kusano 7d535a
                        Remove ZIP64 Extra information from a central director extra field data
kusano 7d535a
              zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001);
kusano 7d535a
kusano 7d535a
                        Remove ZIP64 Extra information from a Local File Header extra field data
kusano 7d535a
        zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001);
kusano 7d535a
*/
kusano 7d535a
kusano 7d535a
#ifdef __cplusplus
kusano 7d535a
}
kusano 7d535a
#endif
kusano 7d535a
kusano 7d535a
#endif /* _zip64_H */