15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) minizip.c 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Version 1.1, February 14h, 2010 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Modifications of Unzip for Zip64 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Copyright (C) 2007-2008 Even Rouault 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Modifications for Zip64 support on both zip and unzip 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef _WIN32 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifndef __USE_FILE_OFFSET64 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define __USE_FILE_OFFSET64 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifndef __USE_LARGEFILE64 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define __USE_LARGEFILE64 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifndef _LARGEFILE64_SOURCE 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define _LARGEFILE64_SOURCE 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #ifndef _FILE_OFFSET_BIT 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define _FILE_OFFSET_BIT 64 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #endif 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h> 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h> 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h> 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <time.h> 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <errno.h> 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <fcntl.h> 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef unix 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <unistd.h> 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <utime.h> 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <sys/types.h> 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <sys/stat.h> 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <direct.h> 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <io.h> 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "zip.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _WIN32 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #define USEWIN32IOAPI 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) #include "iowin32.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WRITEBUFFERSIZE (16384) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAXFILENAME (256) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _WIN32 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uLong filetime(f, tmzip, dt) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *f; /* name of file to get info on */ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tm_zip *tmzip; /* return value: access, modific. and creation times */ 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uLong *dt; /* dostime */ 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret = 0; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILETIME ftLocal; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HANDLE hFind; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WIN32_FIND_DATAA ff32; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hFind = FindFirstFileA(f,&ff32); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hFind != INVALID_HANDLE_VALUE) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileTimeToDosDateTime(&ftLocal,((LPWORD)dt)+1,((LPWORD)dt)+0); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindClose(hFind); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = 1; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ret; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef unix 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uLong filetime(f, tmzip, dt) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *f; /* name of file to get info on */ 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tm_zip *tmzip; /* return value: access, modific. and creation times */ 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uLong *dt; /* dostime */ 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret=0; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct stat s; /* results of stat() */ 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct tm* filedate; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) time_t tm_t=0; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (strcmp(f,"-")!=0) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char name[MAXFILENAME+1]; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int len = strlen(f); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (len > MAXFILENAME) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len = MAXFILENAME; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strncpy(name, f,MAXFILENAME-1); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* strncpy doesnt append the trailing NULL, of the string is too long. */ 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name[ MAXFILENAME ] = '\0'; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name[len - 1] == '/') 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name[len - 1] = '\0'; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* not all systems allow stat'ing a file with / appended */ 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (stat(name,&s)==0) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tm_t = s.st_mtime; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = 1; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filedate = localtime(&tm_t); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmzip->tm_sec = filedate->tm_sec; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmzip->tm_min = filedate->tm_min; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmzip->tm_hour = filedate->tm_hour; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmzip->tm_mday = filedate->tm_mday; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmzip->tm_mon = filedate->tm_mon ; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmzip->tm_year = filedate->tm_year; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ret; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uLong filetime(f, tmzip, dt) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *f; /* name of file to get info on */ 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tm_zip *tmzip; /* return value: access, modific. and creation times */ 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uLong *dt; /* dostime */ 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int check_exist_file(filename) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* filename; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE* ftestexist; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret = 1; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ftestexist = fopen64(filename,"rb"); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ftestexist==NULL) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = 0; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(ftestexist); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ret; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void do_banner() 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n"); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n"); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void do_help() 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \ 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " -o Overwrite existing file.zip\n" \ 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " -a Append to existing file.zip\n" \ 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " -0 Store only\n" \ 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " -1 Compress faster\n" \ 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " -9 Compress better\n\n" \ 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " -j exclude path. store only the file name.\n\n"); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* calculate the CRC32 of a file, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) because to encrypt a file, we need known the CRC32 of the file before */ 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned long calculate_crc=0; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int err=ZIP_OK; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE * fin = fopen64(filenameinzip,"rb"); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned long size_read = 0; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned long total_read = 0; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (fin==NULL) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = ZIP_ERRNO; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (err == ZIP_OK) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = ZIP_OK; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_read = (int)fread(buf,1,size_buf,fin); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size_read < size_buf) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (feof(fin)==0) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("error in reading %s\n",filenameinzip); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = ZIP_ERRNO; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size_read>0) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) calculate_crc = crc32(calculate_crc,buf,size_read); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) total_read += size_read; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } while ((err == ZIP_OK) && (size_read>0)); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (fin) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(fin); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *result_crc=calculate_crc; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("file %s crc %lx\n", filenameinzip, calculate_crc); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return err; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int isLargeFile(const char* filename) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int largeFile = 0; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ZPOS64_T pos = 0; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE* pFile = fopen64(filename, "rb"); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(pFile != NULL) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int n = fseeko64(pFile, 0, SEEK_END); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pos = ftello64(pFile); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("File : %s is %lld bytes\n", filename, pos); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(pos >= 0xffffffff) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) largeFile = 1; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(pFile); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return largeFile; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main(argc,argv) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int argc; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *argv[]; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int opt_overwrite=0; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int opt_compress_level=Z_DEFAULT_COMPRESSION; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int opt_exclude_path=0; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int zipfilenamearg = 0; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char filename_try[MAXFILENAME+16]; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int zipok; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int err=0; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size_buf=0; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* buf=NULL; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* password=NULL; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do_banner(); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (argc==1) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do_help(); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i=1;i<argc;i++) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*argv[i])=='-') 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *p=argv[i]+1; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((*p)!='\0') 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char c=*(p++);; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((c=='o') || (c=='O')) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt_overwrite = 1; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((c=='a') || (c=='A')) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt_overwrite = 2; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((c>='0') && (c<='9')) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt_compress_level = c-'0'; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((c=='j') || (c=='J')) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt_exclude_path = 1; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (((c=='p') || (c=='P')) && (i+1<argc)) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) password=argv[i+1]; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i++; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (zipfilenamearg == 0) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zipfilenamearg = i ; 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_buf = WRITEBUFFERSIZE; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buf = (void*)malloc(size_buf); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (buf==NULL) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("Error allocating memory\n"); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ZIP_INTERNALERROR; 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (zipfilenamearg==0) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zipok=0; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int i,len; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int dot_found=0; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zipok = 1 ; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* strncpy doesnt append the trailing NULL, of the string is too long. */ 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filename_try[ MAXFILENAME ] = '\0'; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) len=(int)strlen(filename_try); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i=0;i<len;i++) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filename_try[i]=='.') 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dot_found=1; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dot_found==0) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strcat(filename_try,".zip"); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (opt_overwrite==2) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* if the file don't exist, we not append file */ 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (check_exist_file(filename_try)==0) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt_overwrite=1; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (opt_overwrite==0) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (check_exist_file(filename_try)!=0) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char rep=0; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char answer[128]; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int ret; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("The file %s exists. Overwrite ? [y]es, [n]o, [a]ppend : ",filename_try); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = scanf("%1s",answer); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ret != 1) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit(EXIT_FAILURE); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rep = answer[0] ; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((rep>='a') && (rep<='z')) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rep -= 0x20; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while ((rep!='Y') && (rep!='N') && (rep!='A')); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rep=='N') 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zipok = 0; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rep=='A') 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt_overwrite = 2; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (zipok==1) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zipFile zf; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int errclose; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# ifdef USEWIN32IOAPI 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zlib_filefunc64_def ffunc; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fill_win32_filefunc64A(&ffunc); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# else 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# endif 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (zf == NULL) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("error opening %s\n",filename_try); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err= ZIP_ERRNO; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("creating %s\n",filename_try); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i=zipfilenamearg+1;(i<argc) && (err==ZIP_OK);i++) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!((((*(argv[i]))=='-') || ((*(argv[i]))=='/')) && 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((argv[i][1]=='o') || (argv[i][1]=='O') || 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (argv[i][1]=='a') || (argv[i][1]=='A') || 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (argv[i][1]=='p') || (argv[i][1]=='P') || 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((argv[i][1]>='0') || (argv[i][1]<='9'))) && 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (strlen(argv[i]) == 2))) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE * fin; 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size_read; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* filenameinzip = argv[i]; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *savefilenameinzip; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zip_fileinfo zi; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned long crcFile=0; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int zip64 = 0; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour = 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zi.dosDate = 0; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zi.internal_fa = 0; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zi.external_fa = 0; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filetime(filenameinzip,&zi.tmz_date,&zi.dosDate); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = zipOpenNewFileInZip(zf,filenameinzip,&zi, 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL,0,NULL,0,NULL / * comment * /, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (opt_compress_level != 0) ? Z_DEFLATED : 0, 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt_compress_level); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((password != NULL) && (err==ZIP_OK)) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = getFileCrc(filenameinzip,buf,size_buf,&crcFile); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zip64 = isLargeFile(filenameinzip); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* The path name saved, should not include a leading slash. */ 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /*if it did, windows/xp and dynazip couldn't read the zip file. */ 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) savefilenameinzip = filenameinzip; 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while( savefilenameinzip[0] == '\\' || savefilenameinzip[0] == '/' ) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) savefilenameinzip++; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /*should the zip file contain any path at all?*/ 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if( opt_exclude_path ) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *tmpptr; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *lastslash = 0; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if( *tmpptr == '\\' || *tmpptr == '/') 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lastslash = tmpptr; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if( lastslash != NULL ) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) savefilenameinzip = lastslash+1; // base filename follows last slash. 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /**/ 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = zipOpenNewFileInZip3_64(zf,savefilenameinzip,&zi, 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL,0,NULL,0,NULL /* comment*/, 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (opt_compress_level != 0) ? Z_DEFLATED : 0, 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opt_compress_level,0, 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */ 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) password,crcFile, zip64); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (err != ZIP_OK) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("error in opening %s in zipfile\n",filenameinzip); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fin = fopen64(filenameinzip,"rb"); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (fin==NULL) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err=ZIP_ERRNO; 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("error in opening %s for reading\n",filenameinzip); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (err == ZIP_OK) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = ZIP_OK; 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_read = (int)fread(buf,1,size_buf,fin); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size_read < size_buf) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (feof(fin)==0) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("error in reading %s\n",filenameinzip); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = ZIP_ERRNO; 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size_read>0) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = zipWriteInFileInZip (zf,buf,size_read); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (err<0) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("error in writing %s in the zipfile\n", 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filenameinzip); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } while ((err == ZIP_OK) && (size_read>0)); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (fin) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fclose(fin); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (err<0) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err=ZIP_ERRNO; 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) err = zipCloseFileInZip(zf); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (err!=ZIP_OK) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("error in closing %s in the zipfile\n", 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filenameinzip); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errclose = zipClose(zf,NULL); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (errclose != ZIP_OK) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printf("error in closing %s\n",filename_try); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do_help(); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) free(buf); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 508