tesseract  4.00.00dev
minizip.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <errno.h>
#include <fcntl.h>
#include <direct.h>
#include <io.h>
#include "zip.h"

Go to the source code of this file.

Macros

#define WRITEBUFFERSIZE   (16384)
 
#define MAXFILENAME   (256)
 

Functions

uLong filetime (char *f, tm_zip *tmzip, uLong *dt)
 
int check_exist_file (char *filename) const
 
void do_banner ()
 
void do_help ()
 
int getFileCrc (const char *filenameinzip, void *buf, unsigned long size_buf, unsigned long *result_crc)
 
int main (int argc, argv)
 

Macro Definition Documentation

◆ MAXFILENAME

#define MAXFILENAME   (256)

Definition at line 35 of file minizip.c.

◆ WRITEBUFFERSIZE

#define WRITEBUFFERSIZE   (16384)

Definition at line 34 of file minizip.c.

Function Documentation

◆ check_exist_file()

int check_exist_file ( char*  filename) const

Definition at line 117 of file minizip.c.

119 {
120  FILE* ftestexist;
121  int ret = 1;
122  ftestexist = fopen(filename,"rb");
123  if (ftestexist==NULL)
124  ret = 0;
125  else
126  fclose(ftestexist);
127  return ret;
128 }
const char * filename
Definition: ioapi.h:38

◆ do_banner()

void do_banner ( )

Definition at line 130 of file minizip.c.

131 {
132  printf("MiniZip 1.01b, demo of zLib + Zip package written by Gilles Vollant\n");
133  printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
134 }

◆ do_help()

void do_help ( )

Definition at line 136 of file minizip.c.

137 {
138  printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] file.zip [files_to_add]\n\n" \
139  " -o Overwrite existing file.zip\n" \
140  " -a Append to existing file.zip\n" \
141  " -0 Store only\n" \
142  " -1 Compress faster\n" \
143  " -9 Compress better\n\n");
144 }

◆ filetime()

uLong filetime ( char *  f,
tm_zip tmzip,
uLong dt 
)

Definition at line 104 of file minizip.c.

108 {
109  return 0;
110 }

◆ getFileCrc()

int getFileCrc ( const char *  filenameinzip,
void *  buf,
unsigned long  size_buf,
unsigned long result_crc 
)

Definition at line 148 of file minizip.c.

149 {
150  unsigned long calculate_crc=0;
151  int err=ZIP_OK;
152  FILE * fin = fopen(filenameinzip,"rb");
153  unsigned long size_read = 0;
154  unsigned long total_read = 0;
155  if (fin==NULL)
156  {
157  err = ZIP_ERRNO;
158  }
159 
160  if (err == ZIP_OK)
161  do
162  {
163  err = ZIP_OK;
164  size_read = (int)fread(buf,1,size_buf,fin);
165  if (size_read < size_buf)
166  if (feof(fin)==0)
167  {
168  printf("error in reading %s\n",filenameinzip);
169  err = ZIP_ERRNO;
170  }
171 
172  if (size_read>0)
173  calculate_crc = crc32(calculate_crc,buf,size_read);
174  total_read += size_read;
175 
176  } while ((err == ZIP_OK) && (size_read>0));
177 
178  if (fin)
179  fclose(fin);
180 
181  *result_crc=calculate_crc;
182  printf("file %s crc %x\n",filenameinzip,calculate_crc);
183  return err;
184 }
#define ZIP_ERRNO
Definition: zip.h:72
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
voidpf void * buf
Definition: ioapi.h:39
#define ZIP_OK
Definition: zip.h:70

◆ main()

int main ( int  argc,
argv   
)

Definition at line 186 of file minizip.c.

189 {
190  int i;
191  int opt_overwrite=0;
192  int opt_compress_level=Z_DEFAULT_COMPRESSION;
193  int zipfilenamearg = 0;
194  char filename_try[MAXFILENAME+16];
195  int zipok;
196  int err=0;
197  int size_buf=0;
198  void* buf=NULL;
199  const char* password=NULL;
200 
201 
202  do_banner();
203  if (argc==1)
204  {
205  do_help();
206  return 0;
207  }
208  else
209  {
210  for (i=1;i<argc;i++)
211  {
212  if ((*argv[i])=='-')
213  {
214  const char *p=argv[i]+1;
215 
216  while ((*p)!='\0')
217  {
218  char c=*(p++);;
219  if ((c=='o') || (c=='O'))
220  opt_overwrite = 1;
221  if ((c=='a') || (c=='A'))
222  opt_overwrite = 2;
223  if ((c>='0') && (c<='9'))
224  opt_compress_level = c-'0';
225 
226  if (((c=='p') || (c=='P')) && (i+1<argc))
227  {
228  password=argv[i+1];
229  i++;
230  }
231  }
232  }
233  else
234  if (zipfilenamearg == 0)
235  zipfilenamearg = i ;
236  }
237  }
238 
239  size_buf = WRITEBUFFERSIZE;
240  buf = (void*)malloc(size_buf);
241  if (buf==NULL)
242  {
243  printf("Error allocating memory\n");
244  return ZIP_INTERNALERROR;
245  }
246 
247  if (zipfilenamearg==0)
248  zipok=0;
249  else
250  {
251  int i,len;
252  int dot_found=0;
253 
254  zipok = 1 ;
255  strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1);
256  /* strncpy doesnt append the trailing NULL, of the string is too long. */
257  filename_try[ MAXFILENAME ] = '\0';
258 
259  len=(int)strlen(filename_try);
260  for (i=0;i<len;i++)
261  if (filename_try[i]=='.')
262  dot_found=1;
263 
264  if (dot_found==0)
265  strcat(filename_try,".zip");
266 
267  if (opt_overwrite==2)
268  {
269  /* if the file don't exist, we not append file */
270  if (check_exist_file(filename_try)==0)
271  opt_overwrite=1;
272  }
273  else
274  if (opt_overwrite==0)
275  if (check_exist_file(filename_try)!=0)
276  {
277  char rep=0;
278  do
279  {
280  char answer[128];
281  int ret;
282  printf("The file %s exists. Overwrite ? [y]es, [n]o, [a]ppend : ",filename_try);
283  ret = scanf("%1s",answer);
284  if (ret != 1)
285  {
286  exit(EXIT_FAILURE);
287  }
288  rep = answer[0] ;
289  if ((rep>='a') && (rep<='z'))
290  rep -= 0x20;
291  }
292  while ((rep!='Y') && (rep!='N') && (rep!='A'));
293  if (rep=='N')
294  zipok = 0;
295  if (rep=='A')
296  opt_overwrite = 2;
297  }
298  }
299 
300  if (zipok==1)
301  {
302  zipFile zf;
303  int errclose;
304 # ifdef USEWIN32IOAPI
305  zlib_filefunc_def ffunc;
306  fill_win32_filefunc(&ffunc);
307  zf = zipOpen2(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc);
308 # else
309  zf = zipOpen(filename_try,(opt_overwrite==2) ? 2 : 0);
310 # endif
311 
312  if (zf == NULL)
313  {
314  printf("error opening %s\n",filename_try);
315  err= ZIP_ERRNO;
316  }
317  else
318  printf("creating %s\n",filename_try);
319 
320  for (i=zipfilenamearg+1;(i<argc) && (err==ZIP_OK);i++)
321  {
322  if (!((((*(argv[i]))=='-') || ((*(argv[i]))=='/')) &&
323  ((argv[i][1]=='o') || (argv[i][1]=='O') ||
324  (argv[i][1]=='a') || (argv[i][1]=='A') ||
325  (argv[i][1]=='p') || (argv[i][1]=='P') ||
326  ((argv[i][1]>='0') || (argv[i][1]<='9'))) &&
327  (strlen(argv[i]) == 2)))
328  {
329  FILE * fin;
330  int size_read;
331  const char* filenameinzip = argv[i];
332  zip_fileinfo zi;
333  unsigned long crcFile=0;
334 
336  zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0;
337  zi.dosDate = 0;
338  zi.internal_fa = 0;
339  zi.external_fa = 0;
340  filetime(filenameinzip,&zi.tmz_date,&zi.dosDate);
341 
342 /*
343  err = zipOpenNewFileInZip(zf,filenameinzip,&zi,
344  NULL,0,NULL,0,NULL / * comment * /,
345  (opt_compress_level != 0) ? Z_DEFLATED : 0,
346  opt_compress_level);
347 */
348  if ((password != NULL) && (err==ZIP_OK))
349  err = getFileCrc(filenameinzip,buf,size_buf,&crcFile);
350 
351  err = zipOpenNewFileInZip3(zf,filenameinzip,&zi,
352  NULL,0,NULL,0,NULL /* comment*/,
353  (opt_compress_level != 0) ? Z_DEFLATED : 0,
354  opt_compress_level,0,
355  /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */
356  -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
357  password,crcFile);
358 
359  if (err != ZIP_OK)
360  printf("error in opening %s in zipfile\n",filenameinzip);
361  else
362  {
363  fin = fopen(filenameinzip,"rb");
364  if (fin==NULL)
365  {
366  err=ZIP_ERRNO;
367  printf("error in opening %s for reading\n",filenameinzip);
368  }
369  }
370 
371  if (err == ZIP_OK)
372  do
373  {
374  err = ZIP_OK;
375  size_read = (int)fread(buf,1,size_buf,fin);
376  if (size_read < size_buf)
377  if (feof(fin)==0)
378  {
379  printf("error in reading %s\n",filenameinzip);
380  err = ZIP_ERRNO;
381  }
382 
383  if (size_read>0)
384  {
385  err = zipWriteInFileInZip (zf,buf,size_read);
386  if (err<0)
387  {
388  printf("error in writing %s in the zipfile\n",
389  filenameinzip);
390  }
391 
392  }
393  } while ((err == ZIP_OK) && (size_read>0));
394 
395  if (fin)
396  fclose(fin);
397 
398  if (err<0)
399  err=ZIP_ERRNO;
400  else
401  {
402  err = zipCloseFileInZip(zf);
403  if (err!=ZIP_OK)
404  printf("error in closing %s in the zipfile\n",
405  filenameinzip);
406  }
407  }
408  }
409  errclose = zipClose(zf,NULL);
410  if (errclose != ZIP_OK)
411  printf("error in closing %s\n",filename_try);
412  }
413  else
414  {
415  do_help();
416  }
417 
418  free(buf);
419  return 0;
420 }
uInt tm_min
Definition: zip.h:90
#define ZIP_ERRNO
Definition: zip.h:72
void fill_win32_filefunc(zlib_filefunc_def *pzlib_filefunc_def)
Definition: iowin32.c:259
uLong internal_fa
Definition: zip.h:103
int getFileCrc(const char *filenameinzip, void *buf, unsigned long size_buf, unsigned long *result_crc)
Definition: minizip.c:148
uLong dosDate
Definition: zip.h:100
zipFile ZEXPORT zipOpen(char *pathname, int append) const
Definition: zip.c:683
int ZEXPORT zipWriteInFileInZip(zipFile file, const void *buf, unsigned len)
Definition: zip.c:966
#define ZIP_INTERNALERROR
Definition: zip.h:75
void do_help()
Definition: minizip.c:136
uInt tm_mday
Definition: zip.h:92
uInt tm_mon
Definition: zip.h:93
int check_exist_file(char *filename) const
Definition: minizip.c:117
uLong filetime(char *f, tm_zip *tmzip, uLong *dt)
Definition: minizip.c:104
uInt tm_year
Definition: zip.h:94
int ZEXPORT zipCloseFileInZip(zipFile file)
Definition: zip.c:1127
zipFile ZEXPORT zipOpen2(char *pathname, int append, zipcharpc *globalcomment, zlib_filefunc_def *pzlib_filefunc_def) const
Definition: zip.c:499
#define MAXFILENAME
Definition: minizip.c:35
uLong external_fa
Definition: zip.h:104
uInt tm_hour
Definition: zip.h:91
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
#define DEF_MEM_LEVEL
Definition: zip.h:81
int ZEXPORT zipOpenNewFileInZip3(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)
Definition: zip.c:690
voidpf void * buf
Definition: ioapi.h:39
void do_banner()
Definition: minizip.c:130
uInt tm_sec
Definition: zip.h:89
#define ZIP_OK
Definition: zip.h:70
voidp zipFile
Definition: zip.h:67
#define WRITEBUFFERSIZE
Definition: minizip.c:34
tm_zip tmz_date
Definition: zip.h:99
int ZEXPORT zipClose(zipFile file, const char *global_comment)
Definition: zip.c:1133