| Index: third_party/zlib/contrib/minizip/miniunz.c
|
| ===================================================================
|
| --- third_party/zlib/contrib/minizip/miniunz.c (revision 113739)
|
| +++ third_party/zlib/contrib/minizip/miniunz.c (working copy)
|
| @@ -1,10 +1,31 @@
|
| /*
|
| miniunz.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>
|
| @@ -27,7 +48,7 @@
|
| #define WRITEBUFFERSIZE (8192)
|
| #define MAXFILENAME (256)
|
|
|
| -#ifdef WIN32
|
| +#ifdef _WIN32
|
| #define USEWIN32IOAPI
|
| #include "iowin32.h"
|
| #endif
|
| @@ -51,11 +72,11 @@
|
| uLong dosdate;
|
| tm_unz tmu_date;
|
| {
|
| -#ifdef WIN32
|
| +#ifdef _WIN32
|
| HANDLE hFile;
|
| FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite;
|
|
|
| - hFile = CreateFile(filename,GENERIC_READ | GENERIC_WRITE,
|
| + 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);
|
| @@ -91,8 +112,8 @@
|
| const char* dirname;
|
| {
|
| int ret=0;
|
| -#ifdef WIN32
|
| - ret = mkdir(dirname);
|
| +#ifdef _WIN32
|
| + ret = _mkdir(dirname);
|
| #else
|
| #ifdef unix
|
| ret = mkdir (dirname,0775);
|
| @@ -112,6 +133,11 @@
|
| 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] == '/') {
|
| @@ -164,34 +190,61 @@
|
| " -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_info gi;
|
| + unz_global_info64 gi;
|
| int err;
|
|
|
| - err = unzGetGlobalInfo (uf,&gi);
|
| + 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");
|
| + 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_info file_info;
|
| + unz_file_info64 file_info;
|
| uLong ratio=0;
|
| const char *string_method;
|
| char charCrypt=' ';
|
| - err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,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);
|
| break;
|
| }
|
| if (file_info.uncompressed_size>0)
|
| - ratio = (file_info.compressed_size*100)/file_info.uncompressed_size;
|
| + ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size);
|
|
|
| /* display a '*' if the file is crypted */
|
| if ((file_info.flag & 1) != 0)
|
| @@ -211,12 +264,17 @@
|
| string_method="Defl:F"; /* 2:fast , 3 : extra fast*/
|
| }
|
| else
|
| + if (file_info.compression_method==Z_BZIP2ED)
|
| + {
|
| + string_method="BZip2 ";
|
| + }
|
| + else
|
| string_method="Unkn. ";
|
|
|
| - printf("%7lu %6s%c%7lu %3lu%% %2.2lu-%2.2lu-%2.2lu %2.2lu:%2.2lu %8.8lx %s\n",
|
| - file_info.uncompressed_size,string_method,
|
| - charCrypt,
|
| - file_info.compressed_size,
|
| + 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,
|
| @@ -252,9 +310,9 @@
|
| void* buf;
|
| uInt size_buf;
|
|
|
| - unz_file_info file_info;
|
| + unz_file_info64 file_info;
|
| uLong ratio=0;
|
| - err = unzGetCurrentFileInfo(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
|
| + err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
|
|
|
| if (err!=UNZ_OK)
|
| {
|
| @@ -306,7 +364,7 @@
|
| {
|
| char rep=0;
|
| FILE* ftestexist;
|
| - ftestexist = fopen(write_filename,"rb");
|
| + ftestexist = fopen64(write_filename,"rb");
|
| if (ftestexist!=NULL)
|
| {
|
| fclose(ftestexist);
|
| @@ -317,7 +375,7 @@
|
|
|
| printf("The file %s exists. Overwrite ? [y]es, [n]o, [A]ll: ",write_filename);
|
| ret = scanf("%1s",answer);
|
| - if (ret != 1)
|
| + if (ret != 1)
|
| {
|
| exit(EXIT_FAILURE);
|
| }
|
| @@ -337,7 +395,7 @@
|
|
|
| if ((skip==0) && (err==UNZ_OK))
|
| {
|
| - fout=fopen(write_filename,"wb");
|
| + fout=fopen64(write_filename,"wb");
|
|
|
| /* some zipfile don't contain directory alone before file */
|
| if ((fout==NULL) && ((*popt_extract_without_path)==0) &&
|
| @@ -347,7 +405,7 @@
|
| *(filename_withoutpath-1)='\0';
|
| makedir(write_filename);
|
| *(filename_withoutpath-1)=c;
|
| - fout=fopen(write_filename,"wb");
|
| + fout=fopen64(write_filename,"wb");
|
| }
|
|
|
| if (fout==NULL)
|
| @@ -409,11 +467,11 @@
|
| const char* password;
|
| {
|
| uLong i;
|
| - unz_global_info gi;
|
| + unz_global_info64 gi;
|
| int err;
|
| FILE* fout=NULL;
|
|
|
| - err = unzGetGlobalInfo (uf,&gi);
|
| + err = unzGetGlobalInfo64(uf,&gi);
|
| if (err!=UNZ_OK)
|
| printf("error %d with zipfile in unzGetGlobalInfo \n",err);
|
|
|
| @@ -470,6 +528,7 @@
|
| 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;
|
| @@ -532,7 +591,7 @@
|
| {
|
|
|
| # ifdef USEWIN32IOAPI
|
| - zlib_filefunc_def ffunc;
|
| + zlib_filefunc64_def ffunc;
|
| # endif
|
|
|
| strncpy(filename_try, zipfilename,MAXFILENAME-1);
|
| @@ -540,18 +599,18 @@
|
| filename_try[ MAXFILENAME ] = '\0';
|
|
|
| # ifdef USEWIN32IOAPI
|
| - fill_win32_filefunc(&ffunc);
|
| - uf = unzOpen2(zipfilename,&ffunc);
|
| + fill_win32_filefunc64A(&ffunc);
|
| + uf = unzOpen2_64(zipfilename,&ffunc);
|
| # else
|
| - uf = unzOpen(zipfilename);
|
| + uf = unzOpen64(zipfilename);
|
| # endif
|
| if (uf==NULL)
|
| {
|
| strcat(filename_try,".zip");
|
| # ifdef USEWIN32IOAPI
|
| - uf = unzOpen2(filename_try,&ffunc);
|
| + uf = unzOpen2_64(filename_try,&ffunc);
|
| # else
|
| - uf = unzOpen(filename_try);
|
| + uf = unzOpen64(filename_try);
|
| # endif
|
| }
|
| }
|
| @@ -564,22 +623,26 @@
|
| printf("%s opened\n",filename_try);
|
|
|
| if (opt_do_list==1)
|
| - return do_list(uf);
|
| + ret_value = do_list(uf);
|
| else if (opt_do_extract==1)
|
| {
|
| - if (opt_extractdir && chdir(dirname))
|
| +#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)
|
| - return do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,password);
|
| + ret_value = do_extract(uf, opt_do_extract_withoutpath, opt_overwrite, password);
|
| else
|
| - return do_extract_onefile(uf,filename_to_extract,
|
| - opt_do_extract_withoutpath,opt_overwrite,password);
|
| + ret_value = do_extract_onefile(uf, filename_to_extract, opt_do_extract_withoutpath, opt_overwrite, password);
|
| }
|
| - unzCloseCurrentFile(uf);
|
|
|
| - return 0;
|
| + unzClose(uf);
|
| +
|
| + return ret_value;
|
| }
|
|
|