From: <lab...@us...> - 2009-12-22 21:59:11
|
Revision: 1016 http://opengtoolkit.svn.sourceforge.net/opengtoolkit/?rev=1016&view=rev Author: labviewer Date: 2009-12-22 21:59:04 +0000 (Tue, 22 Dec 2009) Log Message: ----------- Incorporate changes from 1.01f Modified Paths: -------------- trunk/lvzip/c_source/unzip.c trunk/lvzip/c_source/unzip.h trunk/lvzip/c_source/zip.c Modified: trunk/lvzip/c_source/unzip.c =================================================================== --- trunk/lvzip/c_source/unzip.c 2009-11-24 08:07:26 UTC (rev 1015) +++ trunk/lvzip/c_source/unzip.c 2009-12-22 21:59:04 UTC (rev 1016) @@ -1,5 +1,5 @@ /* unzip.c -- IO for uncompress .zip files using zlib - Version 1.01e, February 12th, 2005 + Version 1.01f, December 22th, 2009 Copyright (C) 1998-2005 Gilles Vollant @@ -175,10 +175,7 @@ int *pi; { unsigned char c; - int err; - - *pi = 0; - err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); + int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); if (err==1) { *pi = (int)c; @@ -186,6 +183,7 @@ } else { + *pi = 0; if (ZERROR(*pzlib_filefunc_def,filestream)) return UNZ_ERRNO; else @@ -208,7 +206,7 @@ uLong *pX; { uLong x ; - int i; + int i = 0; int err; err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); @@ -236,7 +234,7 @@ uLong *pX; { uLong x ; - int i; + int i = 0; int err; err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); @@ -263,9 +261,6 @@ /* My own strcmpi / strcasecmp */ -local int strcmpcasenosensitive_internal OF(( - const char* fileName1, - const char* fileName2)); local int strcmpcasenosensitive_internal (fileName1,fileName2) const char* fileName1; const char* fileName2; @@ -495,8 +490,11 @@ s=(unz_s*)ALLOC(sizeof(unz_s)); - *s=us; - unzGoToFirstFile((unzFile)s); + if (s!=NULL) + { + *s=us; + unzGoToFirstFile((unzFile)s); + } return (unzFile)s; } @@ -549,9 +547,6 @@ /* Translate date/time from Dos format to tm_unz (readable more easilty) */ -local void unzlocal_DosDateToTmuDate OF(( - uLong ulDosDate, - tm_unz* ptm)); local void unzlocal_DosDateToTmuDate (ulDosDate, ptm) uLong ulDosDate; tm_unz* ptm; @@ -615,10 +610,12 @@ /* we check the magic */ if (err==UNZ_OK) + { if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x02014b50) err=UNZ_BADZIPFILE; + } if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) err=UNZ_ERRNO; @@ -695,10 +692,13 @@ uSizeRead = extraFieldBufferSize; if (lSeek!=0) + { if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; + } + if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead) err=UNZ_ERRNO; @@ -720,10 +720,13 @@ uSizeRead = commentBufferSize; if (lSeek!=0) + { if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; + } + if ((file_info.size_file_comment>0) && (commentBufferSize>0)) if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) err=UNZ_ERRNO; @@ -961,12 +964,6 @@ store in *piSizeVar the size of extra info in local header (filename and size of extra field data) */ -local int unzlocal_CheckCurrentFileCoherencyHeader OF(( - unz_s* s, - uInt* piSizeVar, - uLong *poffset_local_extrafield, - uInt *psize_local_extrafield)); - local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, poffset_local_extrafield, psize_local_extrafield) @@ -990,10 +987,12 @@ if (err==UNZ_OK) + { if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x04034b50) err=UNZ_BADZIPFILE; + } if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) err=UNZ_ERRNO; @@ -1176,6 +1175,8 @@ s->pfile_in_zip_read = pfile_in_zip_read_info; + s->encrypted = 0; + # ifndef NOUNCRYPT if (password != NULL) { @@ -1579,7 +1580,7 @@ unz_s* s; if (file==NULL) - return UNZ_PARAMERROR; + return (uLong)UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return 0; Modified: trunk/lvzip/c_source/unzip.h =================================================================== --- trunk/lvzip/c_source/unzip.h 2009-11-24 08:07:26 UTC (rev 1015) +++ trunk/lvzip/c_source/unzip.h 2009-12-22 21:59:04 UTC (rev 1016) @@ -1,5 +1,5 @@ /* unzip.h -- IO for uncompress .zip files using zlib - Version 1.01e, February 12th, 2005 + Version 1.01f, December 22th, 2009 Copyright (C) 1998-2005 Gilles Vollant @@ -57,6 +57,12 @@ #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 */ Modified: trunk/lvzip/c_source/zip.c =================================================================== --- trunk/lvzip/c_source/zip.c 2009-11-24 08:07:26 UTC (rev 1015) +++ trunk/lvzip/c_source/zip.c 2009-12-22 21:59:04 UTC (rev 1016) @@ -1,5 +1,5 @@ /* zip.c -- IO on .zip files using zlib - Version 1.01e, February 12th, 2005 + Version 1.01f, December 22th, 2009 27 Dec 2004 Rolf Kalbermatter Modification to zipOpen2 to support globalComment retrieval. @@ -173,7 +173,6 @@ return ldi; } -local void free_datablock OF((linkedlist_datablock_internal* ldi)); local void free_datablock(ldi) linkedlist_datablock_internal* ldi; { @@ -185,14 +184,12 @@ } } -local void init_linkedlist OF((linkedlist_data* ll)); local void init_linkedlist(ll) linkedlist_data* ll; { ll->first_block = ll->last_block = NULL; } -local void free_linkedlist OF((linkedlist_data* ll)); local void free_linkedlist(ll) linkedlist_data* ll; { @@ -201,7 +198,6 @@ } -local int add_data_in_datablock OF((linkedlist_data* ll, const void* buf, uLong len)); local int add_data_in_datablock(ll,buf,len) linkedlist_data* ll; const void* buf; @@ -320,15 +316,14 @@ /****************************************************************************/ -local uLong ziplocal_TmzDateToDosDate OF((const tm_zip* ptm,uLong dosDate)); local uLong ziplocal_TmzDateToDosDate(ptm,dosDate) const tm_zip* ptm; uLong dosDate; { uLong year = (uLong)ptm->tm_year; - if (year>1980) + if (year>=1980) year-=1980; - else if (year>80) + else if (year>=80) year-=80; return (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) | @@ -349,10 +344,7 @@ int *pi; { unsigned char c; - int err; - - *pi = 0; - err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); + int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); if (err==1) { *pi = (int)c; @@ -360,6 +352,7 @@ } else { + *pi = 0; if (ZERROR(*pzlib_filefunc_def,filestream)) return ZIP_ERRNO; else @@ -382,7 +375,7 @@ uLong *pX; { uLong x ; - int i; + int i = 0; int err; err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i); @@ -410,7 +403,7 @@ uLong *pX; { uLong x ; - int i; + int i = 0; int err; err = ziplocal_getByte(pzlib_filefunc_def,filestream,&i); @@ -530,6 +523,8 @@ if (ziinit.filestream == NULL) return NULL; + if (append == APPEND_STATUS_CREATEAFTER) + ZSEEK(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END); ziinit.begin_pos = ZTELL(ziinit.z_filefunc,ziinit.filestream); ziinit.in_opened_file_inzip = 0; ziinit.ci.stream_initialised = 0; @@ -554,7 +549,7 @@ uLong size_central_dir; /* size of the central directory */ uLong offset_central_dir; /* offset of start of central directory */ - uLong central_pos; + uLong central_pos,uL; uLong number_disk; /* number of the current dist, used for spaning ZIP, unsupported, always 0*/ @@ -565,55 +560,64 @@ the central dir (same than number_entry on nospan) */ uLong size_comment; - char sig[4]; central_pos = ziplocal_SearchCentralDir(&ziinit.z_filefunc,ziinit.filestream); +// if (central_pos==0) disable to allow appending to empty ZIP archive +// err=ZIP_ERRNO; - err = ZSEEK(ziinit.z_filefunc, ziinit.filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET); - if (err==ZIP_OK) - err = ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream, (uLong*)sig); - + if (ZSEEK(ziinit.z_filefunc, ziinit.filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=ZIP_ERRNO; + /* the signature, already checked */ if (err==ZIP_OK) - if (((*(sig))!=0x50) || ((*(sig+1))!=0x4b) || ((*(sig+2))!=0x05) || ((*(sig+3))!=0x06)) - err = ZIP_ERRNO; - + if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&uL)!=ZIP_OK) + err=ZIP_ERRNO; + /* number of this disk */ if (err==ZIP_OK) - err = ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk); + if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk)!=ZIP_OK) + err=ZIP_ERRNO; /* number of the disk with the start of the central directory */ if (err==ZIP_OK) - err = ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk_with_CD); + if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk_with_CD)!=ZIP_OK) + err=ZIP_ERRNO; /* total number of entries in the central dir on this disk */ if (err==ZIP_OK) - err = ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry); + if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry)!=ZIP_OK) + err=ZIP_ERRNO; /* total number of entries in the central dir */ if (err==ZIP_OK) - err = ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry_CD); + if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry_CD)!=ZIP_OK) + err=ZIP_ERRNO; - if ((number_entry_CD!=number_entry) || - (number_disk_with_CD!=0) || - (number_disk!=0)) - err = ZIP_BADZIPFILE; + if (err==ZIP_OK) + if ((number_entry_CD!=number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=ZIP_BADZIPFILE; /* size of the central directory */ if (err==ZIP_OK) - err = ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&size_central_dir); + if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&size_central_dir)!=ZIP_OK) + err=ZIP_ERRNO; /* offset of start of central directory with respect to the starting disk number */ if (err==ZIP_OK) - err = ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&offset_central_dir); + if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&offset_central_dir)!=ZIP_OK) + err=ZIP_ERRNO; /* zipfile global comment length */ if (err==ZIP_OK) - err = ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&size_comment); + if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&size_comment)!=ZIP_OK) + err=ZIP_ERRNO; - if ((err==ZIP_OK) && (central_pos<offset_central_dir+size_central_dir)) - err = ZIP_BADZIPFILE; + if ((central_pos<offset_central_dir+size_central_dir) && + (err==ZIP_OK)) + err=ZIP_BADZIPFILE; if (err!=ZIP_OK) { @@ -623,7 +627,7 @@ if (size_comment>0) { - ziinit.globalcomment = ALLOC(size_comment+1); + ziinit.globalcomment = (char*)ALLOC(size_comment+1); if (ziinit.globalcomment) { size_comment = ZREAD(ziinit.z_filefunc, ziinit.filestream,ziinit.globalcomment,size_comment); @@ -865,6 +869,7 @@ zi->ci.stream.next_out = zi->ci.buffered_data; zi->ci.stream.total_in = 0; zi->ci.stream.total_out = 0; + zi->ci.stream.data_type = Z_BINARY; if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) { @@ -949,7 +954,6 @@ comment, method, level, 0); } -local int zipFlushWriteBuffer OF((zip_internal* zi)); local int zipFlushWriteBuffer(zi) zip_internal* zi; { @@ -987,9 +991,9 @@ if (zi->in_opened_file_inzip == 0) return ZIP_PARAMERROR; - zi->ci.stream.next_in = (void*)buf; + zi->ci.stream.next_in = (Bytef*)buf; zi->ci.stream.avail_in = len; - zi->ci.crc32 = crc32(zi->ci.crc32,buf,len); + zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len); while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0)) { @@ -1055,7 +1059,7 @@ zi->ci.stream.avail_in = 0; if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) - while (err == ZIP_OK) + while (err==ZIP_OK) { uLong uTotalOutBefore; if (zi->ci.stream.avail_out == 0) @@ -1073,8 +1077,8 @@ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; } - if (err == Z_STREAM_END) - err = ZIP_OK; /* this is normal */ + if (err==Z_STREAM_END) + err=ZIP_OK; /* this is normal */ if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK)) if (zipFlushWriteBuffer(zi)==ZIP_ERRNO) @@ -1082,7 +1086,7 @@ if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) { - err = deflateEnd(&zi->ci.stream); + err=deflateEnd(&zi->ci.stream); zi->ci.stream_initialised = 0; } @@ -1186,7 +1190,7 @@ ldi = ldi->next_datablock; } } - free_datablock(zi->central_dir.first_block); + free_linkedlist(&(zi->central_dir)); if (err==ZIP_OK) /* Magic End */ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |