| Index: third_party/zlib/contrib/minizip/minizip.c
|
| ===================================================================
|
| --- third_party/zlib/contrib/minizip/minizip.c (revision 113739)
|
| +++ third_party/zlib/contrib/minizip/minizip.c (working copy)
|
| @@ -1,10 +1,33 @@
|
| /*
|
| minizip.c
|
| - Version 1.01e, February 12th, 2005
|
| + Version 1.1, February 14h, 2010
|
| + sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
|
|
|
| - Copyright (C) 1998-2005 Gilles Vollant
|
| + 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>
|
| @@ -24,9 +47,9 @@
|
|
|
| #include "zip.h"
|
|
|
| -#ifdef WIN32
|
| -#define USEWIN32IOAPI
|
| -#include "iowin32.h"
|
| +#ifdef _WIN32
|
| + #define USEWIN32IOAPI
|
| + #include "iowin32.h"
|
| #endif
|
|
|
|
|
| @@ -34,7 +57,7 @@
|
| #define WRITEBUFFERSIZE (16384)
|
| #define MAXFILENAME (256)
|
|
|
| -#ifdef WIN32
|
| +#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 */
|
| @@ -44,9 +67,9 @@
|
| {
|
| FILETIME ftLocal;
|
| HANDLE hFind;
|
| - WIN32_FIND_DATA ff32;
|
| + WIN32_FIND_DATAA ff32;
|
|
|
| - hFind = FindFirstFile(f,&ff32);
|
| + hFind = FindFirstFileA(f,&ff32);
|
| if (hFind != INVALID_HANDLE_VALUE)
|
| {
|
| FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal);
|
| @@ -119,7 +142,7 @@
|
| {
|
| FILE* ftestexist;
|
| int ret = 1;
|
| - ftestexist = fopen(filename,"rb");
|
| + ftestexist = fopen64(filename,"rb");
|
| if (ftestexist==NULL)
|
| ret = 0;
|
| else
|
| @@ -129,18 +152,19 @@
|
|
|
| void do_banner()
|
| {
|
| - printf("MiniZip 1.01b, demo of zLib + Zip package written by Gilles Vollant\n");
|
| - printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
|
| + 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] file.zip [files_to_add]\n\n" \
|
| + 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");
|
| + " -9 Compress better\n\n" \
|
| + " -j exclude path. store only the file name.\n\n");
|
| }
|
|
|
| /* calculate the CRC32 of a file,
|
| @@ -149,7 +173,7 @@
|
| {
|
| unsigned long calculate_crc=0;
|
| int err=ZIP_OK;
|
| - FILE * fin = fopen(filenameinzip,"rb");
|
| + FILE * fin = fopen64(filenameinzip,"rb");
|
| unsigned long size_read = 0;
|
| unsigned long total_read = 0;
|
| if (fin==NULL)
|
| @@ -179,10 +203,33 @@
|
| fclose(fin);
|
|
|
| *result_crc=calculate_crc;
|
| - printf("file %s crc %x\n",filenameinzip,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[];
|
| @@ -190,6 +237,7 @@
|
| 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;
|
| @@ -222,6 +270,8 @@
|
| 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))
|
| {
|
| @@ -231,8 +281,12 @@
|
| }
|
| }
|
| else
|
| + {
|
| if (zipfilenamearg == 0)
|
| + {
|
| zipfilenamearg = i ;
|
| + }
|
| + }
|
| }
|
| }
|
|
|
| @@ -245,7 +299,9 @@
|
| }
|
|
|
| if (zipfilenamearg==0)
|
| + {
|
| zipok=0;
|
| + }
|
| else
|
| {
|
| int i,len;
|
| @@ -302,11 +358,11 @@
|
| zipFile zf;
|
| int errclose;
|
| # ifdef USEWIN32IOAPI
|
| - zlib_filefunc_def ffunc;
|
| - fill_win32_filefunc(&ffunc);
|
| - zf = zipOpen2(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc);
|
| + zlib_filefunc64_def ffunc;
|
| + fill_win32_filefunc64A(&ffunc);
|
| + zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc);
|
| # else
|
| - zf = zipOpen(filename_try,(opt_overwrite==2) ? 2 : 0);
|
| + zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0);
|
| # endif
|
|
|
| if (zf == NULL)
|
| @@ -329,8 +385,10 @@
|
| 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;
|
| @@ -348,19 +406,48 @@
|
| if ((password != NULL) && (err==ZIP_OK))
|
| err = getFileCrc(filenameinzip,buf,size_buf,&crcFile);
|
|
|
| - err = zipOpenNewFileInZip3(zf,filenameinzip,&zi,
|
| + 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);
|
| + password,crcFile, zip64);
|
|
|
| if (err != ZIP_OK)
|
| printf("error in opening %s in zipfile\n",filenameinzip);
|
| else
|
| {
|
| - fin = fopen(filenameinzip,"rb");
|
| + fin = fopen64(filenameinzip,"rb");
|
| if (fin==NULL)
|
| {
|
| err=ZIP_ERRNO;
|
|
|