mirror of
				https://github.com/chibicitiberiu/rainmeter-studio.git
				synced 2024-02-24 04:33:31 +00:00 
			
		
		
		
	- Merged Rainstaller and RainBackup into SkinInstaller. The Rainstaller code is not yet refactored, but is fully functional.
- Added zip64 support - Removed Addons\
This commit is contained in:
		
							
								
								
									
										131
									
								
								SkinInstaller/zlib/minizip/crypt.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								SkinInstaller/zlib/minizip/crypt.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
			
		||||
/* crypt.h -- base code for crypt/uncrypt ZIPfile
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
   Version 1.01e, February 12th, 2005
 | 
			
		||||
 | 
			
		||||
   Copyright (C) 1998-2005 Gilles Vollant
 | 
			
		||||
 | 
			
		||||
   This code is a modified version of crypting code in Infozip distribution
 | 
			
		||||
 | 
			
		||||
   The encryption/decryption parts of this source code (as opposed to the
 | 
			
		||||
   non-echoing password parts) were originally written in Europe.  The
 | 
			
		||||
   whole source package can be freely distributed, including from the USA.
 | 
			
		||||
   (Prior to January 2000, re-export from the US was a violation of US law.)
 | 
			
		||||
 | 
			
		||||
   This encryption code is a direct transcription of the algorithm from
 | 
			
		||||
   Roger Schlafly, described by Phil Katz in the file appnote.txt.  This
 | 
			
		||||
   file (appnote.txt) is distributed with the PKZIP program (even in the
 | 
			
		||||
   version without encryption capabilities).
 | 
			
		||||
 | 
			
		||||
   If you don't need crypting in your application, just define symbols
 | 
			
		||||
   NOCRYPT and NOUNCRYPT.
 | 
			
		||||
 | 
			
		||||
   This code support the "Traditional PKWARE Encryption".
 | 
			
		||||
 | 
			
		||||
   The new AES encryption added on Zip format by Winzip (see the page
 | 
			
		||||
   http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong
 | 
			
		||||
   Encryption is not supported.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 * Return the next byte in the pseudo-random sequence
 | 
			
		||||
 */
 | 
			
		||||
static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab)
 | 
			
		||||
{
 | 
			
		||||
    unsigned temp;  /* POTENTIAL BUG:  temp*(temp^1) may overflow in an
 | 
			
		||||
                     * unpredictable manner on 16-bit systems; not a problem
 | 
			
		||||
                     * with any known compiler so far, though */
 | 
			
		||||
 | 
			
		||||
    temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
 | 
			
		||||
    return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 * Update the encryption keys with the next byte of plain text
 | 
			
		||||
 */
 | 
			
		||||
static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c)
 | 
			
		||||
{
 | 
			
		||||
    (*(pkeys+0)) = CRC32((*(pkeys+0)), c);
 | 
			
		||||
    (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
 | 
			
		||||
    (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
 | 
			
		||||
    {
 | 
			
		||||
      register int keyshift = (int)((*(pkeys+1)) >> 24);
 | 
			
		||||
      (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);
 | 
			
		||||
    }
 | 
			
		||||
    return c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
 * Initialize the encryption keys and the random header according to
 | 
			
		||||
 * the given password.
 | 
			
		||||
 */
 | 
			
		||||
static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab)
 | 
			
		||||
{
 | 
			
		||||
    *(pkeys+0) = 305419896L;
 | 
			
		||||
    *(pkeys+1) = 591751049L;
 | 
			
		||||
    *(pkeys+2) = 878082192L;
 | 
			
		||||
    while (*passwd != '\0') {
 | 
			
		||||
        update_keys(pkeys,pcrc_32_tab,(int)*passwd);
 | 
			
		||||
        passwd++;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define zdecode(pkeys,pcrc_32_tab,c) \
 | 
			
		||||
    (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
 | 
			
		||||
 | 
			
		||||
#define zencode(pkeys,pcrc_32_tab,c,t) \
 | 
			
		||||
    (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
 | 
			
		||||
 | 
			
		||||
#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
 | 
			
		||||
 | 
			
		||||
#define RAND_HEAD_LEN  12
 | 
			
		||||
   /* "last resort" source for second part of crypt seed pattern */
 | 
			
		||||
#  ifndef ZCR_SEED2
 | 
			
		||||
#    define ZCR_SEED2 3141592654UL     /* use PI as default pattern */
 | 
			
		||||
#  endif
 | 
			
		||||
 | 
			
		||||
static int crypthead(const char* passwd,      /* password string */
 | 
			
		||||
                     unsigned char* buf,      /* where to write header */
 | 
			
		||||
                     int bufSize,
 | 
			
		||||
                     unsigned long* pkeys,
 | 
			
		||||
                     const unsigned long* pcrc_32_tab,
 | 
			
		||||
                     unsigned long crcForCrypting)
 | 
			
		||||
{
 | 
			
		||||
    int n;                       /* index in random header */
 | 
			
		||||
    int t;                       /* temporary */
 | 
			
		||||
    int c;                       /* random byte */
 | 
			
		||||
    unsigned char header[RAND_HEAD_LEN-2]; /* random header */
 | 
			
		||||
    static unsigned calls = 0;   /* ensure different random header each time */
 | 
			
		||||
 | 
			
		||||
    if (bufSize<RAND_HEAD_LEN)
 | 
			
		||||
      return 0;
 | 
			
		||||
 | 
			
		||||
    /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
 | 
			
		||||
     * output of rand() to get less predictability, since rand() is
 | 
			
		||||
     * often poorly implemented.
 | 
			
		||||
     */
 | 
			
		||||
    if (++calls == 1)
 | 
			
		||||
    {
 | 
			
		||||
        srand((unsigned)(time(NULL) ^ ZCR_SEED2));
 | 
			
		||||
    }
 | 
			
		||||
    init_keys(passwd, pkeys, pcrc_32_tab);
 | 
			
		||||
    for (n = 0; n < RAND_HEAD_LEN-2; n++)
 | 
			
		||||
    {
 | 
			
		||||
        c = (rand() >> 7) & 0xff;
 | 
			
		||||
        header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);
 | 
			
		||||
    }
 | 
			
		||||
    /* Encrypt random header (last two bytes is high word of crc) */
 | 
			
		||||
    init_keys(passwd, pkeys, pcrc_32_tab);
 | 
			
		||||
    for (n = 0; n < RAND_HEAD_LEN-2; n++)
 | 
			
		||||
    {
 | 
			
		||||
        buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);
 | 
			
		||||
    }
 | 
			
		||||
    buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);
 | 
			
		||||
    buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);
 | 
			
		||||
    return n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										235
									
								
								SkinInstaller/zlib/minizip/ioapi.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								SkinInstaller/zlib/minizip/ioapi.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,235 @@
 | 
			
		||||
/* ioapi.h -- IO base function header for compress/uncompress .zip
 | 
			
		||||
   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Modifications for Zip64 support
 | 
			
		||||
         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
 | 
			
		||||
 | 
			
		||||
         For more info read MiniZip_info.txt
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if (defined(_WIN32))
 | 
			
		||||
        #define _CRT_SECURE_NO_WARNINGS
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ioapi.h"
 | 
			
		||||
 | 
			
		||||
voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)
 | 
			
		||||
{
 | 
			
		||||
    if (pfilefunc->zfile_func64.zopen64_file != NULL)
 | 
			
		||||
        return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)
 | 
			
		||||
{
 | 
			
		||||
    if (pfilefunc->zfile_func64.zseek64_file != NULL)
 | 
			
		||||
        return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        uLong offsetTruncated = (uLong)offset;
 | 
			
		||||
        if (offsetTruncated != offset)
 | 
			
		||||
            return -1;
 | 
			
		||||
        else
 | 
			
		||||
            return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)
 | 
			
		||||
{
 | 
			
		||||
    if (pfilefunc->zfile_func64.zseek64_file != NULL)
 | 
			
		||||
        return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
 | 
			
		||||
        if ((tell_uLong) == ((uLong)-1))
 | 
			
		||||
            return (ZPOS64_T)-1;
 | 
			
		||||
        else
 | 
			
		||||
            return tell_uLong;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)
 | 
			
		||||
{
 | 
			
		||||
    p_filefunc64_32->zfile_func64.zopen64_file = NULL;
 | 
			
		||||
    p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
 | 
			
		||||
    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
 | 
			
		||||
    p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
 | 
			
		||||
    p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
 | 
			
		||||
    p_filefunc64_32->zfile_func64.ztell64_file = NULL;
 | 
			
		||||
    p_filefunc64_32->zfile_func64.zseek64_file = NULL;
 | 
			
		||||
    p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;
 | 
			
		||||
    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
 | 
			
		||||
    p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;
 | 
			
		||||
    p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;
 | 
			
		||||
    p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static voidpf  ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));
 | 
			
		||||
static uLong   ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
 | 
			
		||||
static uLong   ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));
 | 
			
		||||
static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));
 | 
			
		||||
static long    ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
 | 
			
		||||
static int     ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
 | 
			
		||||
static int     ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
 | 
			
		||||
 | 
			
		||||
static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
 | 
			
		||||
{
 | 
			
		||||
    FILE* file = NULL;
 | 
			
		||||
    const char* mode_fopen = NULL;
 | 
			
		||||
    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
 | 
			
		||||
        mode_fopen = "rb";
 | 
			
		||||
    else
 | 
			
		||||
    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
 | 
			
		||||
        mode_fopen = "r+b";
 | 
			
		||||
    else
 | 
			
		||||
    if (mode & ZLIB_FILEFUNC_MODE_CREATE)
 | 
			
		||||
        mode_fopen = "wb";
 | 
			
		||||
 | 
			
		||||
    if ((filename!=NULL) && (mode_fopen != NULL))
 | 
			
		||||
        file = fopen(filename, mode_fopen);
 | 
			
		||||
    return file;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
 | 
			
		||||
{
 | 
			
		||||
    FILE* file = NULL;
 | 
			
		||||
    const char* mode_fopen = NULL;
 | 
			
		||||
    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
 | 
			
		||||
        mode_fopen = "rb";
 | 
			
		||||
    else
 | 
			
		||||
    if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
 | 
			
		||||
        mode_fopen = "r+b";
 | 
			
		||||
    else
 | 
			
		||||
    if (mode & ZLIB_FILEFUNC_MODE_CREATE)
 | 
			
		||||
        mode_fopen = "wb";
 | 
			
		||||
 | 
			
		||||
    if ((filename!=NULL) && (mode_fopen != NULL))
 | 
			
		||||
        file = fopen64((const char*)filename, mode_fopen);
 | 
			
		||||
    return file;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
 | 
			
		||||
{
 | 
			
		||||
    uLong ret;
 | 
			
		||||
    ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
 | 
			
		||||
{
 | 
			
		||||
    uLong ret;
 | 
			
		||||
    ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
 | 
			
		||||
{
 | 
			
		||||
    long ret;
 | 
			
		||||
    ret = ftell((FILE *)stream);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
 | 
			
		||||
{
 | 
			
		||||
    ZPOS64_T ret;
 | 
			
		||||
    ret = ftello64((FILE *)stream);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static long ZCALLBACK fseek_file_func (voidpf  opaque, voidpf stream, uLong offset, int origin)
 | 
			
		||||
{
 | 
			
		||||
    int fseek_origin=0;
 | 
			
		||||
    long ret;
 | 
			
		||||
    switch (origin)
 | 
			
		||||
    {
 | 
			
		||||
    case ZLIB_FILEFUNC_SEEK_CUR :
 | 
			
		||||
        fseek_origin = SEEK_CUR;
 | 
			
		||||
        break;
 | 
			
		||||
    case ZLIB_FILEFUNC_SEEK_END :
 | 
			
		||||
        fseek_origin = SEEK_END;
 | 
			
		||||
        break;
 | 
			
		||||
    case ZLIB_FILEFUNC_SEEK_SET :
 | 
			
		||||
        fseek_origin = SEEK_SET;
 | 
			
		||||
        break;
 | 
			
		||||
    default: return -1;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
    if (fseek((FILE *)stream, offset, fseek_origin) != 0)
 | 
			
		||||
        ret = -1;
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static long ZCALLBACK fseek64_file_func (voidpf  opaque, voidpf stream, ZPOS64_T offset, int origin)
 | 
			
		||||
{
 | 
			
		||||
    int fseek_origin=0;
 | 
			
		||||
    long ret;
 | 
			
		||||
    switch (origin)
 | 
			
		||||
    {
 | 
			
		||||
    case ZLIB_FILEFUNC_SEEK_CUR :
 | 
			
		||||
        fseek_origin = SEEK_CUR;
 | 
			
		||||
        break;
 | 
			
		||||
    case ZLIB_FILEFUNC_SEEK_END :
 | 
			
		||||
        fseek_origin = SEEK_END;
 | 
			
		||||
        break;
 | 
			
		||||
    case ZLIB_FILEFUNC_SEEK_SET :
 | 
			
		||||
        fseek_origin = SEEK_SET;
 | 
			
		||||
        break;
 | 
			
		||||
    default: return -1;
 | 
			
		||||
    }
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 | 
			
		||||
    if(fseeko64((FILE *)stream, offset, fseek_origin) != 0)
 | 
			
		||||
                        ret = -1;
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
 | 
			
		||||
{
 | 
			
		||||
    int ret;
 | 
			
		||||
    ret = fclose((FILE *)stream);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
 | 
			
		||||
{
 | 
			
		||||
    int ret;
 | 
			
		||||
    ret = ferror((FILE *)stream);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void fill_fopen_filefunc (pzlib_filefunc_def)
 | 
			
		||||
  zlib_filefunc_def* pzlib_filefunc_def;
 | 
			
		||||
{
 | 
			
		||||
    pzlib_filefunc_def->zopen_file = fopen_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zread_file = fread_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zwrite_file = fwrite_file_func;
 | 
			
		||||
    pzlib_filefunc_def->ztell_file = ftell_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zseek_file = fseek_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zclose_file = fclose_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zerror_file = ferror_file_func;
 | 
			
		||||
    pzlib_filefunc_def->opaque = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void fill_fopen64_filefunc (zlib_filefunc64_def*  pzlib_filefunc_def)
 | 
			
		||||
{
 | 
			
		||||
    pzlib_filefunc_def->zopen64_file = fopen64_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zread_file = fread_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zwrite_file = fwrite_file_func;
 | 
			
		||||
    pzlib_filefunc_def->ztell64_file = ftell64_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zseek64_file = fseek64_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zclose_file = fclose_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zerror_file = ferror_file_func;
 | 
			
		||||
    pzlib_filefunc_def->opaque = NULL;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										200
									
								
								SkinInstaller/zlib/minizip/ioapi.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										200
									
								
								SkinInstaller/zlib/minizip/ioapi.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,200 @@
 | 
			
		||||
/* ioapi.h -- IO base function header for compress/uncompress .zip
 | 
			
		||||
   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Modifications for Zip64 support
 | 
			
		||||
         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
 | 
			
		||||
 | 
			
		||||
         For more info read MiniZip_info.txt
 | 
			
		||||
 | 
			
		||||
         Changes
 | 
			
		||||
 | 
			
		||||
    Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this)
 | 
			
		||||
    Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux.
 | 
			
		||||
               More if/def section may be needed to support other platforms
 | 
			
		||||
    Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows.
 | 
			
		||||
                          (but you should use iowin32.c for windows instead)
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef _ZLIBIOAPI64_H
 | 
			
		||||
#define _ZLIBIOAPI64_H
 | 
			
		||||
 | 
			
		||||
#if (!defined(_WIN32)) && (!defined(WIN32))
 | 
			
		||||
 | 
			
		||||
  // Linux needs this to support file operation on files larger then 4+GB
 | 
			
		||||
  // But might need better if/def to select just the platforms that needs them.
 | 
			
		||||
 | 
			
		||||
        #ifndef __USE_FILE_OFFSET64
 | 
			
		||||
                #define __USE_FILE_OFFSET64
 | 
			
		||||
        #endif
 | 
			
		||||
        #ifndef __USE_LARGEFILE64
 | 
			
		||||
                #define __USE_LARGEFILE64
 | 
			
		||||
        #endif
 | 
			
		||||
        #ifndef _LARGEFILE64_SOURCE
 | 
			
		||||
                #define _LARGEFILE64_SOURCE
 | 
			
		||||
        #endif
 | 
			
		||||
        #ifndef _FILE_OFFSET_BIT
 | 
			
		||||
                #define _FILE_OFFSET_BIT 64
 | 
			
		||||
        #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
 | 
			
		||||
#if defined(USE_FILE32API)
 | 
			
		||||
#define fopen64 fopen
 | 
			
		||||
#define ftello64 ftell
 | 
			
		||||
#define fseeko64 fseek
 | 
			
		||||
#else
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
#ifndef ZPOS64_T
 | 
			
		||||
  #ifdef _WIN32
 | 
			
		||||
                #define ZPOS64_T fpos_t
 | 
			
		||||
  #else
 | 
			
		||||
    #include <stdint.h>
 | 
			
		||||
    #define ZPOS64_T uint64_t
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_MINIZIP64_CONF_H
 | 
			
		||||
#include "mz64conf.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* a type choosen by DEFINE */
 | 
			
		||||
#ifdef HAVE_64BIT_INT_CUSTOM
 | 
			
		||||
typedef  64BIT_INT_CUSTOM_TYPE ZPOS64_T;
 | 
			
		||||
#else
 | 
			
		||||
#ifdef HAS_STDINT_H
 | 
			
		||||
#include "stdint.h"
 | 
			
		||||
typedef uint64_t ZPOS64_T;
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(_MSC_VER) || defined(__BORLANDC__)
 | 
			
		||||
typedef unsigned __int64 ZPOS64_T;
 | 
			
		||||
#else
 | 
			
		||||
typedef unsigned long long int ZPOS64_T;
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define ZLIB_FILEFUNC_SEEK_CUR (1)
 | 
			
		||||
#define ZLIB_FILEFUNC_SEEK_END (2)
 | 
			
		||||
#define ZLIB_FILEFUNC_SEEK_SET (0)
 | 
			
		||||
 | 
			
		||||
#define ZLIB_FILEFUNC_MODE_READ      (1)
 | 
			
		||||
#define ZLIB_FILEFUNC_MODE_WRITE     (2)
 | 
			
		||||
#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)
 | 
			
		||||
 | 
			
		||||
#define ZLIB_FILEFUNC_MODE_EXISTING (4)
 | 
			
		||||
#define ZLIB_FILEFUNC_MODE_CREATE   (8)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef ZCALLBACK
 | 
			
		||||
 #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)
 | 
			
		||||
   #define ZCALLBACK CALLBACK
 | 
			
		||||
 #else
 | 
			
		||||
   #define ZCALLBACK
 | 
			
		||||
 #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef voidpf   (ZCALLBACK *open_file_func)      OF((voidpf opaque, const char* filename, int mode));
 | 
			
		||||
typedef uLong    (ZCALLBACK *read_file_func)      OF((voidpf opaque, voidpf stream, void* buf, uLong size));
 | 
			
		||||
typedef uLong    (ZCALLBACK *write_file_func)     OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
 | 
			
		||||
typedef int      (ZCALLBACK *close_file_func)     OF((voidpf opaque, voidpf stream));
 | 
			
		||||
typedef int      (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
 | 
			
		||||
 | 
			
		||||
typedef long     (ZCALLBACK *tell_file_func)      OF((voidpf opaque, voidpf stream));
 | 
			
		||||
typedef long     (ZCALLBACK *seek_file_func)      OF((voidpf opaque, voidpf stream, uLong offset, int origin));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* here is the "old" 32 bits structure structure */
 | 
			
		||||
typedef struct zlib_filefunc_def_s
 | 
			
		||||
{
 | 
			
		||||
    open_file_func      zopen_file;
 | 
			
		||||
    read_file_func      zread_file;
 | 
			
		||||
    write_file_func     zwrite_file;
 | 
			
		||||
    tell_file_func      ztell_file;
 | 
			
		||||
    seek_file_func      zseek_file;
 | 
			
		||||
    close_file_func     zclose_file;
 | 
			
		||||
    testerror_file_func zerror_file;
 | 
			
		||||
    voidpf              opaque;
 | 
			
		||||
} zlib_filefunc_def;
 | 
			
		||||
 | 
			
		||||
typedef ZPOS64_T (ZCALLBACK *tell64_file_func)    OF((voidpf opaque, voidpf stream));
 | 
			
		||||
typedef long     (ZCALLBACK *seek64_file_func)    OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
 | 
			
		||||
typedef voidpf   (ZCALLBACK *open64_file_func)    OF((voidpf opaque, const void* filename, int mode));
 | 
			
		||||
 | 
			
		||||
typedef struct zlib_filefunc64_def_s
 | 
			
		||||
{
 | 
			
		||||
    open64_file_func    zopen64_file;
 | 
			
		||||
    read_file_func      zread_file;
 | 
			
		||||
    write_file_func     zwrite_file;
 | 
			
		||||
    tell64_file_func    ztell64_file;
 | 
			
		||||
    seek64_file_func    zseek64_file;
 | 
			
		||||
    close_file_func     zclose_file;
 | 
			
		||||
    testerror_file_func zerror_file;
 | 
			
		||||
    voidpf              opaque;
 | 
			
		||||
} zlib_filefunc64_def;
 | 
			
		||||
 | 
			
		||||
void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def));
 | 
			
		||||
void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
 | 
			
		||||
 | 
			
		||||
/* now internal definition, only for zip.c and unzip.h */
 | 
			
		||||
typedef struct zlib_filefunc64_32_def_s
 | 
			
		||||
{
 | 
			
		||||
    zlib_filefunc64_def zfile_func64;
 | 
			
		||||
    open_file_func      zopen32_file;
 | 
			
		||||
    tell_file_func      ztell32_file;
 | 
			
		||||
    seek_file_func      zseek32_file;
 | 
			
		||||
} zlib_filefunc64_32_def;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define ZREAD64(filefunc,filestream,buf,size)     ((*((filefunc).zfile_func64.zread_file))   ((filefunc).zfile_func64.opaque,filestream,buf,size))
 | 
			
		||||
#define ZWRITE64(filefunc,filestream,buf,size)    ((*((filefunc).zfile_func64.zwrite_file))  ((filefunc).zfile_func64.opaque,filestream,buf,size))
 | 
			
		||||
//#define ZTELL64(filefunc,filestream)            ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream))
 | 
			
		||||
//#define ZSEEK64(filefunc,filestream,pos,mode)   ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode))
 | 
			
		||||
#define ZCLOSE64(filefunc,filestream)             ((*((filefunc).zfile_func64.zclose_file))  ((filefunc).zfile_func64.opaque,filestream))
 | 
			
		||||
#define ZERROR64(filefunc,filestream)             ((*((filefunc).zfile_func64.zerror_file))  ((filefunc).zfile_func64.opaque,filestream))
 | 
			
		||||
 | 
			
		||||
voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode));
 | 
			
		||||
long    call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin));
 | 
			
		||||
ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream));
 | 
			
		||||
 | 
			
		||||
void    fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32);
 | 
			
		||||
 | 
			
		||||
#define ZOPEN64(filefunc,filename,mode)         (call_zopen64((&(filefunc)),(filename),(mode)))
 | 
			
		||||
#define ZTELL64(filefunc,filestream)            (call_ztell64((&(filefunc)),(filestream)))
 | 
			
		||||
#define ZSEEK64(filefunc,filestream,pos,mode)   (call_zseek64((&(filefunc)),(filestream),(pos),(mode)))
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										389
									
								
								SkinInstaller/zlib/minizip/iowin32.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										389
									
								
								SkinInstaller/zlib/minizip/iowin32.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,389 @@
 | 
			
		||||
/* iowin32.c -- IO base function header for compress/uncompress .zip
 | 
			
		||||
     Version 1.1, February 14h, 2010
 | 
			
		||||
     part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Modifications for Zip64 support
 | 
			
		||||
         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
 | 
			
		||||
 | 
			
		||||
     For more info read MiniZip_info.txt
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
#include "ioapi.h"
 | 
			
		||||
#include "iowin32.h"
 | 
			
		||||
 | 
			
		||||
#ifndef INVALID_HANDLE_VALUE
 | 
			
		||||
#define INVALID_HANDLE_VALUE (0xFFFFFFFF)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef INVALID_SET_FILE_POINTER
 | 
			
		||||
#define INVALID_SET_FILE_POINTER ((DWORD)-1)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
voidpf  ZCALLBACK win32_open_file_func  OF((voidpf opaque, const char* filename, int mode));
 | 
			
		||||
uLong   ZCALLBACK win32_read_file_func  OF((voidpf opaque, voidpf stream, void* buf, uLong size));
 | 
			
		||||
uLong   ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
 | 
			
		||||
ZPOS64_T ZCALLBACK win32_tell64_file_func  OF((voidpf opaque, voidpf stream));
 | 
			
		||||
long    ZCALLBACK win32_seek64_file_func  OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
 | 
			
		||||
int     ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));
 | 
			
		||||
int     ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
    HANDLE hf;
 | 
			
		||||
    int error;
 | 
			
		||||
} WIN32FILE_IOWIN;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void win32_translate_open_mode(int mode,
 | 
			
		||||
                                      DWORD* lpdwDesiredAccess,
 | 
			
		||||
                                      DWORD* lpdwCreationDisposition,
 | 
			
		||||
                                      DWORD* lpdwShareMode,
 | 
			
		||||
                                      DWORD* lpdwFlagsAndAttributes)
 | 
			
		||||
{
 | 
			
		||||
    *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;
 | 
			
		||||
 | 
			
		||||
    if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
 | 
			
		||||
    {
 | 
			
		||||
        *lpdwDesiredAccess = GENERIC_READ;
 | 
			
		||||
        *lpdwCreationDisposition = OPEN_EXISTING;
 | 
			
		||||
        *lpdwShareMode = FILE_SHARE_READ;
 | 
			
		||||
    }
 | 
			
		||||
    else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
 | 
			
		||||
    {
 | 
			
		||||
        *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
 | 
			
		||||
        *lpdwCreationDisposition = OPEN_EXISTING;
 | 
			
		||||
    }
 | 
			
		||||
    else if (mode & ZLIB_FILEFUNC_MODE_CREATE)
 | 
			
		||||
    {
 | 
			
		||||
        *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
 | 
			
		||||
        *lpdwCreationDisposition = CREATE_ALWAYS;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static voidpf win32_build_iowin(HANDLE hFile)
 | 
			
		||||
{
 | 
			
		||||
    voidpf ret=NULL;
 | 
			
		||||
 | 
			
		||||
    if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
 | 
			
		||||
    {
 | 
			
		||||
        WIN32FILE_IOWIN w32fiow;
 | 
			
		||||
        w32fiow.hf = hFile;
 | 
			
		||||
        w32fiow.error = 0;
 | 
			
		||||
        ret = malloc(sizeof(WIN32FILE_IOWIN));
 | 
			
		||||
 | 
			
		||||
        if (ret==NULL)
 | 
			
		||||
            CloseHandle(hFile);
 | 
			
		||||
        else
 | 
			
		||||
            *((WIN32FILE_IOWIN*)ret) = w32fiow;
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode)
 | 
			
		||||
{
 | 
			
		||||
    const char* mode_fopen = NULL;
 | 
			
		||||
    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
 | 
			
		||||
    HANDLE hFile = NULL;
 | 
			
		||||
 | 
			
		||||
    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 | 
			
		||||
 | 
			
		||||
    if ((filename!=NULL) && (dwDesiredAccess != 0))
 | 
			
		||||
        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
 | 
			
		||||
 | 
			
		||||
    return win32_build_iowin(hFile);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode)
 | 
			
		||||
{
 | 
			
		||||
    const char* mode_fopen = NULL;
 | 
			
		||||
    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
 | 
			
		||||
    HANDLE hFile = NULL;
 | 
			
		||||
 | 
			
		||||
    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 | 
			
		||||
 | 
			
		||||
    if ((filename!=NULL) && (dwDesiredAccess != 0))
 | 
			
		||||
        hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
 | 
			
		||||
 | 
			
		||||
    return win32_build_iowin(hFile);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode)
 | 
			
		||||
{
 | 
			
		||||
    const char* mode_fopen = NULL;
 | 
			
		||||
    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
 | 
			
		||||
    HANDLE hFile = NULL;
 | 
			
		||||
 | 
			
		||||
    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 | 
			
		||||
 | 
			
		||||
    if ((filename!=NULL) && (dwDesiredAccess != 0))
 | 
			
		||||
        hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
 | 
			
		||||
 | 
			
		||||
    return win32_build_iowin(hFile);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode)
 | 
			
		||||
{
 | 
			
		||||
    const char* mode_fopen = NULL;
 | 
			
		||||
    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
 | 
			
		||||
    HANDLE hFile = NULL;
 | 
			
		||||
 | 
			
		||||
    win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 | 
			
		||||
 | 
			
		||||
    if ((filename!=NULL) && (dwDesiredAccess != 0))
 | 
			
		||||
        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
 | 
			
		||||
 | 
			
		||||
    return win32_build_iowin(hFile);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size)
 | 
			
		||||
{
 | 
			
		||||
    uLong ret=0;
 | 
			
		||||
    HANDLE hFile = NULL;
 | 
			
		||||
    if (stream!=NULL)
 | 
			
		||||
        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
 | 
			
		||||
 | 
			
		||||
    if (hFile != NULL)
 | 
			
		||||
    {
 | 
			
		||||
        if (!ReadFile(hFile, buf, size, &ret, NULL))
 | 
			
		||||
        {
 | 
			
		||||
            DWORD dwErr = GetLastError();
 | 
			
		||||
            if (dwErr == ERROR_HANDLE_EOF)
 | 
			
		||||
                dwErr = 0;
 | 
			
		||||
            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size)
 | 
			
		||||
{
 | 
			
		||||
    uLong ret=0;
 | 
			
		||||
    HANDLE hFile = NULL;
 | 
			
		||||
    if (stream!=NULL)
 | 
			
		||||
        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
 | 
			
		||||
 | 
			
		||||
    if (hFile != NULL)
 | 
			
		||||
    {
 | 
			
		||||
        if (!WriteFile(hFile, buf, size, &ret, NULL))
 | 
			
		||||
        {
 | 
			
		||||
            DWORD dwErr = GetLastError();
 | 
			
		||||
            if (dwErr == ERROR_HANDLE_EOF)
 | 
			
		||||
                dwErr = 0;
 | 
			
		||||
            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)
 | 
			
		||||
{
 | 
			
		||||
    long ret=-1;
 | 
			
		||||
    HANDLE hFile = NULL;
 | 
			
		||||
    if (stream!=NULL)
 | 
			
		||||
        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
 | 
			
		||||
    if (hFile != NULL)
 | 
			
		||||
    {
 | 
			
		||||
        DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);
 | 
			
		||||
        if (dwSet == INVALID_SET_FILE_POINTER)
 | 
			
		||||
        {
 | 
			
		||||
            DWORD dwErr = GetLastError();
 | 
			
		||||
            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
 | 
			
		||||
            ret = -1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
            ret=(long)dwSet;
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)
 | 
			
		||||
{
 | 
			
		||||
    ZPOS64_T ret= (ZPOS64_T)-1;
 | 
			
		||||
    HANDLE hFile = NULL;
 | 
			
		||||
    if (stream!=NULL)
 | 
			
		||||
        hFile = ((WIN32FILE_IOWIN*)stream)->hf;
 | 
			
		||||
 | 
			
		||||
    if (hFile)
 | 
			
		||||
    {
 | 
			
		||||
        LARGE_INTEGER li;
 | 
			
		||||
        li.QuadPart = 0;
 | 
			
		||||
        li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT);
 | 
			
		||||
        if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR))
 | 
			
		||||
        {
 | 
			
		||||
            DWORD dwErr = GetLastError();
 | 
			
		||||
            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
 | 
			
		||||
            ret = (ZPOS64_T)-1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
            ret=li.QuadPart;
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin)
 | 
			
		||||
{
 | 
			
		||||
    DWORD dwMoveMethod=0xFFFFFFFF;
 | 
			
		||||
    HANDLE hFile = NULL;
 | 
			
		||||
 | 
			
		||||
    long ret=-1;
 | 
			
		||||
    if (stream!=NULL)
 | 
			
		||||
        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
 | 
			
		||||
    switch (origin)
 | 
			
		||||
    {
 | 
			
		||||
    case ZLIB_FILEFUNC_SEEK_CUR :
 | 
			
		||||
        dwMoveMethod = FILE_CURRENT;
 | 
			
		||||
        break;
 | 
			
		||||
    case ZLIB_FILEFUNC_SEEK_END :
 | 
			
		||||
        dwMoveMethod = FILE_END;
 | 
			
		||||
        break;
 | 
			
		||||
    case ZLIB_FILEFUNC_SEEK_SET :
 | 
			
		||||
        dwMoveMethod = FILE_BEGIN;
 | 
			
		||||
        break;
 | 
			
		||||
    default: return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (hFile != NULL)
 | 
			
		||||
    {
 | 
			
		||||
        DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod);
 | 
			
		||||
        if (dwSet == INVALID_SET_FILE_POINTER)
 | 
			
		||||
        {
 | 
			
		||||
            DWORD dwErr = GetLastError();
 | 
			
		||||
            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
 | 
			
		||||
            ret = -1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
            ret=0;
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin)
 | 
			
		||||
{
 | 
			
		||||
    DWORD dwMoveMethod=0xFFFFFFFF;
 | 
			
		||||
    HANDLE hFile = NULL;
 | 
			
		||||
    long ret=-1;
 | 
			
		||||
 | 
			
		||||
    if (stream!=NULL)
 | 
			
		||||
        hFile = ((WIN32FILE_IOWIN*)stream)->hf;
 | 
			
		||||
 | 
			
		||||
    switch (origin)
 | 
			
		||||
    {
 | 
			
		||||
        case ZLIB_FILEFUNC_SEEK_CUR :
 | 
			
		||||
            dwMoveMethod = FILE_CURRENT;
 | 
			
		||||
            break;
 | 
			
		||||
        case ZLIB_FILEFUNC_SEEK_END :
 | 
			
		||||
            dwMoveMethod = FILE_END;
 | 
			
		||||
            break;
 | 
			
		||||
        case ZLIB_FILEFUNC_SEEK_SET :
 | 
			
		||||
            dwMoveMethod = FILE_BEGIN;
 | 
			
		||||
            break;
 | 
			
		||||
        default: return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (hFile)
 | 
			
		||||
    {
 | 
			
		||||
        LARGE_INTEGER* li = (LARGE_INTEGER*)&offset;
 | 
			
		||||
        DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod);
 | 
			
		||||
        if (dwSet == INVALID_SET_FILE_POINTER)
 | 
			
		||||
        {
 | 
			
		||||
            DWORD dwErr = GetLastError();
 | 
			
		||||
            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
 | 
			
		||||
            ret = -1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
            ret=0;
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)
 | 
			
		||||
{
 | 
			
		||||
    int ret=-1;
 | 
			
		||||
 | 
			
		||||
    if (stream!=NULL)
 | 
			
		||||
    {
 | 
			
		||||
        HANDLE hFile;
 | 
			
		||||
        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
 | 
			
		||||
        if (hFile != NULL)
 | 
			
		||||
        {
 | 
			
		||||
            CloseHandle(hFile);
 | 
			
		||||
            ret=0;
 | 
			
		||||
        }
 | 
			
		||||
        free(stream);
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream)
 | 
			
		||||
{
 | 
			
		||||
    int ret=-1;
 | 
			
		||||
    if (stream!=NULL)
 | 
			
		||||
    {
 | 
			
		||||
        ret = ((WIN32FILE_IOWIN*)stream) -> error;
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def)
 | 
			
		||||
{
 | 
			
		||||
    pzlib_filefunc_def->zopen_file = win32_open_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zread_file = win32_read_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zwrite_file = win32_write_file_func;
 | 
			
		||||
    pzlib_filefunc_def->ztell_file = win32_tell_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zseek_file = win32_seek_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zclose_file = win32_close_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zerror_file = win32_error_file_func;
 | 
			
		||||
    pzlib_filefunc_def->opaque = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def)
 | 
			
		||||
{
 | 
			
		||||
    pzlib_filefunc_def->zopen64_file = win32_open64_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zread_file = win32_read_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zwrite_file = win32_write_file_func;
 | 
			
		||||
    pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zclose_file = win32_close_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zerror_file = win32_error_file_func;
 | 
			
		||||
    pzlib_filefunc_def->opaque = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def)
 | 
			
		||||
{
 | 
			
		||||
    pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;
 | 
			
		||||
    pzlib_filefunc_def->zread_file = win32_read_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zwrite_file = win32_write_file_func;
 | 
			
		||||
    pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zclose_file = win32_close_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zerror_file = win32_error_file_func;
 | 
			
		||||
    pzlib_filefunc_def->opaque = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def)
 | 
			
		||||
{
 | 
			
		||||
    pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;
 | 
			
		||||
    pzlib_filefunc_def->zread_file = win32_read_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zwrite_file = win32_write_file_func;
 | 
			
		||||
    pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zclose_file = win32_close_file_func;
 | 
			
		||||
    pzlib_filefunc_def->zerror_file = win32_error_file_func;
 | 
			
		||||
    pzlib_filefunc_def->opaque = NULL;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										28
									
								
								SkinInstaller/zlib/minizip/iowin32.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								SkinInstaller/zlib/minizip/iowin32.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
/* iowin32.h -- IO base function header for compress/uncompress .zip
 | 
			
		||||
     Version 1.1, February 14h, 2010
 | 
			
		||||
     part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Modifications for Zip64 support
 | 
			
		||||
         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
 | 
			
		||||
 | 
			
		||||
         For more info read MiniZip_info.txt
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
 | 
			
		||||
void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def));
 | 
			
		||||
void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def));
 | 
			
		||||
void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def));
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										648
									
								
								SkinInstaller/zlib/minizip/miniunz.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										648
									
								
								SkinInstaller/zlib/minizip/miniunz.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,648 @@
 | 
			
		||||
/*
 | 
			
		||||
   miniunz.c
 | 
			
		||||
   Version 1.1, February 14h, 2010
 | 
			
		||||
   sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Modifications of Unzip for Zip64
 | 
			
		||||
         Copyright (C) 2007-2008 Even Rouault
 | 
			
		||||
 | 
			
		||||
         Modifications for Zip64 support on both zip and unzip
 | 
			
		||||
         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef _WIN32
 | 
			
		||||
        #ifndef __USE_FILE_OFFSET64
 | 
			
		||||
                #define __USE_FILE_OFFSET64
 | 
			
		||||
        #endif
 | 
			
		||||
        #ifndef __USE_LARGEFILE64
 | 
			
		||||
                #define __USE_LARGEFILE64
 | 
			
		||||
        #endif
 | 
			
		||||
        #ifndef _LARGEFILE64_SOURCE
 | 
			
		||||
                #define _LARGEFILE64_SOURCE
 | 
			
		||||
        #endif
 | 
			
		||||
        #ifndef _FILE_OFFSET_BIT
 | 
			
		||||
                #define _FILE_OFFSET_BIT 64
 | 
			
		||||
        #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
 | 
			
		||||
#ifdef unix
 | 
			
		||||
# include <unistd.h>
 | 
			
		||||
# include <utime.h>
 | 
			
		||||
#else
 | 
			
		||||
# include <direct.h>
 | 
			
		||||
# include <io.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "unzip.h"
 | 
			
		||||
 | 
			
		||||
#define CASESENSITIVITY (0)
 | 
			
		||||
#define WRITEBUFFERSIZE (8192)
 | 
			
		||||
#define MAXFILENAME (256)
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
#define USEWIN32IOAPI
 | 
			
		||||
#include "iowin32.h"
 | 
			
		||||
#endif
 | 
			
		||||
/*
 | 
			
		||||
  mini unzip, demo of unzip package
 | 
			
		||||
 | 
			
		||||
  usage :
 | 
			
		||||
  Usage : miniunz [-exvlo] file.zip [file_to_extract] [-d extractdir]
 | 
			
		||||
 | 
			
		||||
  list the file in the zipfile, and print the content of FILE_ID.ZIP or README.TXT
 | 
			
		||||
    if it exists
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* change_file_date : change the date/time of a file
 | 
			
		||||
    filename : the filename of the file where date/time must be modified
 | 
			
		||||
    dosdate : the new date at the MSDos format (4 bytes)
 | 
			
		||||
    tmu_date : the SAME new date at the tm_unz format */
 | 
			
		||||
void change_file_date(filename,dosdate,tmu_date)
 | 
			
		||||
    const char *filename;
 | 
			
		||||
    uLong dosdate;
 | 
			
		||||
    tm_unz tmu_date;
 | 
			
		||||
{
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
  HANDLE hFile;
 | 
			
		||||
  FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite;
 | 
			
		||||
 | 
			
		||||
  hFile = CreateFileA(filename,GENERIC_READ | GENERIC_WRITE,
 | 
			
		||||
                      0,NULL,OPEN_EXISTING,0,NULL);
 | 
			
		||||
  GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite);
 | 
			
		||||
  DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal);
 | 
			
		||||
  LocalFileTimeToFileTime(&ftLocal,&ftm);
 | 
			
		||||
  SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
 | 
			
		||||
  CloseHandle(hFile);
 | 
			
		||||
#else
 | 
			
		||||
#ifdef unix
 | 
			
		||||
  struct utimbuf ut;
 | 
			
		||||
  struct tm newdate;
 | 
			
		||||
  newdate.tm_sec = tmu_date.tm_sec;
 | 
			
		||||
  newdate.tm_min=tmu_date.tm_min;
 | 
			
		||||
  newdate.tm_hour=tmu_date.tm_hour;
 | 
			
		||||
  newdate.tm_mday=tmu_date.tm_mday;
 | 
			
		||||
  newdate.tm_mon=tmu_date.tm_mon;
 | 
			
		||||
  if (tmu_date.tm_year > 1900)
 | 
			
		||||
      newdate.tm_year=tmu_date.tm_year - 1900;
 | 
			
		||||
  else
 | 
			
		||||
      newdate.tm_year=tmu_date.tm_year ;
 | 
			
		||||
  newdate.tm_isdst=-1;
 | 
			
		||||
 | 
			
		||||
  ut.actime=ut.modtime=mktime(&newdate);
 | 
			
		||||
  utime(filename,&ut);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* mymkdir and change_file_date are not 100 % portable
 | 
			
		||||
   As I don't know well Unix, I wait feedback for the unix portion */
 | 
			
		||||
 | 
			
		||||
int mymkdir(dirname)
 | 
			
		||||
    const char* dirname;
 | 
			
		||||
{
 | 
			
		||||
    int ret=0;
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
    ret = _mkdir(dirname);
 | 
			
		||||
#else
 | 
			
		||||
#ifdef unix
 | 
			
		||||
    ret = mkdir (dirname,0775);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int makedir (newdir)
 | 
			
		||||
    char *newdir;
 | 
			
		||||
{
 | 
			
		||||
  char *buffer ;
 | 
			
		||||
  char *p;
 | 
			
		||||
  int  len = (int)strlen(newdir);
 | 
			
		||||
 | 
			
		||||
  if (len <= 0)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  buffer = (char*)malloc(len+1);
 | 
			
		||||
        if (buffer==NULL)
 | 
			
		||||
        {
 | 
			
		||||
                printf("Error allocating memory\n");
 | 
			
		||||
                return UNZ_INTERNALERROR;
 | 
			
		||||
        }
 | 
			
		||||
  strcpy(buffer,newdir);
 | 
			
		||||
 | 
			
		||||
  if (buffer[len-1] == '/') {
 | 
			
		||||
    buffer[len-1] = '\0';
 | 
			
		||||
  }
 | 
			
		||||
  if (mymkdir(buffer) == 0)
 | 
			
		||||
    {
 | 
			
		||||
      free(buffer);
 | 
			
		||||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  p = buffer+1;
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      char hold;
 | 
			
		||||
 | 
			
		||||
      while(*p && *p != '\\' && *p != '/')
 | 
			
		||||
        p++;
 | 
			
		||||
      hold = *p;
 | 
			
		||||
      *p = 0;
 | 
			
		||||
      if ((mymkdir(buffer) == -1) && (errno == ENOENT))
 | 
			
		||||
        {
 | 
			
		||||
          printf("couldn't create directory %s\n",buffer);
 | 
			
		||||
          free(buffer);
 | 
			
		||||
          return 0;
 | 
			
		||||
        }
 | 
			
		||||
      if (hold == 0)
 | 
			
		||||
        break;
 | 
			
		||||
      *p++ = hold;
 | 
			
		||||
    }
 | 
			
		||||
  free(buffer);
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void do_banner()
 | 
			
		||||
{
 | 
			
		||||
    printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n");
 | 
			
		||||
    printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void do_help()
 | 
			
		||||
{
 | 
			
		||||
    printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \
 | 
			
		||||
           "  -e  Extract without pathname (junk paths)\n" \
 | 
			
		||||
           "  -x  Extract with pathname\n" \
 | 
			
		||||
           "  -v  list files\n" \
 | 
			
		||||
           "  -l  list files\n" \
 | 
			
		||||
           "  -d  directory to extract into\n" \
 | 
			
		||||
           "  -o  overwrite files without prompting\n" \
 | 
			
		||||
           "  -p  extract crypted file using password\n\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Display64BitsSize(ZPOS64_T n, int size_char)
 | 
			
		||||
{
 | 
			
		||||
  /* to avoid compatibility problem , we do here the conversion */
 | 
			
		||||
  char number[21];
 | 
			
		||||
  int offset=19;
 | 
			
		||||
  int pos_string = 19;
 | 
			
		||||
  number[20]=0;
 | 
			
		||||
  for (;;) {
 | 
			
		||||
      number[offset]=(char)((n%10)+'0');
 | 
			
		||||
      if (number[offset] != '0')
 | 
			
		||||
          pos_string=offset;
 | 
			
		||||
      n/=10;
 | 
			
		||||
      if (offset==0)
 | 
			
		||||
          break;
 | 
			
		||||
      offset--;
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
      int size_display_string = 19-pos_string;
 | 
			
		||||
      while (size_char > size_display_string)
 | 
			
		||||
      {
 | 
			
		||||
          size_char--;
 | 
			
		||||
          printf(" ");
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  printf("%s",&number[pos_string]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int do_list(uf)
 | 
			
		||||
    unzFile uf;
 | 
			
		||||
{
 | 
			
		||||
    uLong i;
 | 
			
		||||
    unz_global_info64 gi;
 | 
			
		||||
    int err;
 | 
			
		||||
 | 
			
		||||
    err = unzGetGlobalInfo64(uf,&gi);
 | 
			
		||||
    if (err!=UNZ_OK)
 | 
			
		||||
        printf("error %d with zipfile in unzGetGlobalInfo \n",err);
 | 
			
		||||
    printf("  Length  Method     Size Ratio   Date    Time   CRC-32     Name\n");
 | 
			
		||||
    printf("  ------  ------     ---- -----   ----    ----   ------     ----\n");
 | 
			
		||||
    for (i=0;i<gi.number_entry;i++)
 | 
			
		||||
    {
 | 
			
		||||
        char filename_inzip[256];
 | 
			
		||||
        unz_file_info64 file_info;
 | 
			
		||||
        uLong ratio=0;
 | 
			
		||||
        const char *string_method;
 | 
			
		||||
        char charCrypt=' ';
 | 
			
		||||
        err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
 | 
			
		||||
        if (err!=UNZ_OK)
 | 
			
		||||
        {
 | 
			
		||||
            printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        if (file_info.uncompressed_size>0)
 | 
			
		||||
            ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size);
 | 
			
		||||
 | 
			
		||||
        /* display a '*' if the file is crypted */
 | 
			
		||||
        if ((file_info.flag & 1) != 0)
 | 
			
		||||
            charCrypt='*';
 | 
			
		||||
 | 
			
		||||
        if (file_info.compression_method==0)
 | 
			
		||||
            string_method="Stored";
 | 
			
		||||
        else
 | 
			
		||||
        if (file_info.compression_method==Z_DEFLATED)
 | 
			
		||||
        {
 | 
			
		||||
            uInt iLevel=(uInt)((file_info.flag & 0x6)/2);
 | 
			
		||||
            if (iLevel==0)
 | 
			
		||||
              string_method="Defl:N";
 | 
			
		||||
            else if (iLevel==1)
 | 
			
		||||
              string_method="Defl:X";
 | 
			
		||||
            else if ((iLevel==2) || (iLevel==3))
 | 
			
		||||
              string_method="Defl:F"; /* 2:fast , 3 : extra fast*/
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        if (file_info.compression_method==Z_BZIP2ED)
 | 
			
		||||
        {
 | 
			
		||||
              string_method="BZip2 ";
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
            string_method="Unkn. ";
 | 
			
		||||
 | 
			
		||||
        Display64BitsSize(file_info.uncompressed_size,7);
 | 
			
		||||
        printf("  %6s%c",string_method,charCrypt);
 | 
			
		||||
        Display64BitsSize(file_info.compressed_size,7);
 | 
			
		||||
        printf(" %3lu%%  %2.2lu-%2.2lu-%2.2lu  %2.2lu:%2.2lu  %8.8lx   %s\n",
 | 
			
		||||
                ratio,
 | 
			
		||||
                (uLong)file_info.tmu_date.tm_mon + 1,
 | 
			
		||||
                (uLong)file_info.tmu_date.tm_mday,
 | 
			
		||||
                (uLong)file_info.tmu_date.tm_year % 100,
 | 
			
		||||
                (uLong)file_info.tmu_date.tm_hour,(uLong)file_info.tmu_date.tm_min,
 | 
			
		||||
                (uLong)file_info.crc,filename_inzip);
 | 
			
		||||
        if ((i+1)<gi.number_entry)
 | 
			
		||||
        {
 | 
			
		||||
            err = unzGoToNextFile(uf);
 | 
			
		||||
            if (err!=UNZ_OK)
 | 
			
		||||
            {
 | 
			
		||||
                printf("error %d with zipfile in unzGoToNextFile\n",err);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
 | 
			
		||||
    unzFile uf;
 | 
			
		||||
    const int* popt_extract_without_path;
 | 
			
		||||
    int* popt_overwrite;
 | 
			
		||||
    const char* password;
 | 
			
		||||
{
 | 
			
		||||
    char filename_inzip[256];
 | 
			
		||||
    char* filename_withoutpath;
 | 
			
		||||
    char* p;
 | 
			
		||||
    int err=UNZ_OK;
 | 
			
		||||
    FILE *fout=NULL;
 | 
			
		||||
    void* buf;
 | 
			
		||||
    uInt size_buf;
 | 
			
		||||
 | 
			
		||||
    unz_file_info64 file_info;
 | 
			
		||||
    uLong ratio=0;
 | 
			
		||||
    err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
 | 
			
		||||
 | 
			
		||||
    if (err!=UNZ_OK)
 | 
			
		||||
    {
 | 
			
		||||
        printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
 | 
			
		||||
        return err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    size_buf = WRITEBUFFERSIZE;
 | 
			
		||||
    buf = (void*)malloc(size_buf);
 | 
			
		||||
    if (buf==NULL)
 | 
			
		||||
    {
 | 
			
		||||
        printf("Error allocating memory\n");
 | 
			
		||||
        return UNZ_INTERNALERROR;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    p = filename_withoutpath = filename_inzip;
 | 
			
		||||
    while ((*p) != '\0')
 | 
			
		||||
    {
 | 
			
		||||
        if (((*p)=='/') || ((*p)=='\\'))
 | 
			
		||||
            filename_withoutpath = p+1;
 | 
			
		||||
        p++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((*filename_withoutpath)=='\0')
 | 
			
		||||
    {
 | 
			
		||||
        if ((*popt_extract_without_path)==0)
 | 
			
		||||
        {
 | 
			
		||||
            printf("creating directory: %s\n",filename_inzip);
 | 
			
		||||
            mymkdir(filename_inzip);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        const char* write_filename;
 | 
			
		||||
        int skip=0;
 | 
			
		||||
 | 
			
		||||
        if ((*popt_extract_without_path)==0)
 | 
			
		||||
            write_filename = filename_inzip;
 | 
			
		||||
        else
 | 
			
		||||
            write_filename = filename_withoutpath;
 | 
			
		||||
 | 
			
		||||
        err = unzOpenCurrentFilePassword(uf,password);
 | 
			
		||||
        if (err!=UNZ_OK)
 | 
			
		||||
        {
 | 
			
		||||
            printf("error %d with zipfile in unzOpenCurrentFilePassword\n",err);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (((*popt_overwrite)==0) && (err==UNZ_OK))
 | 
			
		||||
        {
 | 
			
		||||
            char rep=0;
 | 
			
		||||
            FILE* ftestexist;
 | 
			
		||||
            ftestexist = fopen64(write_filename,"rb");
 | 
			
		||||
            if (ftestexist!=NULL)
 | 
			
		||||
            {
 | 
			
		||||
                fclose(ftestexist);
 | 
			
		||||
                do
 | 
			
		||||
                {
 | 
			
		||||
                    char answer[128];
 | 
			
		||||
                    int ret;
 | 
			
		||||
 | 
			
		||||
                    printf("The file %s exists. Overwrite ? [y]es, [n]o, [A]ll: ",write_filename);
 | 
			
		||||
                    ret = scanf("%1s",answer);
 | 
			
		||||
                    if (ret != 1)
 | 
			
		||||
                    {
 | 
			
		||||
                       exit(EXIT_FAILURE);
 | 
			
		||||
                    }
 | 
			
		||||
                    rep = answer[0] ;
 | 
			
		||||
                    if ((rep>='a') && (rep<='z'))
 | 
			
		||||
                        rep -= 0x20;
 | 
			
		||||
                }
 | 
			
		||||
                while ((rep!='Y') && (rep!='N') && (rep!='A'));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (rep == 'N')
 | 
			
		||||
                skip = 1;
 | 
			
		||||
 | 
			
		||||
            if (rep == 'A')
 | 
			
		||||
                *popt_overwrite=1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ((skip==0) && (err==UNZ_OK))
 | 
			
		||||
        {
 | 
			
		||||
            fout=fopen64(write_filename,"wb");
 | 
			
		||||
 | 
			
		||||
            /* some zipfile don't contain directory alone before file */
 | 
			
		||||
            if ((fout==NULL) && ((*popt_extract_without_path)==0) &&
 | 
			
		||||
                                (filename_withoutpath!=(char*)filename_inzip))
 | 
			
		||||
            {
 | 
			
		||||
                char c=*(filename_withoutpath-1);
 | 
			
		||||
                *(filename_withoutpath-1)='\0';
 | 
			
		||||
                makedir(write_filename);
 | 
			
		||||
                *(filename_withoutpath-1)=c;
 | 
			
		||||
                fout=fopen64(write_filename,"wb");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (fout==NULL)
 | 
			
		||||
            {
 | 
			
		||||
                printf("error opening %s\n",write_filename);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (fout!=NULL)
 | 
			
		||||
        {
 | 
			
		||||
            printf(" extracting: %s\n",write_filename);
 | 
			
		||||
 | 
			
		||||
            do
 | 
			
		||||
            {
 | 
			
		||||
                err = unzReadCurrentFile(uf,buf,size_buf);
 | 
			
		||||
                if (err<0)
 | 
			
		||||
                {
 | 
			
		||||
                    printf("error %d with zipfile in unzReadCurrentFile\n",err);
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                if (err>0)
 | 
			
		||||
                    if (fwrite(buf,err,1,fout)!=1)
 | 
			
		||||
                    {
 | 
			
		||||
                        printf("error in writing extracted file\n");
 | 
			
		||||
                        err=UNZ_ERRNO;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
            }
 | 
			
		||||
            while (err>0);
 | 
			
		||||
            if (fout)
 | 
			
		||||
                    fclose(fout);
 | 
			
		||||
 | 
			
		||||
            if (err==0)
 | 
			
		||||
                change_file_date(write_filename,file_info.dosDate,
 | 
			
		||||
                                 file_info.tmu_date);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (err==UNZ_OK)
 | 
			
		||||
        {
 | 
			
		||||
            err = unzCloseCurrentFile (uf);
 | 
			
		||||
            if (err!=UNZ_OK)
 | 
			
		||||
            {
 | 
			
		||||
                printf("error %d with zipfile in unzCloseCurrentFile\n",err);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
            unzCloseCurrentFile(uf); /* don't lose the error */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    free(buf);
 | 
			
		||||
    return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
 | 
			
		||||
    unzFile uf;
 | 
			
		||||
    int opt_extract_without_path;
 | 
			
		||||
    int opt_overwrite;
 | 
			
		||||
    const char* password;
 | 
			
		||||
{
 | 
			
		||||
    uLong i;
 | 
			
		||||
    unz_global_info64 gi;
 | 
			
		||||
    int err;
 | 
			
		||||
    FILE* fout=NULL;
 | 
			
		||||
 | 
			
		||||
    err = unzGetGlobalInfo64(uf,&gi);
 | 
			
		||||
    if (err!=UNZ_OK)
 | 
			
		||||
        printf("error %d with zipfile in unzGetGlobalInfo \n",err);
 | 
			
		||||
 | 
			
		||||
    for (i=0;i<gi.number_entry;i++)
 | 
			
		||||
    {
 | 
			
		||||
        if (do_extract_currentfile(uf,&opt_extract_without_path,
 | 
			
		||||
                                      &opt_overwrite,
 | 
			
		||||
                                      password) != UNZ_OK)
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        if ((i+1)<gi.number_entry)
 | 
			
		||||
        {
 | 
			
		||||
            err = unzGoToNextFile(uf);
 | 
			
		||||
            if (err!=UNZ_OK)
 | 
			
		||||
            {
 | 
			
		||||
                printf("error %d with zipfile in unzGoToNextFile\n",err);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
 | 
			
		||||
    unzFile uf;
 | 
			
		||||
    const char* filename;
 | 
			
		||||
    int opt_extract_without_path;
 | 
			
		||||
    int opt_overwrite;
 | 
			
		||||
    const char* password;
 | 
			
		||||
{
 | 
			
		||||
    int err = UNZ_OK;
 | 
			
		||||
    if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
 | 
			
		||||
    {
 | 
			
		||||
        printf("file %s not found in the zipfile\n",filename);
 | 
			
		||||
        return 2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (do_extract_currentfile(uf,&opt_extract_without_path,
 | 
			
		||||
                                      &opt_overwrite,
 | 
			
		||||
                                      password) == UNZ_OK)
 | 
			
		||||
        return 0;
 | 
			
		||||
    else
 | 
			
		||||
        return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int main(argc,argv)
 | 
			
		||||
    int argc;
 | 
			
		||||
    char *argv[];
 | 
			
		||||
{
 | 
			
		||||
    const char *zipfilename=NULL;
 | 
			
		||||
    const char *filename_to_extract=NULL;
 | 
			
		||||
    const char *password=NULL;
 | 
			
		||||
    char filename_try[MAXFILENAME+16] = "";
 | 
			
		||||
    int i;
 | 
			
		||||
    int ret_value=0;
 | 
			
		||||
    int opt_do_list=0;
 | 
			
		||||
    int opt_do_extract=1;
 | 
			
		||||
    int opt_do_extract_withoutpath=0;
 | 
			
		||||
    int opt_overwrite=0;
 | 
			
		||||
    int opt_extractdir=0;
 | 
			
		||||
    const char *dirname=NULL;
 | 
			
		||||
    unzFile uf=NULL;
 | 
			
		||||
 | 
			
		||||
    do_banner();
 | 
			
		||||
    if (argc==1)
 | 
			
		||||
    {
 | 
			
		||||
        do_help();
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        for (i=1;i<argc;i++)
 | 
			
		||||
        {
 | 
			
		||||
            if ((*argv[i])=='-')
 | 
			
		||||
            {
 | 
			
		||||
                const char *p=argv[i]+1;
 | 
			
		||||
 | 
			
		||||
                while ((*p)!='\0')
 | 
			
		||||
                {
 | 
			
		||||
                    char c=*(p++);;
 | 
			
		||||
                    if ((c=='l') || (c=='L'))
 | 
			
		||||
                        opt_do_list = 1;
 | 
			
		||||
                    if ((c=='v') || (c=='V'))
 | 
			
		||||
                        opt_do_list = 1;
 | 
			
		||||
                    if ((c=='x') || (c=='X'))
 | 
			
		||||
                        opt_do_extract = 1;
 | 
			
		||||
                    if ((c=='e') || (c=='E'))
 | 
			
		||||
                        opt_do_extract = opt_do_extract_withoutpath = 1;
 | 
			
		||||
                    if ((c=='o') || (c=='O'))
 | 
			
		||||
                        opt_overwrite=1;
 | 
			
		||||
                    if ((c=='d') || (c=='D'))
 | 
			
		||||
                    {
 | 
			
		||||
                        opt_extractdir=1;
 | 
			
		||||
                        dirname=argv[i+1];
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (((c=='p') || (c=='P')) && (i+1<argc))
 | 
			
		||||
                    {
 | 
			
		||||
                        password=argv[i+1];
 | 
			
		||||
                        i++;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (zipfilename == NULL)
 | 
			
		||||
                    zipfilename = argv[i];
 | 
			
		||||
                else if ((filename_to_extract==NULL) && (!opt_extractdir))
 | 
			
		||||
                        filename_to_extract = argv[i] ;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (zipfilename!=NULL)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
#        ifdef USEWIN32IOAPI
 | 
			
		||||
        zlib_filefunc64_def ffunc;
 | 
			
		||||
#        endif
 | 
			
		||||
 | 
			
		||||
        strncpy(filename_try, zipfilename,MAXFILENAME-1);
 | 
			
		||||
        /* strncpy doesnt append the trailing NULL, of the string is too long. */
 | 
			
		||||
        filename_try[ MAXFILENAME ] = '\0';
 | 
			
		||||
 | 
			
		||||
#        ifdef USEWIN32IOAPI
 | 
			
		||||
        fill_win32_filefunc64A(&ffunc);
 | 
			
		||||
        uf = unzOpen2_64(zipfilename,&ffunc);
 | 
			
		||||
#        else
 | 
			
		||||
        uf = unzOpen64(zipfilename);
 | 
			
		||||
#        endif
 | 
			
		||||
        if (uf==NULL)
 | 
			
		||||
        {
 | 
			
		||||
            strcat(filename_try,".zip");
 | 
			
		||||
#            ifdef USEWIN32IOAPI
 | 
			
		||||
            uf = unzOpen2_64(filename_try,&ffunc);
 | 
			
		||||
#            else
 | 
			
		||||
            uf = unzOpen64(filename_try);
 | 
			
		||||
#            endif
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (uf==NULL)
 | 
			
		||||
    {
 | 
			
		||||
        printf("Cannot open %s or %s.zip\n",zipfilename,zipfilename);
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    printf("%s opened\n",filename_try);
 | 
			
		||||
 | 
			
		||||
    if (opt_do_list==1)
 | 
			
		||||
        ret_value = do_list(uf);
 | 
			
		||||
    else if (opt_do_extract==1)
 | 
			
		||||
    {
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
        if (opt_extractdir && _chdir(dirname))
 | 
			
		||||
#else
 | 
			
		||||
        if (opt_extractdir && chdir(dirname))
 | 
			
		||||
#endif
 | 
			
		||||
        {
 | 
			
		||||
          printf("Error changing into %s, aborting\n", dirname);
 | 
			
		||||
          exit(-1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (filename_to_extract == NULL)
 | 
			
		||||
            ret_value = do_extract(uf, opt_do_extract_withoutpath, opt_overwrite, password);
 | 
			
		||||
        else
 | 
			
		||||
            ret_value = do_extract_onefile(uf, filename_to_extract, opt_do_extract_withoutpath, opt_overwrite, password);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    unzClose(uf);
 | 
			
		||||
 | 
			
		||||
    return ret_value;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										507
									
								
								SkinInstaller/zlib/minizip/minizip.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										507
									
								
								SkinInstaller/zlib/minizip/minizip.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,507 @@
 | 
			
		||||
/*
 | 
			
		||||
   minizip.c
 | 
			
		||||
   Version 1.1, February 14h, 2010
 | 
			
		||||
   sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Modifications of Unzip for Zip64
 | 
			
		||||
         Copyright (C) 2007-2008 Even Rouault
 | 
			
		||||
 | 
			
		||||
         Modifications for Zip64 support on both zip and unzip
 | 
			
		||||
         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef _WIN32
 | 
			
		||||
        #ifndef __USE_FILE_OFFSET64
 | 
			
		||||
                #define __USE_FILE_OFFSET64
 | 
			
		||||
        #endif
 | 
			
		||||
        #ifndef __USE_LARGEFILE64
 | 
			
		||||
                #define __USE_LARGEFILE64
 | 
			
		||||
        #endif
 | 
			
		||||
        #ifndef _LARGEFILE64_SOURCE
 | 
			
		||||
                #define _LARGEFILE64_SOURCE
 | 
			
		||||
        #endif
 | 
			
		||||
        #ifndef _FILE_OFFSET_BIT
 | 
			
		||||
                #define _FILE_OFFSET_BIT 64
 | 
			
		||||
        #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
 | 
			
		||||
#ifdef unix
 | 
			
		||||
# include <unistd.h>
 | 
			
		||||
# include <utime.h>
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
# include <sys/stat.h>
 | 
			
		||||
#else
 | 
			
		||||
# include <direct.h>
 | 
			
		||||
# include <io.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "zip.h"
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
        #define USEWIN32IOAPI
 | 
			
		||||
        #include "iowin32.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define WRITEBUFFERSIZE (16384)
 | 
			
		||||
#define MAXFILENAME (256)
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
uLong filetime(f, tmzip, dt)
 | 
			
		||||
    char *f;                /* name of file to get info on */
 | 
			
		||||
    tm_zip *tmzip;             /* return value: access, modific. and creation times */
 | 
			
		||||
    uLong *dt;             /* dostime */
 | 
			
		||||
{
 | 
			
		||||
  int ret = 0;
 | 
			
		||||
  {
 | 
			
		||||
      FILETIME ftLocal;
 | 
			
		||||
      HANDLE hFind;
 | 
			
		||||
      WIN32_FIND_DATAA ff32;
 | 
			
		||||
 | 
			
		||||
      hFind = FindFirstFileA(f,&ff32);
 | 
			
		||||
      if (hFind != INVALID_HANDLE_VALUE)
 | 
			
		||||
      {
 | 
			
		||||
        FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal);
 | 
			
		||||
        FileTimeToDosDateTime(&ftLocal,((LPWORD)dt)+1,((LPWORD)dt)+0);
 | 
			
		||||
        FindClose(hFind);
 | 
			
		||||
        ret = 1;
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
#ifdef unix
 | 
			
		||||
uLong filetime(f, tmzip, dt)
 | 
			
		||||
    char *f;               /* name of file to get info on */
 | 
			
		||||
    tm_zip *tmzip;         /* return value: access, modific. and creation times */
 | 
			
		||||
    uLong *dt;             /* dostime */
 | 
			
		||||
{
 | 
			
		||||
  int ret=0;
 | 
			
		||||
  struct stat s;        /* results of stat() */
 | 
			
		||||
  struct tm* filedate;
 | 
			
		||||
  time_t tm_t=0;
 | 
			
		||||
 | 
			
		||||
  if (strcmp(f,"-")!=0)
 | 
			
		||||
  {
 | 
			
		||||
    char name[MAXFILENAME+1];
 | 
			
		||||
    int len = strlen(f);
 | 
			
		||||
    if (len > MAXFILENAME)
 | 
			
		||||
      len = MAXFILENAME;
 | 
			
		||||
 | 
			
		||||
    strncpy(name, f,MAXFILENAME-1);
 | 
			
		||||
    /* strncpy doesnt append the trailing NULL, of the string is too long. */
 | 
			
		||||
    name[ MAXFILENAME ] = '\0';
 | 
			
		||||
 | 
			
		||||
    if (name[len - 1] == '/')
 | 
			
		||||
      name[len - 1] = '\0';
 | 
			
		||||
    /* not all systems allow stat'ing a file with / appended */
 | 
			
		||||
    if (stat(name,&s)==0)
 | 
			
		||||
    {
 | 
			
		||||
      tm_t = s.st_mtime;
 | 
			
		||||
      ret = 1;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  filedate = localtime(&tm_t);
 | 
			
		||||
 | 
			
		||||
  tmzip->tm_sec  = filedate->tm_sec;
 | 
			
		||||
  tmzip->tm_min  = filedate->tm_min;
 | 
			
		||||
  tmzip->tm_hour = filedate->tm_hour;
 | 
			
		||||
  tmzip->tm_mday = filedate->tm_mday;
 | 
			
		||||
  tmzip->tm_mon  = filedate->tm_mon ;
 | 
			
		||||
  tmzip->tm_year = filedate->tm_year;
 | 
			
		||||
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
uLong filetime(f, tmzip, dt)
 | 
			
		||||
    char *f;                /* name of file to get info on */
 | 
			
		||||
    tm_zip *tmzip;             /* return value: access, modific. and creation times */
 | 
			
		||||
    uLong *dt;             /* dostime */
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int check_exist_file(filename)
 | 
			
		||||
    const char* filename;
 | 
			
		||||
{
 | 
			
		||||
    FILE* ftestexist;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    ftestexist = fopen64(filename,"rb");
 | 
			
		||||
    if (ftestexist==NULL)
 | 
			
		||||
        ret = 0;
 | 
			
		||||
    else
 | 
			
		||||
        fclose(ftestexist);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void do_banner()
 | 
			
		||||
{
 | 
			
		||||
    printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n");
 | 
			
		||||
    printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void do_help()
 | 
			
		||||
{
 | 
			
		||||
    printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \
 | 
			
		||||
           "  -o  Overwrite existing file.zip\n" \
 | 
			
		||||
           "  -a  Append to existing file.zip\n" \
 | 
			
		||||
           "  -0  Store only\n" \
 | 
			
		||||
           "  -1  Compress faster\n" \
 | 
			
		||||
           "  -9  Compress better\n\n" \
 | 
			
		||||
           "  -j  exclude path. store only the file name.\n\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* calculate the CRC32 of a file,
 | 
			
		||||
   because to encrypt a file, we need known the CRC32 of the file before */
 | 
			
		||||
int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)
 | 
			
		||||
{
 | 
			
		||||
   unsigned long calculate_crc=0;
 | 
			
		||||
   int err=ZIP_OK;
 | 
			
		||||
   FILE * fin = fopen64(filenameinzip,"rb");
 | 
			
		||||
   unsigned long size_read = 0;
 | 
			
		||||
   unsigned long total_read = 0;
 | 
			
		||||
   if (fin==NULL)
 | 
			
		||||
   {
 | 
			
		||||
       err = ZIP_ERRNO;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
    if (err == ZIP_OK)
 | 
			
		||||
        do
 | 
			
		||||
        {
 | 
			
		||||
            err = ZIP_OK;
 | 
			
		||||
            size_read = (int)fread(buf,1,size_buf,fin);
 | 
			
		||||
            if (size_read < size_buf)
 | 
			
		||||
                if (feof(fin)==0)
 | 
			
		||||
            {
 | 
			
		||||
                printf("error in reading %s\n",filenameinzip);
 | 
			
		||||
                err = ZIP_ERRNO;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (size_read>0)
 | 
			
		||||
                calculate_crc = crc32(calculate_crc,buf,size_read);
 | 
			
		||||
            total_read += size_read;
 | 
			
		||||
 | 
			
		||||
        } while ((err == ZIP_OK) && (size_read>0));
 | 
			
		||||
 | 
			
		||||
    if (fin)
 | 
			
		||||
        fclose(fin);
 | 
			
		||||
 | 
			
		||||
    *result_crc=calculate_crc;
 | 
			
		||||
    printf("file %s crc %lx\n", filenameinzip, calculate_crc);
 | 
			
		||||
    return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int isLargeFile(const char* filename)
 | 
			
		||||
{
 | 
			
		||||
  int largeFile = 0;
 | 
			
		||||
  ZPOS64_T pos = 0;
 | 
			
		||||
  FILE* pFile = fopen64(filename, "rb");
 | 
			
		||||
 | 
			
		||||
  if(pFile != NULL)
 | 
			
		||||
  {
 | 
			
		||||
    int n = fseeko64(pFile, 0, SEEK_END);
 | 
			
		||||
 | 
			
		||||
    pos = ftello64(pFile);
 | 
			
		||||
 | 
			
		||||
                printf("File : %s is %lld bytes\n", filename, pos);
 | 
			
		||||
 | 
			
		||||
    if(pos >= 0xffffffff)
 | 
			
		||||
     largeFile = 1;
 | 
			
		||||
 | 
			
		||||
                fclose(pFile);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 return largeFile;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(argc,argv)
 | 
			
		||||
    int argc;
 | 
			
		||||
    char *argv[];
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
    int opt_overwrite=0;
 | 
			
		||||
    int opt_compress_level=Z_DEFAULT_COMPRESSION;
 | 
			
		||||
    int opt_exclude_path=0;
 | 
			
		||||
    int zipfilenamearg = 0;
 | 
			
		||||
    char filename_try[MAXFILENAME+16];
 | 
			
		||||
    int zipok;
 | 
			
		||||
    int err=0;
 | 
			
		||||
    int size_buf=0;
 | 
			
		||||
    void* buf=NULL;
 | 
			
		||||
    const char* password=NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    do_banner();
 | 
			
		||||
    if (argc==1)
 | 
			
		||||
    {
 | 
			
		||||
        do_help();
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        for (i=1;i<argc;i++)
 | 
			
		||||
        {
 | 
			
		||||
            if ((*argv[i])=='-')
 | 
			
		||||
            {
 | 
			
		||||
                const char *p=argv[i]+1;
 | 
			
		||||
 | 
			
		||||
                while ((*p)!='\0')
 | 
			
		||||
                {
 | 
			
		||||
                    char c=*(p++);;
 | 
			
		||||
                    if ((c=='o') || (c=='O'))
 | 
			
		||||
                        opt_overwrite = 1;
 | 
			
		||||
                    if ((c=='a') || (c=='A'))
 | 
			
		||||
                        opt_overwrite = 2;
 | 
			
		||||
                    if ((c>='0') && (c<='9'))
 | 
			
		||||
                        opt_compress_level = c-'0';
 | 
			
		||||
                    if ((c=='j') || (c=='J'))
 | 
			
		||||
                        opt_exclude_path = 1;
 | 
			
		||||
 | 
			
		||||
                    if (((c=='p') || (c=='P')) && (i+1<argc))
 | 
			
		||||
                    {
 | 
			
		||||
                        password=argv[i+1];
 | 
			
		||||
                        i++;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (zipfilenamearg == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    zipfilenamearg = i ;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    size_buf = WRITEBUFFERSIZE;
 | 
			
		||||
    buf = (void*)malloc(size_buf);
 | 
			
		||||
    if (buf==NULL)
 | 
			
		||||
    {
 | 
			
		||||
        printf("Error allocating memory\n");
 | 
			
		||||
        return ZIP_INTERNALERROR;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (zipfilenamearg==0)
 | 
			
		||||
    {
 | 
			
		||||
        zipok=0;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        int i,len;
 | 
			
		||||
        int dot_found=0;
 | 
			
		||||
 | 
			
		||||
        zipok = 1 ;
 | 
			
		||||
        strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1);
 | 
			
		||||
        /* strncpy doesnt append the trailing NULL, of the string is too long. */
 | 
			
		||||
        filename_try[ MAXFILENAME ] = '\0';
 | 
			
		||||
 | 
			
		||||
        len=(int)strlen(filename_try);
 | 
			
		||||
        for (i=0;i<len;i++)
 | 
			
		||||
            if (filename_try[i]=='.')
 | 
			
		||||
                dot_found=1;
 | 
			
		||||
 | 
			
		||||
        if (dot_found==0)
 | 
			
		||||
            strcat(filename_try,".zip");
 | 
			
		||||
 | 
			
		||||
        if (opt_overwrite==2)
 | 
			
		||||
        {
 | 
			
		||||
            /* if the file don't exist, we not append file */
 | 
			
		||||
            if (check_exist_file(filename_try)==0)
 | 
			
		||||
                opt_overwrite=1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        if (opt_overwrite==0)
 | 
			
		||||
            if (check_exist_file(filename_try)!=0)
 | 
			
		||||
            {
 | 
			
		||||
                char rep=0;
 | 
			
		||||
                do
 | 
			
		||||
                {
 | 
			
		||||
                    char answer[128];
 | 
			
		||||
                    int ret;
 | 
			
		||||
                    printf("The file %s exists. Overwrite ? [y]es, [n]o, [a]ppend : ",filename_try);
 | 
			
		||||
                    ret = scanf("%1s",answer);
 | 
			
		||||
                    if (ret != 1)
 | 
			
		||||
                    {
 | 
			
		||||
                       exit(EXIT_FAILURE);
 | 
			
		||||
                    }
 | 
			
		||||
                    rep = answer[0] ;
 | 
			
		||||
                    if ((rep>='a') && (rep<='z'))
 | 
			
		||||
                        rep -= 0x20;
 | 
			
		||||
                }
 | 
			
		||||
                while ((rep!='Y') && (rep!='N') && (rep!='A'));
 | 
			
		||||
                if (rep=='N')
 | 
			
		||||
                    zipok = 0;
 | 
			
		||||
                if (rep=='A')
 | 
			
		||||
                    opt_overwrite = 2;
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (zipok==1)
 | 
			
		||||
    {
 | 
			
		||||
        zipFile zf;
 | 
			
		||||
        int errclose;
 | 
			
		||||
#        ifdef USEWIN32IOAPI
 | 
			
		||||
        zlib_filefunc64_def ffunc;
 | 
			
		||||
        fill_win32_filefunc64A(&ffunc);
 | 
			
		||||
        zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc);
 | 
			
		||||
#        else
 | 
			
		||||
        zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0);
 | 
			
		||||
#        endif
 | 
			
		||||
 | 
			
		||||
        if (zf == NULL)
 | 
			
		||||
        {
 | 
			
		||||
            printf("error opening %s\n",filename_try);
 | 
			
		||||
            err= ZIP_ERRNO;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
            printf("creating %s\n",filename_try);
 | 
			
		||||
 | 
			
		||||
        for (i=zipfilenamearg+1;(i<argc) && (err==ZIP_OK);i++)
 | 
			
		||||
        {
 | 
			
		||||
            if (!((((*(argv[i]))=='-') || ((*(argv[i]))=='/')) &&
 | 
			
		||||
                  ((argv[i][1]=='o') || (argv[i][1]=='O') ||
 | 
			
		||||
                   (argv[i][1]=='a') || (argv[i][1]=='A') ||
 | 
			
		||||
                   (argv[i][1]=='p') || (argv[i][1]=='P') ||
 | 
			
		||||
                   ((argv[i][1]>='0') || (argv[i][1]<='9'))) &&
 | 
			
		||||
                  (strlen(argv[i]) == 2)))
 | 
			
		||||
            {
 | 
			
		||||
                FILE * fin;
 | 
			
		||||
                int size_read;
 | 
			
		||||
                const char* filenameinzip = argv[i];
 | 
			
		||||
                const char *savefilenameinzip;
 | 
			
		||||
                zip_fileinfo zi;
 | 
			
		||||
                unsigned long crcFile=0;
 | 
			
		||||
                int zip64 = 0;
 | 
			
		||||
 | 
			
		||||
                zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour =
 | 
			
		||||
                zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0;
 | 
			
		||||
                zi.dosDate = 0;
 | 
			
		||||
                zi.internal_fa = 0;
 | 
			
		||||
                zi.external_fa = 0;
 | 
			
		||||
                filetime(filenameinzip,&zi.tmz_date,&zi.dosDate);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
                err = zipOpenNewFileInZip(zf,filenameinzip,&zi,
 | 
			
		||||
                                 NULL,0,NULL,0,NULL / * comment * /,
 | 
			
		||||
                                 (opt_compress_level != 0) ? Z_DEFLATED : 0,
 | 
			
		||||
                                 opt_compress_level);
 | 
			
		||||
*/
 | 
			
		||||
                if ((password != NULL) && (err==ZIP_OK))
 | 
			
		||||
                    err = getFileCrc(filenameinzip,buf,size_buf,&crcFile);
 | 
			
		||||
 | 
			
		||||
                zip64 = isLargeFile(filenameinzip);
 | 
			
		||||
 | 
			
		||||
                                                         /* The path name saved, should not include a leading slash. */
 | 
			
		||||
               /*if it did, windows/xp and dynazip couldn't read the zip file. */
 | 
			
		||||
                 savefilenameinzip = filenameinzip;
 | 
			
		||||
                 while( savefilenameinzip[0] == '\\' || savefilenameinzip[0] == '/' )
 | 
			
		||||
                 {
 | 
			
		||||
                     savefilenameinzip++;
 | 
			
		||||
                 }
 | 
			
		||||
 | 
			
		||||
                 /*should the zip file contain any path at all?*/
 | 
			
		||||
                 if( opt_exclude_path )
 | 
			
		||||
                 {
 | 
			
		||||
                     const char *tmpptr;
 | 
			
		||||
                     const char *lastslash = 0;
 | 
			
		||||
                     for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++)
 | 
			
		||||
                     {
 | 
			
		||||
                         if( *tmpptr == '\\' || *tmpptr == '/')
 | 
			
		||||
                         {
 | 
			
		||||
                             lastslash = tmpptr;
 | 
			
		||||
                         }
 | 
			
		||||
                     }
 | 
			
		||||
                     if( lastslash != NULL )
 | 
			
		||||
                     {
 | 
			
		||||
                         savefilenameinzip = lastslash+1; // base filename follows last slash.
 | 
			
		||||
                     }
 | 
			
		||||
                 }
 | 
			
		||||
 | 
			
		||||
                 /**/
 | 
			
		||||
                err = zipOpenNewFileInZip3_64(zf,savefilenameinzip,&zi,
 | 
			
		||||
                                 NULL,0,NULL,0,NULL /* comment*/,
 | 
			
		||||
                                 (opt_compress_level != 0) ? Z_DEFLATED : 0,
 | 
			
		||||
                                 opt_compress_level,0,
 | 
			
		||||
                                 /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */
 | 
			
		||||
                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
 | 
			
		||||
                                 password,crcFile, zip64);
 | 
			
		||||
 | 
			
		||||
                if (err != ZIP_OK)
 | 
			
		||||
                    printf("error in opening %s in zipfile\n",filenameinzip);
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    fin = fopen64(filenameinzip,"rb");
 | 
			
		||||
                    if (fin==NULL)
 | 
			
		||||
                    {
 | 
			
		||||
                        err=ZIP_ERRNO;
 | 
			
		||||
                        printf("error in opening %s for reading\n",filenameinzip);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (err == ZIP_OK)
 | 
			
		||||
                    do
 | 
			
		||||
                    {
 | 
			
		||||
                        err = ZIP_OK;
 | 
			
		||||
                        size_read = (int)fread(buf,1,size_buf,fin);
 | 
			
		||||
                        if (size_read < size_buf)
 | 
			
		||||
                            if (feof(fin)==0)
 | 
			
		||||
                        {
 | 
			
		||||
                            printf("error in reading %s\n",filenameinzip);
 | 
			
		||||
                            err = ZIP_ERRNO;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (size_read>0)
 | 
			
		||||
                        {
 | 
			
		||||
                            err = zipWriteInFileInZip (zf,buf,size_read);
 | 
			
		||||
                            if (err<0)
 | 
			
		||||
                            {
 | 
			
		||||
                                printf("error in writing %s in the zipfile\n",
 | 
			
		||||
                                                 filenameinzip);
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
                    } while ((err == ZIP_OK) && (size_read>0));
 | 
			
		||||
 | 
			
		||||
                if (fin)
 | 
			
		||||
                    fclose(fin);
 | 
			
		||||
 | 
			
		||||
                if (err<0)
 | 
			
		||||
                    err=ZIP_ERRNO;
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    err = zipCloseFileInZip(zf);
 | 
			
		||||
                    if (err!=ZIP_OK)
 | 
			
		||||
                        printf("error in closing %s in the zipfile\n",
 | 
			
		||||
                                    filenameinzip);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        errclose = zipClose(zf,NULL);
 | 
			
		||||
        if (errclose != ZIP_OK)
 | 
			
		||||
            printf("error in closing %s\n",filename_try);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
       do_help();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    free(buf);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										281
									
								
								SkinInstaller/zlib/minizip/mztools.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										281
									
								
								SkinInstaller/zlib/minizip/mztools.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,281 @@
 | 
			
		||||
/*
 | 
			
		||||
  Additional tools for Minizip
 | 
			
		||||
  Code: Xavier Roche '2004
 | 
			
		||||
  License: Same as ZLIB (www.gzip.org)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* Code */
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
#include "unzip.h"
 | 
			
		||||
 | 
			
		||||
#define READ_8(adr)  ((unsigned char)*(adr))
 | 
			
		||||
#define READ_16(adr) ( READ_8(adr) | (READ_8(adr+1) << 8) )
 | 
			
		||||
#define READ_32(adr) ( READ_16(adr) | (READ_16((adr)+2) << 16) )
 | 
			
		||||
 | 
			
		||||
#define WRITE_8(buff, n) do { \
 | 
			
		||||
  *((unsigned char*)(buff)) = (unsigned char) ((n) & 0xff); \
 | 
			
		||||
} while(0)
 | 
			
		||||
#define WRITE_16(buff, n) do { \
 | 
			
		||||
  WRITE_8((unsigned char*)(buff), n); \
 | 
			
		||||
  WRITE_8(((unsigned char*)(buff)) + 1, (n) >> 8); \
 | 
			
		||||
} while(0)
 | 
			
		||||
#define WRITE_32(buff, n) do { \
 | 
			
		||||
  WRITE_16((unsigned char*)(buff), (n) & 0xffff); \
 | 
			
		||||
  WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \
 | 
			
		||||
} while(0)
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered)
 | 
			
		||||
const char* file;
 | 
			
		||||
const char* fileOut;
 | 
			
		||||
const char* fileOutTmp;
 | 
			
		||||
uLong* nRecovered;
 | 
			
		||||
uLong* bytesRecovered;
 | 
			
		||||
{
 | 
			
		||||
  int err = Z_OK;
 | 
			
		||||
  FILE* fpZip = fopen(file, "rb");
 | 
			
		||||
  FILE* fpOut = fopen(fileOut, "wb");
 | 
			
		||||
  FILE* fpOutCD = fopen(fileOutTmp, "wb");
 | 
			
		||||
  if (fpZip != NULL &&  fpOut != NULL) {
 | 
			
		||||
    int entries = 0;
 | 
			
		||||
    uLong totalBytes = 0;
 | 
			
		||||
    char header[30];
 | 
			
		||||
    char filename[256];
 | 
			
		||||
    char extra[1024];
 | 
			
		||||
    int offset = 0;
 | 
			
		||||
    int offsetCD = 0;
 | 
			
		||||
    while ( fread(header, 1, 30, fpZip) == 30 ) {
 | 
			
		||||
      int currentOffset = offset;
 | 
			
		||||
 | 
			
		||||
      /* File entry */
 | 
			
		||||
      if (READ_32(header) == 0x04034b50) {
 | 
			
		||||
        unsigned int version = READ_16(header + 4);
 | 
			
		||||
        unsigned int gpflag = READ_16(header + 6);
 | 
			
		||||
        unsigned int method = READ_16(header + 8);
 | 
			
		||||
        unsigned int filetime = READ_16(header + 10);
 | 
			
		||||
        unsigned int filedate = READ_16(header + 12);
 | 
			
		||||
        unsigned int crc = READ_32(header + 14); /* crc */
 | 
			
		||||
        unsigned int cpsize = READ_32(header + 18); /* compressed size */
 | 
			
		||||
        unsigned int uncpsize = READ_32(header + 22); /* uncompressed sz */
 | 
			
		||||
        unsigned int fnsize = READ_16(header + 26); /* file name length */
 | 
			
		||||
        unsigned int extsize = READ_16(header + 28); /* extra field length */
 | 
			
		||||
        filename[0] = extra[0] = '\0';
 | 
			
		||||
 | 
			
		||||
        /* Header */
 | 
			
		||||
        if (fwrite(header, 1, 30, fpOut) == 30) {
 | 
			
		||||
          offset += 30;
 | 
			
		||||
        } else {
 | 
			
		||||
          err = Z_ERRNO;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Filename */
 | 
			
		||||
        if (fnsize > 0) {
 | 
			
		||||
          if (fread(filename, 1, fnsize, fpZip) == fnsize) {
 | 
			
		||||
            if (fwrite(filename, 1, fnsize, fpOut) == fnsize) {
 | 
			
		||||
              offset += fnsize;
 | 
			
		||||
            } else {
 | 
			
		||||
              err = Z_ERRNO;
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
          } else {
 | 
			
		||||
            err = Z_ERRNO;
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          err = Z_STREAM_ERROR;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Extra field */
 | 
			
		||||
        if (extsize > 0) {
 | 
			
		||||
          if (fread(extra, 1, extsize, fpZip) == extsize) {
 | 
			
		||||
            if (fwrite(extra, 1, extsize, fpOut) == extsize) {
 | 
			
		||||
              offset += extsize;
 | 
			
		||||
            } else {
 | 
			
		||||
              err = Z_ERRNO;
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
          } else {
 | 
			
		||||
            err = Z_ERRNO;
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Data */
 | 
			
		||||
        {
 | 
			
		||||
          int dataSize = cpsize;
 | 
			
		||||
          if (dataSize == 0) {
 | 
			
		||||
            dataSize = uncpsize;
 | 
			
		||||
          }
 | 
			
		||||
          if (dataSize > 0) {
 | 
			
		||||
            char* data = malloc(dataSize);
 | 
			
		||||
            if (data != NULL) {
 | 
			
		||||
              if ((int)fread(data, 1, dataSize, fpZip) == dataSize) {
 | 
			
		||||
                if ((int)fwrite(data, 1, dataSize, fpOut) == dataSize) {
 | 
			
		||||
                  offset += dataSize;
 | 
			
		||||
                  totalBytes += dataSize;
 | 
			
		||||
                } else {
 | 
			
		||||
                  err = Z_ERRNO;
 | 
			
		||||
                }
 | 
			
		||||
              } else {
 | 
			
		||||
                err = Z_ERRNO;
 | 
			
		||||
              }
 | 
			
		||||
              free(data);
 | 
			
		||||
              if (err != Z_OK) {
 | 
			
		||||
                break;
 | 
			
		||||
              }
 | 
			
		||||
            } else {
 | 
			
		||||
              err = Z_MEM_ERROR;
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Central directory entry */
 | 
			
		||||
        {
 | 
			
		||||
          char header[46];
 | 
			
		||||
          char* comment = "";
 | 
			
		||||
          int comsize = (int) strlen(comment);
 | 
			
		||||
          WRITE_32(header, 0x02014b50);
 | 
			
		||||
          WRITE_16(header + 4, version);
 | 
			
		||||
          WRITE_16(header + 6, version);
 | 
			
		||||
          WRITE_16(header + 8, gpflag);
 | 
			
		||||
          WRITE_16(header + 10, method);
 | 
			
		||||
          WRITE_16(header + 12, filetime);
 | 
			
		||||
          WRITE_16(header + 14, filedate);
 | 
			
		||||
          WRITE_32(header + 16, crc);
 | 
			
		||||
          WRITE_32(header + 20, cpsize);
 | 
			
		||||
          WRITE_32(header + 24, uncpsize);
 | 
			
		||||
          WRITE_16(header + 28, fnsize);
 | 
			
		||||
          WRITE_16(header + 30, extsize);
 | 
			
		||||
          WRITE_16(header + 32, comsize);
 | 
			
		||||
          WRITE_16(header + 34, 0);     /* disk # */
 | 
			
		||||
          WRITE_16(header + 36, 0);     /* int attrb */
 | 
			
		||||
          WRITE_32(header + 38, 0);     /* ext attrb */
 | 
			
		||||
          WRITE_32(header + 42, currentOffset);
 | 
			
		||||
          /* Header */
 | 
			
		||||
          if (fwrite(header, 1, 46, fpOutCD) == 46) {
 | 
			
		||||
            offsetCD += 46;
 | 
			
		||||
 | 
			
		||||
            /* Filename */
 | 
			
		||||
            if (fnsize > 0) {
 | 
			
		||||
              if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize) {
 | 
			
		||||
                offsetCD += fnsize;
 | 
			
		||||
              } else {
 | 
			
		||||
                err = Z_ERRNO;
 | 
			
		||||
                break;
 | 
			
		||||
              }
 | 
			
		||||
            } else {
 | 
			
		||||
              err = Z_STREAM_ERROR;
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Extra field */
 | 
			
		||||
            if (extsize > 0) {
 | 
			
		||||
              if (fwrite(extra, 1, extsize, fpOutCD) == extsize) {
 | 
			
		||||
                offsetCD += extsize;
 | 
			
		||||
              } else {
 | 
			
		||||
                err = Z_ERRNO;
 | 
			
		||||
                break;
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Comment field */
 | 
			
		||||
            if (comsize > 0) {
 | 
			
		||||
              if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) {
 | 
			
		||||
                offsetCD += comsize;
 | 
			
		||||
              } else {
 | 
			
		||||
                err = Z_ERRNO;
 | 
			
		||||
                break;
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
          } else {
 | 
			
		||||
            err = Z_ERRNO;
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Success */
 | 
			
		||||
        entries++;
 | 
			
		||||
 | 
			
		||||
      } else {
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Final central directory  */
 | 
			
		||||
    {
 | 
			
		||||
      int entriesZip = entries;
 | 
			
		||||
      char header[22];
 | 
			
		||||
      char* comment = ""; // "ZIP File recovered by zlib/minizip/mztools";
 | 
			
		||||
      int comsize = (int) strlen(comment);
 | 
			
		||||
      if (entriesZip > 0xffff) {
 | 
			
		||||
        entriesZip = 0xffff;
 | 
			
		||||
      }
 | 
			
		||||
      WRITE_32(header, 0x06054b50);
 | 
			
		||||
      WRITE_16(header + 4, 0);    /* disk # */
 | 
			
		||||
      WRITE_16(header + 6, 0);    /* disk # */
 | 
			
		||||
      WRITE_16(header + 8, entriesZip);   /* hack */
 | 
			
		||||
      WRITE_16(header + 10, entriesZip);  /* hack */
 | 
			
		||||
      WRITE_32(header + 12, offsetCD);    /* size of CD */
 | 
			
		||||
      WRITE_32(header + 16, offset);      /* offset to CD */
 | 
			
		||||
      WRITE_16(header + 20, comsize);     /* comment */
 | 
			
		||||
 | 
			
		||||
      /* Header */
 | 
			
		||||
      if (fwrite(header, 1, 22, fpOutCD) == 22) {
 | 
			
		||||
 | 
			
		||||
        /* Comment field */
 | 
			
		||||
        if (comsize > 0) {
 | 
			
		||||
          if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) {
 | 
			
		||||
            err = Z_ERRNO;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      } else {
 | 
			
		||||
        err = Z_ERRNO;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Final merge (file + central directory) */
 | 
			
		||||
    fclose(fpOutCD);
 | 
			
		||||
    if (err == Z_OK) {
 | 
			
		||||
      fpOutCD = fopen(fileOutTmp, "rb");
 | 
			
		||||
      if (fpOutCD != NULL) {
 | 
			
		||||
        int nRead;
 | 
			
		||||
        char buffer[8192];
 | 
			
		||||
        while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) {
 | 
			
		||||
          if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) {
 | 
			
		||||
            err = Z_ERRNO;
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        fclose(fpOutCD);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Close */
 | 
			
		||||
    fclose(fpZip);
 | 
			
		||||
    fclose(fpOut);
 | 
			
		||||
 | 
			
		||||
    /* Wipe temporary file */
 | 
			
		||||
    (void)remove(fileOutTmp);
 | 
			
		||||
 | 
			
		||||
    /* Number of recovered entries */
 | 
			
		||||
    if (err == Z_OK) {
 | 
			
		||||
      if (nRecovered != NULL) {
 | 
			
		||||
        *nRecovered = entries;
 | 
			
		||||
      }
 | 
			
		||||
      if (bytesRecovered != NULL) {
 | 
			
		||||
        *bytesRecovered = totalBytes;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    err = Z_STREAM_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
  return err;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								SkinInstaller/zlib/minizip/mztools.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								SkinInstaller/zlib/minizip/mztools.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
/*
 | 
			
		||||
  Additional tools for Minizip
 | 
			
		||||
  Code: Xavier Roche '2004
 | 
			
		||||
  License: Same as ZLIB (www.gzip.org)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef _zip_tools_H
 | 
			
		||||
#define _zip_tools_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef _ZLIB_H
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "unzip.h"
 | 
			
		||||
 | 
			
		||||
/* Repair a ZIP file (missing central directory)
 | 
			
		||||
   file: file to recover
 | 
			
		||||
   fileOut: output file after recovery
 | 
			
		||||
   fileOutTmp: temporary file name used for recovery
 | 
			
		||||
*/
 | 
			
		||||
extern int ZEXPORT unzRepair(const char* file,
 | 
			
		||||
                             const char* fileOut,
 | 
			
		||||
                             const char* fileOutTmp,
 | 
			
		||||
                             uLong* nRecovered,
 | 
			
		||||
                             uLong* bytesRecovered);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										2125
									
								
								SkinInstaller/zlib/minizip/unzip.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2125
									
								
								SkinInstaller/zlib/minizip/unzip.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										437
									
								
								SkinInstaller/zlib/minizip/unzip.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										437
									
								
								SkinInstaller/zlib/minizip/unzip.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,437 @@
 | 
			
		||||
/* unzip.h -- IO for uncompress .zip files using zlib
 | 
			
		||||
   Version 1.1, February 14h, 2010
 | 
			
		||||
   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Modifications of Unzip for Zip64
 | 
			
		||||
         Copyright (C) 2007-2008 Even Rouault
 | 
			
		||||
 | 
			
		||||
         Modifications for Zip64 support on both zip and unzip
 | 
			
		||||
         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
 | 
			
		||||
 | 
			
		||||
         For more info read MiniZip_info.txt
 | 
			
		||||
 | 
			
		||||
         ---------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
        Condition of use and distribution are the same than zlib :
 | 
			
		||||
 | 
			
		||||
  This software is provided 'as-is', without any express or implied
 | 
			
		||||
  warranty.  In no event will the authors be held liable for any damages
 | 
			
		||||
  arising from the use of this software.
 | 
			
		||||
 | 
			
		||||
  Permission is granted to anyone to use this software for any purpose,
 | 
			
		||||
  including commercial applications, and to alter it and redistribute it
 | 
			
		||||
  freely, subject to the following restrictions:
 | 
			
		||||
 | 
			
		||||
  1. The origin of this software must not be misrepresented; you must not
 | 
			
		||||
     claim that you wrote the original software. If you use this software
 | 
			
		||||
     in a product, an acknowledgment in the product documentation would be
 | 
			
		||||
     appreciated but is not required.
 | 
			
		||||
  2. Altered source versions must be plainly marked as such, and must not be
 | 
			
		||||
     misrepresented as being the original software.
 | 
			
		||||
  3. This notice may not be removed or altered from any source distribution.
 | 
			
		||||
 | 
			
		||||
  ---------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
        Changes
 | 
			
		||||
 | 
			
		||||
        See header of unzip64.c
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef _unz64_H
 | 
			
		||||
#define _unz64_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef _ZLIB_H
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef  _ZLIBIOAPI_H
 | 
			
		||||
#include "ioapi.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_BZIP2
 | 
			
		||||
#include "bzlib.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define Z_BZIP2ED 12
 | 
			
		||||
 | 
			
		||||
#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; } unzFile__;
 | 
			
		||||
typedef unzFile__ *unzFile;
 | 
			
		||||
#else
 | 
			
		||||
typedef voidp unzFile;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define UNZ_OK                          (0)
 | 
			
		||||
#define UNZ_END_OF_LIST_OF_FILE         (-100)
 | 
			
		||||
#define UNZ_ERRNO                       (Z_ERRNO)
 | 
			
		||||
#define UNZ_EOF                         (0)
 | 
			
		||||
#define UNZ_PARAMERROR                  (-102)
 | 
			
		||||
#define UNZ_BADZIPFILE                  (-103)
 | 
			
		||||
#define UNZ_INTERNALERROR               (-104)
 | 
			
		||||
#define UNZ_CRCERROR                    (-105)
 | 
			
		||||
 | 
			
		||||
/* tm_unz contain date/time info */
 | 
			
		||||
typedef struct tm_unz_s
 | 
			
		||||
{
 | 
			
		||||
    uInt tm_sec;            /* seconds after the minute - [0,59] */
 | 
			
		||||
    uInt tm_min;            /* minutes after the hour - [0,59] */
 | 
			
		||||
    uInt tm_hour;           /* hours since midnight - [0,23] */
 | 
			
		||||
    uInt tm_mday;           /* day of the month - [1,31] */
 | 
			
		||||
    uInt tm_mon;            /* months since January - [0,11] */
 | 
			
		||||
    uInt tm_year;           /* years - [1980..2044] */
 | 
			
		||||
} tm_unz;
 | 
			
		||||
 | 
			
		||||
/* unz_global_info structure contain global data about the ZIPfile
 | 
			
		||||
   These data comes from the end of central dir */
 | 
			
		||||
typedef struct unz_global_info64_s
 | 
			
		||||
{
 | 
			
		||||
    ZPOS64_T number_entry;         /* total number of entries in
 | 
			
		||||
                                     the central dir on this disk */
 | 
			
		||||
    uLong size_comment;         /* size of the global comment of the zipfile */
 | 
			
		||||
} unz_global_info64;
 | 
			
		||||
 | 
			
		||||
typedef struct unz_global_info_s
 | 
			
		||||
{
 | 
			
		||||
    uLong number_entry;         /* total number of entries in
 | 
			
		||||
                                     the central dir on this disk */
 | 
			
		||||
    uLong size_comment;         /* size of the global comment of the zipfile */
 | 
			
		||||
} unz_global_info;
 | 
			
		||||
 | 
			
		||||
/* unz_file_info contain information about a file in the zipfile */
 | 
			
		||||
typedef struct unz_file_info64_s
 | 
			
		||||
{
 | 
			
		||||
    uLong version;              /* version made by                 2 bytes */
 | 
			
		||||
    uLong version_needed;       /* version needed to extract       2 bytes */
 | 
			
		||||
    uLong flag;                 /* general purpose bit flag        2 bytes */
 | 
			
		||||
    uLong compression_method;   /* compression method              2 bytes */
 | 
			
		||||
    uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */
 | 
			
		||||
    uLong crc;                  /* crc-32                          4 bytes */
 | 
			
		||||
    ZPOS64_T compressed_size;   /* compressed size                 8 bytes */
 | 
			
		||||
    ZPOS64_T uncompressed_size; /* uncompressed size               8 bytes */
 | 
			
		||||
    uLong size_filename;        /* filename length                 2 bytes */
 | 
			
		||||
    uLong size_file_extra;      /* extra field length              2 bytes */
 | 
			
		||||
    uLong size_file_comment;    /* file comment length             2 bytes */
 | 
			
		||||
 | 
			
		||||
    uLong disk_num_start;       /* disk number start               2 bytes */
 | 
			
		||||
    uLong internal_fa;          /* internal file attributes        2 bytes */
 | 
			
		||||
    uLong external_fa;          /* external file attributes        4 bytes */
 | 
			
		||||
 | 
			
		||||
    tm_unz tmu_date;
 | 
			
		||||
} unz_file_info64;
 | 
			
		||||
 | 
			
		||||
typedef struct unz_file_info_s
 | 
			
		||||
{
 | 
			
		||||
    uLong version;              /* version made by                 2 bytes */
 | 
			
		||||
    uLong version_needed;       /* version needed to extract       2 bytes */
 | 
			
		||||
    uLong flag;                 /* general purpose bit flag        2 bytes */
 | 
			
		||||
    uLong compression_method;   /* compression method              2 bytes */
 | 
			
		||||
    uLong dosDate;              /* last mod file date in Dos fmt   4 bytes */
 | 
			
		||||
    uLong crc;                  /* crc-32                          4 bytes */
 | 
			
		||||
    uLong compressed_size;      /* compressed size                 4 bytes */
 | 
			
		||||
    uLong uncompressed_size;    /* uncompressed size               4 bytes */
 | 
			
		||||
    uLong size_filename;        /* filename length                 2 bytes */
 | 
			
		||||
    uLong size_file_extra;      /* extra field length              2 bytes */
 | 
			
		||||
    uLong size_file_comment;    /* file comment length             2 bytes */
 | 
			
		||||
 | 
			
		||||
    uLong disk_num_start;       /* disk number start               2 bytes */
 | 
			
		||||
    uLong internal_fa;          /* internal file attributes        2 bytes */
 | 
			
		||||
    uLong external_fa;          /* external file attributes        4 bytes */
 | 
			
		||||
 | 
			
		||||
    tm_unz tmu_date;
 | 
			
		||||
} unz_file_info;
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
 | 
			
		||||
                                                 const char* fileName2,
 | 
			
		||||
                                                 int iCaseSensitivity));
 | 
			
		||||
/*
 | 
			
		||||
   Compare two filename (fileName1,fileName2).
 | 
			
		||||
   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
 | 
			
		||||
   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
 | 
			
		||||
                                or strcasecmp)
 | 
			
		||||
   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
 | 
			
		||||
    (like 1 on Unix, 2 on Windows)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern unzFile ZEXPORT unzOpen OF((const char *path));
 | 
			
		||||
extern unzFile ZEXPORT unzOpen64 OF((const void *path));
 | 
			
		||||
/*
 | 
			
		||||
  Open a Zip file. path contain the full pathname (by example,
 | 
			
		||||
     on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
 | 
			
		||||
     "zlib/zlib113.zip".
 | 
			
		||||
     If the zipfile cannot be opened (file don't exist or in not valid), the
 | 
			
		||||
       return value is NULL.
 | 
			
		||||
     Else, the return value is a unzFile Handle, usable with other function
 | 
			
		||||
       of this unzip package.
 | 
			
		||||
     the "64" function take a const void* pointer, because the path is just the
 | 
			
		||||
       value passed to the open64_file_func callback.
 | 
			
		||||
     Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path
 | 
			
		||||
       is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char*
 | 
			
		||||
       does not describe the reality
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern unzFile ZEXPORT unzOpen2 OF((const char *path,
 | 
			
		||||
                                    zlib_filefunc_def* pzlib_filefunc_def));
 | 
			
		||||
/*
 | 
			
		||||
   Open a Zip file, like unzOpen, but provide a set of file low level API
 | 
			
		||||
      for read/write the zip file (see ioapi.h)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern unzFile ZEXPORT unzOpen2_64 OF((const void *path,
 | 
			
		||||
                                    zlib_filefunc64_def* pzlib_filefunc_def));
 | 
			
		||||
/*
 | 
			
		||||
   Open a Zip file, like unz64Open, but provide a set of file low level API
 | 
			
		||||
      for read/write the zip file (see ioapi.h)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzClose OF((unzFile file));
 | 
			
		||||
/*
 | 
			
		||||
  Close a ZipFile opened with unzipOpen.
 | 
			
		||||
  If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
 | 
			
		||||
    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
 | 
			
		||||
  return UNZ_OK if there is no problem. */
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
 | 
			
		||||
                                        unz_global_info *pglobal_info));
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file,
 | 
			
		||||
                                        unz_global_info64 *pglobal_info));
 | 
			
		||||
/*
 | 
			
		||||
  Write info about the ZipFile in the *pglobal_info structure.
 | 
			
		||||
  No preparation of the structure is needed
 | 
			
		||||
  return UNZ_OK if there is no problem. */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
 | 
			
		||||
                                           char *szComment,
 | 
			
		||||
                                           uLong uSizeBuf));
 | 
			
		||||
/*
 | 
			
		||||
  Get the global comment string of the ZipFile, in the szComment buffer.
 | 
			
		||||
  uSizeBuf is the size of the szComment buffer.
 | 
			
		||||
  return the number of byte copied or an error code <0
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***************************************************************************/
 | 
			
		||||
/* Unzip package allow you browse the directory of the zipfile */
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
 | 
			
		||||
/*
 | 
			
		||||
  Set the current file of the zipfile to the first file.
 | 
			
		||||
  return UNZ_OK if there is no problem
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGoToNextFile OF((unzFile file));
 | 
			
		||||
/*
 | 
			
		||||
  Set the current file of the zipfile to the next file.
 | 
			
		||||
  return UNZ_OK if there is no problem
 | 
			
		||||
  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzLocateFile OF((unzFile file,
 | 
			
		||||
                     const char *szFileName,
 | 
			
		||||
                     int iCaseSensitivity));
 | 
			
		||||
/*
 | 
			
		||||
  Try locate the file szFileName in the zipfile.
 | 
			
		||||
  For the iCaseSensitivity signification, see unzStringFileNameCompare
 | 
			
		||||
 | 
			
		||||
  return value :
 | 
			
		||||
  UNZ_OK if the file is found. It becomes the current file.
 | 
			
		||||
  UNZ_END_OF_LIST_OF_FILE if the file is not found
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ****************************************** */
 | 
			
		||||
/* Ryan supplied functions */
 | 
			
		||||
/* unz_file_info contain information about a file in the zipfile */
 | 
			
		||||
typedef struct unz_file_pos_s
 | 
			
		||||
{
 | 
			
		||||
    uLong pos_in_zip_directory;   /* offset in zip file directory */
 | 
			
		||||
    uLong num_of_file;            /* # of file */
 | 
			
		||||
} unz_file_pos;
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGetFilePos(
 | 
			
		||||
    unzFile file,
 | 
			
		||||
    unz_file_pos* file_pos);
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGoToFilePos(
 | 
			
		||||
    unzFile file,
 | 
			
		||||
    unz_file_pos* file_pos);
 | 
			
		||||
 | 
			
		||||
typedef struct unz64_file_pos_s
 | 
			
		||||
{
 | 
			
		||||
    ZPOS64_T pos_in_zip_directory;   /* offset in zip file directory */
 | 
			
		||||
    ZPOS64_T num_of_file;            /* # of file */
 | 
			
		||||
} unz64_file_pos;
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGetFilePos64(
 | 
			
		||||
    unzFile file,
 | 
			
		||||
    unz64_file_pos* file_pos);
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGoToFilePos64(
 | 
			
		||||
    unzFile file,
 | 
			
		||||
    const unz64_file_pos* file_pos);
 | 
			
		||||
 | 
			
		||||
/* ****************************************** */
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file,
 | 
			
		||||
                         unz_file_info64 *pfile_info,
 | 
			
		||||
                         char *szFileName,
 | 
			
		||||
                         uLong fileNameBufferSize,
 | 
			
		||||
                         void *extraField,
 | 
			
		||||
                         uLong extraFieldBufferSize,
 | 
			
		||||
                         char *szComment,
 | 
			
		||||
                         uLong commentBufferSize));
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
 | 
			
		||||
                         unz_file_info *pfile_info,
 | 
			
		||||
                         char *szFileName,
 | 
			
		||||
                         uLong fileNameBufferSize,
 | 
			
		||||
                         void *extraField,
 | 
			
		||||
                         uLong extraFieldBufferSize,
 | 
			
		||||
                         char *szComment,
 | 
			
		||||
                         uLong commentBufferSize));
 | 
			
		||||
/*
 | 
			
		||||
  Get Info about the current file
 | 
			
		||||
  if pfile_info!=NULL, the *pfile_info structure will contain somes info about
 | 
			
		||||
        the current file
 | 
			
		||||
  if szFileName!=NULL, the filemane string will be copied in szFileName
 | 
			
		||||
            (fileNameBufferSize is the size of the buffer)
 | 
			
		||||
  if extraField!=NULL, the extra field information will be copied in extraField
 | 
			
		||||
            (extraFieldBufferSize is the size of the buffer).
 | 
			
		||||
            This is the Central-header version of the extra field
 | 
			
		||||
  if szComment!=NULL, the comment string of the file will be copied in szComment
 | 
			
		||||
            (commentBufferSize is the size of the buffer)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** Addition for GDAL : START */
 | 
			
		||||
 | 
			
		||||
extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));
 | 
			
		||||
 | 
			
		||||
/** Addition for GDAL : END */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***************************************************************************/
 | 
			
		||||
/* for reading the content of the current zipfile, you can open it, read data
 | 
			
		||||
   from it, and close it (you can close it before reading all the file)
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
 | 
			
		||||
/*
 | 
			
		||||
  Open for reading data the current file in the zipfile.
 | 
			
		||||
  If there is no error, the return value is UNZ_OK.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
 | 
			
		||||
                                                  const char* password));
 | 
			
		||||
/*
 | 
			
		||||
  Open for reading data the current file in the zipfile.
 | 
			
		||||
  password is a crypting password
 | 
			
		||||
  If there is no error, the return value is UNZ_OK.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
 | 
			
		||||
                                           int* method,
 | 
			
		||||
                                           int* level,
 | 
			
		||||
                                           int raw));
 | 
			
		||||
/*
 | 
			
		||||
  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
 | 
			
		||||
    if raw==1
 | 
			
		||||
  *method will receive method of compression, *level will receive level of
 | 
			
		||||
     compression
 | 
			
		||||
  note : you can set level parameter as NULL (if you did not want known level,
 | 
			
		||||
         but you CANNOT set method parameter as NULL
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
 | 
			
		||||
                                           int* method,
 | 
			
		||||
                                           int* level,
 | 
			
		||||
                                           int raw,
 | 
			
		||||
                                           const char* password));
 | 
			
		||||
/*
 | 
			
		||||
  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
 | 
			
		||||
    if raw==1
 | 
			
		||||
  *method will receive method of compression, *level will receive level of
 | 
			
		||||
     compression
 | 
			
		||||
  note : you can set level parameter as NULL (if you did not want known level,
 | 
			
		||||
         but you CANNOT set method parameter as NULL
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
 | 
			
		||||
/*
 | 
			
		||||
  Close the file in zip opened with unzOpenCurrentFile
 | 
			
		||||
  Return UNZ_CRCERROR if all the file was read but the CRC is not good
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
 | 
			
		||||
                      voidp buf,
 | 
			
		||||
                      unsigned len));
 | 
			
		||||
/*
 | 
			
		||||
  Read bytes from the current file (opened by unzOpenCurrentFile)
 | 
			
		||||
  buf contain buffer where data must be copied
 | 
			
		||||
  len the size of buf.
 | 
			
		||||
 | 
			
		||||
  return the number of byte copied if somes bytes are copied
 | 
			
		||||
  return 0 if the end of file was reached
 | 
			
		||||
  return <0 with error code if there is an error
 | 
			
		||||
    (UNZ_ERRNO for IO error, or zLib error for uncompress error)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern z_off_t ZEXPORT unztell OF((unzFile file));
 | 
			
		||||
 | 
			
		||||
extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file));
 | 
			
		||||
/*
 | 
			
		||||
  Give the current position in uncompressed data
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzeof OF((unzFile file));
 | 
			
		||||
/*
 | 
			
		||||
  return 1 if the end of file was reached, 0 elsewhere
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
 | 
			
		||||
                                             voidp buf,
 | 
			
		||||
                                             unsigned len));
 | 
			
		||||
/*
 | 
			
		||||
  Read extra field from the current file (opened by unzOpenCurrentFile)
 | 
			
		||||
  This is the local-header version of the extra field (sometimes, there is
 | 
			
		||||
    more info in the local-header version than in the central-header)
 | 
			
		||||
 | 
			
		||||
  if buf==NULL, it return the size of the local extra field
 | 
			
		||||
 | 
			
		||||
  if buf!=NULL, len is the size of the buffer, the extra header is copied in
 | 
			
		||||
    buf.
 | 
			
		||||
  the return value is the number of bytes copied in buf, or (if <0)
 | 
			
		||||
    the error code
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/***************************************************************************/
 | 
			
		||||
 | 
			
		||||
/* Get the current file offset */
 | 
			
		||||
extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file);
 | 
			
		||||
extern uLong ZEXPORT unzGetOffset (unzFile file);
 | 
			
		||||
 | 
			
		||||
/* Set the current file offset */
 | 
			
		||||
extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos);
 | 
			
		||||
extern int ZEXPORT unzSetOffset (unzFile file, uLong pos);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _unz64_H */
 | 
			
		||||
							
								
								
									
										2004
									
								
								SkinInstaller/zlib/minizip/zip.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2004
									
								
								SkinInstaller/zlib/minizip/zip.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										362
									
								
								SkinInstaller/zlib/minizip/zip.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										362
									
								
								SkinInstaller/zlib/minizip/zip.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,362 @@
 | 
			
		||||
/* zip.h -- IO on .zip files using zlib
 | 
			
		||||
   Version 1.1, February 14h, 2010
 | 
			
		||||
   part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
 | 
			
		||||
 | 
			
		||||
         Modifications for Zip64 support
 | 
			
		||||
         Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
 | 
			
		||||
 | 
			
		||||
         For more info read MiniZip_info.txt
 | 
			
		||||
 | 
			
		||||
         ---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
   Condition of use and distribution are the same than zlib :
 | 
			
		||||
 | 
			
		||||
  This software is provided 'as-is', without any express or implied
 | 
			
		||||
  warranty.  In no event will the authors be held liable for any damages
 | 
			
		||||
  arising from the use of this software.
 | 
			
		||||
 | 
			
		||||
  Permission is granted to anyone to use this software for any purpose,
 | 
			
		||||
  including commercial applications, and to alter it and redistribute it
 | 
			
		||||
  freely, subject to the following restrictions:
 | 
			
		||||
 | 
			
		||||
  1. The origin of this software must not be misrepresented; you must not
 | 
			
		||||
     claim that you wrote the original software. If you use this software
 | 
			
		||||
     in a product, an acknowledgment in the product documentation would be
 | 
			
		||||
     appreciated but is not required.
 | 
			
		||||
  2. Altered source versions must be plainly marked as such, and must not be
 | 
			
		||||
     misrepresented as being the original software.
 | 
			
		||||
  3. This notice may not be removed or altered from any source distribution.
 | 
			
		||||
 | 
			
		||||
        ---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
        Changes
 | 
			
		||||
 | 
			
		||||
        See header of zip.h
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef _zip12_H
 | 
			
		||||
#define _zip12_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//#define HAVE_BZIP2
 | 
			
		||||
 | 
			
		||||
#ifndef _ZLIB_H
 | 
			
		||||
#include "zlib.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef _ZLIBIOAPI_H
 | 
			
		||||
#include "ioapi.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_BZIP2
 | 
			
		||||
#include "bzlib.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define Z_BZIP2ED 12
 | 
			
		||||
 | 
			
		||||
#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; } zipFile__;
 | 
			
		||||
typedef zipFile__ *zipFile;
 | 
			
		||||
#else
 | 
			
		||||
typedef voidp zipFile;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define ZIP_OK                          (0)
 | 
			
		||||
#define ZIP_EOF                         (0)
 | 
			
		||||
#define ZIP_ERRNO                       (Z_ERRNO)
 | 
			
		||||
#define ZIP_PARAMERROR                  (-102)
 | 
			
		||||
#define ZIP_BADZIPFILE                  (-103)
 | 
			
		||||
#define ZIP_INTERNALERROR               (-104)
 | 
			
		||||
 | 
			
		||||
#ifndef DEF_MEM_LEVEL
 | 
			
		||||
#  if MAX_MEM_LEVEL >= 8
 | 
			
		||||
#    define DEF_MEM_LEVEL 8
 | 
			
		||||
#  else
 | 
			
		||||
#    define DEF_MEM_LEVEL  MAX_MEM_LEVEL
 | 
			
		||||
#  endif
 | 
			
		||||
#endif
 | 
			
		||||
/* default memLevel */
 | 
			
		||||
 | 
			
		||||
/* tm_zip contain date/time info */
 | 
			
		||||
typedef struct tm_zip_s
 | 
			
		||||
{
 | 
			
		||||
    uInt tm_sec;            /* seconds after the minute - [0,59] */
 | 
			
		||||
    uInt tm_min;            /* minutes after the hour - [0,59] */
 | 
			
		||||
    uInt tm_hour;           /* hours since midnight - [0,23] */
 | 
			
		||||
    uInt tm_mday;           /* day of the month - [1,31] */
 | 
			
		||||
    uInt tm_mon;            /* months since January - [0,11] */
 | 
			
		||||
    uInt tm_year;           /* years - [1980..2044] */
 | 
			
		||||
} tm_zip;
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
    tm_zip      tmz_date;       /* date in understandable format           */
 | 
			
		||||
    uLong       dosDate;       /* if dos_date == 0, tmu_date is used      */
 | 
			
		||||
/*    uLong       flag;        */   /* general purpose bit flag        2 bytes */
 | 
			
		||||
 | 
			
		||||
    uLong       internal_fa;    /* internal file attributes        2 bytes */
 | 
			
		||||
    uLong       external_fa;    /* external file attributes        4 bytes */
 | 
			
		||||
} zip_fileinfo;
 | 
			
		||||
 | 
			
		||||
typedef const char* zipcharpc;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define APPEND_STATUS_CREATE        (0)
 | 
			
		||||
#define APPEND_STATUS_CREATEAFTER   (1)
 | 
			
		||||
#define APPEND_STATUS_ADDINZIP      (2)
 | 
			
		||||
 | 
			
		||||
extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
 | 
			
		||||
extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));
 | 
			
		||||
/*
 | 
			
		||||
  Create a zipfile.
 | 
			
		||||
     pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
 | 
			
		||||
       an Unix computer "zlib/zlib113.zip".
 | 
			
		||||
     if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
 | 
			
		||||
       will be created at the end of the file.
 | 
			
		||||
         (useful if the file contain a self extractor code)
 | 
			
		||||
     if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will
 | 
			
		||||
       add files in existing zip (be sure you don't add file that doesn't exist)
 | 
			
		||||
     If the zipfile cannot be opened, the return value is NULL.
 | 
			
		||||
     Else, the return value is a zipFile Handle, usable with other function
 | 
			
		||||
       of this zip package.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* Note : there is no delete function into a zipfile.
 | 
			
		||||
   If you want delete file into a zipfile, you must open a zipfile, and create another
 | 
			
		||||
   Of couse, you can use RAW reading and writing to copy the file you did not want delte
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
 | 
			
		||||
                                   int append,
 | 
			
		||||
                                   zipcharpc* globalcomment,
 | 
			
		||||
                                   zlib_filefunc_def* pzlib_filefunc_def));
 | 
			
		||||
 | 
			
		||||
extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
 | 
			
		||||
                                   int append,
 | 
			
		||||
                                   zipcharpc* globalcomment,
 | 
			
		||||
                                   zlib_filefunc64_def* pzlib_filefunc_def));
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
 | 
			
		||||
                       const char* filename,
 | 
			
		||||
                       const zip_fileinfo* zipfi,
 | 
			
		||||
                       const void* extrafield_local,
 | 
			
		||||
                       uInt size_extrafield_local,
 | 
			
		||||
                       const void* extrafield_global,
 | 
			
		||||
                       uInt size_extrafield_global,
 | 
			
		||||
                       const char* comment,
 | 
			
		||||
                       int method,
 | 
			
		||||
                       int level));
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
 | 
			
		||||
                       const char* filename,
 | 
			
		||||
                       const zip_fileinfo* zipfi,
 | 
			
		||||
                       const void* extrafield_local,
 | 
			
		||||
                       uInt size_extrafield_local,
 | 
			
		||||
                       const void* extrafield_global,
 | 
			
		||||
                       uInt size_extrafield_global,
 | 
			
		||||
                       const char* comment,
 | 
			
		||||
                       int method,
 | 
			
		||||
                       int level,
 | 
			
		||||
                       int zip64));
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  Open a file in the ZIP for writing.
 | 
			
		||||
  filename : the filename in zip (if NULL, '-' without quote will be used
 | 
			
		||||
  *zipfi contain supplemental information
 | 
			
		||||
  if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
 | 
			
		||||
    contains the extrafield data the the local header
 | 
			
		||||
  if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
 | 
			
		||||
    contains the extrafield data the the local header
 | 
			
		||||
  if comment != NULL, comment contain the comment string
 | 
			
		||||
  method contain the compression method (0 for store, Z_DEFLATED for deflate)
 | 
			
		||||
  level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
 | 
			
		||||
  zip64 is set to 1 if a zip64 extended information block should be added to the local file header.
 | 
			
		||||
                    this MUST be '1' if the uncompressed size is >= 0xffffffff.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
 | 
			
		||||
                                            const char* filename,
 | 
			
		||||
                                            const zip_fileinfo* zipfi,
 | 
			
		||||
                                            const void* extrafield_local,
 | 
			
		||||
                                            uInt size_extrafield_local,
 | 
			
		||||
                                            const void* extrafield_global,
 | 
			
		||||
                                            uInt size_extrafield_global,
 | 
			
		||||
                                            const char* comment,
 | 
			
		||||
                                            int method,
 | 
			
		||||
                                            int level,
 | 
			
		||||
                                            int raw));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,
 | 
			
		||||
                                            const char* filename,
 | 
			
		||||
                                            const zip_fileinfo* zipfi,
 | 
			
		||||
                                            const void* extrafield_local,
 | 
			
		||||
                                            uInt size_extrafield_local,
 | 
			
		||||
                                            const void* extrafield_global,
 | 
			
		||||
                                            uInt size_extrafield_global,
 | 
			
		||||
                                            const char* comment,
 | 
			
		||||
                                            int method,
 | 
			
		||||
                                            int level,
 | 
			
		||||
                                            int raw,
 | 
			
		||||
                                            int zip64));
 | 
			
		||||
/*
 | 
			
		||||
  Same than zipOpenNewFileInZip, except if raw=1, we write raw file
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
 | 
			
		||||
                                            const char* filename,
 | 
			
		||||
                                            const zip_fileinfo* zipfi,
 | 
			
		||||
                                            const void* extrafield_local,
 | 
			
		||||
                                            uInt size_extrafield_local,
 | 
			
		||||
                                            const void* extrafield_global,
 | 
			
		||||
                                            uInt size_extrafield_global,
 | 
			
		||||
                                            const char* comment,
 | 
			
		||||
                                            int method,
 | 
			
		||||
                                            int level,
 | 
			
		||||
                                            int raw,
 | 
			
		||||
                                            int windowBits,
 | 
			
		||||
                                            int memLevel,
 | 
			
		||||
                                            int strategy,
 | 
			
		||||
                                            const char* password,
 | 
			
		||||
                                            uLong crcForCrypting));
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
 | 
			
		||||
                                            const char* filename,
 | 
			
		||||
                                            const zip_fileinfo* zipfi,
 | 
			
		||||
                                            const void* extrafield_local,
 | 
			
		||||
                                            uInt size_extrafield_local,
 | 
			
		||||
                                            const void* extrafield_global,
 | 
			
		||||
                                            uInt size_extrafield_global,
 | 
			
		||||
                                            const char* comment,
 | 
			
		||||
                                            int method,
 | 
			
		||||
                                            int level,
 | 
			
		||||
                                            int raw,
 | 
			
		||||
                                            int windowBits,
 | 
			
		||||
                                            int memLevel,
 | 
			
		||||
                                            int strategy,
 | 
			
		||||
                                            const char* password,
 | 
			
		||||
                                            uLong crcForCrypting,
 | 
			
		||||
                                            int zip64
 | 
			
		||||
                                            ));
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  Same than zipOpenNewFileInZip2, except
 | 
			
		||||
    windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
 | 
			
		||||
    password : crypting password (NULL for no crypting)
 | 
			
		||||
    crcForCrypting : crc of file to compress (needed for crypting)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
 | 
			
		||||
                                            const char* filename,
 | 
			
		||||
                                            const zip_fileinfo* zipfi,
 | 
			
		||||
                                            const void* extrafield_local,
 | 
			
		||||
                                            uInt size_extrafield_local,
 | 
			
		||||
                                            const void* extrafield_global,
 | 
			
		||||
                                            uInt size_extrafield_global,
 | 
			
		||||
                                            const char* comment,
 | 
			
		||||
                                            int method,
 | 
			
		||||
                                            int level,
 | 
			
		||||
                                            int raw,
 | 
			
		||||
                                            int windowBits,
 | 
			
		||||
                                            int memLevel,
 | 
			
		||||
                                            int strategy,
 | 
			
		||||
                                            const char* password,
 | 
			
		||||
                                            uLong crcForCrypting,
 | 
			
		||||
                                            uLong versionMadeBy,
 | 
			
		||||
                                            uLong flagBase
 | 
			
		||||
                                            ));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
 | 
			
		||||
                                            const char* filename,
 | 
			
		||||
                                            const zip_fileinfo* zipfi,
 | 
			
		||||
                                            const void* extrafield_local,
 | 
			
		||||
                                            uInt size_extrafield_local,
 | 
			
		||||
                                            const void* extrafield_global,
 | 
			
		||||
                                            uInt size_extrafield_global,
 | 
			
		||||
                                            const char* comment,
 | 
			
		||||
                                            int method,
 | 
			
		||||
                                            int level,
 | 
			
		||||
                                            int raw,
 | 
			
		||||
                                            int windowBits,
 | 
			
		||||
                                            int memLevel,
 | 
			
		||||
                                            int strategy,
 | 
			
		||||
                                            const char* password,
 | 
			
		||||
                                            uLong crcForCrypting,
 | 
			
		||||
                                            uLong versionMadeBy,
 | 
			
		||||
                                            uLong flagBase,
 | 
			
		||||
                                            int zip64
 | 
			
		||||
                                            ));
 | 
			
		||||
/*
 | 
			
		||||
  Same than zipOpenNewFileInZip4, except
 | 
			
		||||
    versionMadeBy : value for Version made by field
 | 
			
		||||
    flag : value for flag field (compression level info will be added)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
 | 
			
		||||
                       const void* buf,
 | 
			
		||||
                       unsigned len));
 | 
			
		||||
/*
 | 
			
		||||
  Write data in the zipfile
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
 | 
			
		||||
/*
 | 
			
		||||
  Close the current file in the zipfile
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
 | 
			
		||||
                                            uLong uncompressed_size,
 | 
			
		||||
                                            uLong crc32));
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
 | 
			
		||||
                                            ZPOS64_T uncompressed_size,
 | 
			
		||||
                                            uLong crc32));
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  Close the current file in the zipfile, for file opened with
 | 
			
		||||
    parameter raw=1 in zipOpenNewFileInZip2
 | 
			
		||||
  uncompressed_size and crc32 are value for the uncompressed size
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipClose OF((zipFile file,
 | 
			
		||||
                const char* global_comment));
 | 
			
		||||
/*
 | 
			
		||||
  Close the zipfile
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));
 | 
			
		||||
/*
 | 
			
		||||
  zipRemoveExtraInfoBlock -  Added by Mathias Svensson
 | 
			
		||||
 | 
			
		||||
  Remove extra information block from a extra information data for the local file header or central directory header
 | 
			
		||||
 | 
			
		||||
  It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.
 | 
			
		||||
 | 
			
		||||
  0x0001 is the signature header for the ZIP64 extra information blocks
 | 
			
		||||
 | 
			
		||||
  usage.
 | 
			
		||||
                        Remove ZIP64 Extra information from a central director extra field data
 | 
			
		||||
              zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001);
 | 
			
		||||
 | 
			
		||||
                        Remove ZIP64 Extra information from a Local File Header extra field data
 | 
			
		||||
        zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001);
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* _zip64_H */
 | 
			
		||||
		Reference in New Issue
	
	Block a user