From: Rolf K. <lab...@us...> - 2008-03-31 19:53:41
|
Update of /cvsroot/opengtoolkit/lvzip/c_source In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv14377/c_source Modified Files: zip.c Log Message: Fixed problem on opening existing empty directory for append archive mode. Index: zip.c =================================================================== RCS file: /cvsroot/opengtoolkit/lvzip/c_source/zip.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** zip.c 27 Feb 2008 20:48:55 -0000 1.12 --- zip.c 31 Mar 2008 19:53:40 -0000 1.13 *************** *** 348,353 **** unsigned char c; int err; ! ! *pi = 0; err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); if (err==1) --- 348,353 ---- unsigned char c; int err; ! ! *pi = 0; err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); if (err==1) *************** *** 552,556 **** uLong size_central_dir; /* size of the central directory */ uLong offset_central_dir; /* offset of start of central directory */ ! uLong central_pos,uL; uLong number_disk; /* number of the current dist, used for --- 552,556 ---- uLong size_central_dir; /* size of the central directory */ uLong offset_central_dir; /* offset of start of central directory */ ! uLong central_pos; uLong number_disk; /* number of the current dist, used for *************** *** 563,616 **** (same than number_entry on nospan) */ uLong size_comment; central_pos = ziplocal_SearchCentralDir(&ziinit.z_filefunc,ziinit.filestream); - if (central_pos==0) - err=ZIP_ERRNO; ! if (ZSEEK(ziinit.z_filefunc, ziinit.filestream, ! central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) ! err=ZIP_ERRNO; ! /* the signature, already checked */ ! if (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&uL)!=ZIP_OK) ! err=ZIP_ERRNO; /* number of this 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 (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 (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry)!=ZIP_OK) ! err=ZIP_ERRNO; /* total number of entries in the central dir */ ! 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; /* size of the central directory */ ! 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 (ziplocal_getLong(&ziinit.z_filefunc, ziinit.filestream,&offset_central_dir)!=ZIP_OK) ! err=ZIP_ERRNO; /* zipfile global comment length */ ! if (ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&size_comment)!=ZIP_OK) ! err=ZIP_ERRNO; ! if ((central_pos<offset_central_dir+size_central_dir) && ! (err==ZIP_OK)) ! err=ZIP_BADZIPFILE; if (err!=ZIP_OK) --- 563,615 ---- (same than number_entry on nospan) */ uLong size_comment; + char sig[4]; central_pos = ziplocal_SearchCentralDir(&ziinit.z_filefunc,ziinit.filestream); ! 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 (err==ZIP_OK) ! if (((*(sig))!=0x50) || ((*(sig+1))!=0x4b) || ((*(sig+2))!=0x05) || ((*(sig+3))!=0x06)) ! err = ZIP_ERRNO; /* number of this disk */ ! if (err==ZIP_OK) ! err = ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_disk); /* 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); /* 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); /* total number of entries in the central dir */ ! if (err==ZIP_OK) ! err = ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&number_entry_CD); 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); /* 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); /* zipfile global comment length */ ! if (err==ZIP_OK) ! err = ziplocal_getShort(&ziinit.z_filefunc, ziinit.filestream,&size_comment); ! if ((err==ZIP_OK) && (central_pos<offset_central_dir+size_central_dir)) ! err = ZIP_BADZIPFILE; if (err!=ZIP_OK) |