Merge pull request #6 from johnezang/master

commit sez it all, bayybee
This commit is contained in:
Sam Soffes 2011-07-22 19:26:17 -07:00
commit 65a8282c0b
3 changed files with 49 additions and 46 deletions

View File

@ -34,7 +34,7 @@
return NO; return NO;
} }
unz_global_info globalInfo = {0}; unz_global_info globalInfo = {0ul, 0ul};
unzGetGlobalInfo(zip, &globalInfo); unzGetGlobalInfo(zip, &globalInfo);
// Begin unzipping // Begin unzipping
@ -65,8 +65,9 @@
} }
// Reading data and write to file // Reading data and write to file
int read; unz_file_info fileInfo;
unz_file_info fileInfo = {0}; memset(&fileInfo, 0, sizeof(unz_file_info));
ret = unzGetCurrentFileInfo(zip, &fileInfo, NULL, 0, NULL, 0, NULL, 0); ret = unzGetCurrentFileInfo(zip, &fileInfo, NULL, 0, NULL, 0, NULL, 0);
if (ret != UNZ_OK) { if (ret != UNZ_OK) {
success = NO; success = NO;
@ -107,10 +108,10 @@
FILE *fp = fopen((const char*)[fullPath UTF8String], "wb"); FILE *fp = fopen((const char*)[fullPath UTF8String], "wb");
while (fp) { while (fp) {
read = unzReadCurrentFile(zip, buffer, 4096); int readBytes = unzReadCurrentFile(zip, buffer, 4096);
if (read > 0) { if (readBytes > 0) {
fwrite(buffer, read, 1, fp ); fwrite(buffer, readBytes, 1, fp );
} else { } else {
break; break;
} }

View File

@ -137,28 +137,28 @@ uLong* bytesRecovered;
/* Central directory entry */ /* Central directory entry */
{ {
char header[46]; char centralDirectoryEntryHeader[46];
char* comment = ""; //char* comment = "";
int comsize = (int) strlen(comment); //int comsize = (int) strlen(comment);
WRITE_32(header, 0x02014b50); WRITE_32(centralDirectoryEntryHeader, 0x02014b50);
WRITE_16(header + 4, version); WRITE_16(centralDirectoryEntryHeader + 4, version);
WRITE_16(header + 6, version); WRITE_16(centralDirectoryEntryHeader + 6, version);
WRITE_16(header + 8, gpflag); WRITE_16(centralDirectoryEntryHeader + 8, gpflag);
WRITE_16(header + 10, method); WRITE_16(centralDirectoryEntryHeader + 10, method);
WRITE_16(header + 12, filetime); WRITE_16(centralDirectoryEntryHeader + 12, filetime);
WRITE_16(header + 14, filedate); WRITE_16(centralDirectoryEntryHeader + 14, filedate);
WRITE_32(header + 16, crc); WRITE_32(centralDirectoryEntryHeader + 16, crc);
WRITE_32(header + 20, cpsize); WRITE_32(centralDirectoryEntryHeader + 20, cpsize);
WRITE_32(header + 24, uncpsize); WRITE_32(centralDirectoryEntryHeader + 24, uncpsize);
WRITE_16(header + 28, fnsize); WRITE_16(centralDirectoryEntryHeader + 28, fnsize);
WRITE_16(header + 30, extsize); WRITE_16(centralDirectoryEntryHeader + 30, extsize);
WRITE_16(header + 32, comsize); WRITE_16(centralDirectoryEntryHeader + 32, 0 /*comsize*/);
WRITE_16(header + 34, 0); /* disk # */ WRITE_16(centralDirectoryEntryHeader + 34, 0); /* disk # */
WRITE_16(header + 36, 0); /* int attrb */ WRITE_16(centralDirectoryEntryHeader + 36, 0); /* int attrb */
WRITE_32(header + 38, 0); /* ext attrb */ WRITE_32(centralDirectoryEntryHeader + 38, 0); /* ext attrb */
WRITE_32(header + 42, currentOffset); WRITE_32(centralDirectoryEntryHeader + 42, currentOffset);
/* Header */ /* Header */
if (fwrite(header, 1, 46, fpOutCD) == 46) { if (fwrite(centralDirectoryEntryHeader, 1, 46, fpOutCD) == 46) {
offsetCD += 46; offsetCD += 46;
/* Filename */ /* Filename */
@ -185,6 +185,7 @@ uLong* bytesRecovered;
} }
/* Comment field */ /* Comment field */
/*
if (comsize > 0) { if (comsize > 0) {
if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) { if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) {
offsetCD += comsize; offsetCD += comsize;
@ -193,7 +194,7 @@ uLong* bytesRecovered;
break; break;
} }
} }
*/
} else { } else {
err = Z_ERRNO; err = Z_ERRNO;
@ -212,31 +213,32 @@ uLong* bytesRecovered;
/* Final central directory */ /* Final central directory */
{ {
int entriesZip = entries; int entriesZip = entries;
char header[22]; char finalCentralDirectoryHeader[22];
char* comment = ""; // "ZIP File recovered by zlib/minizip/mztools"; //char* comment = ""; // "ZIP File recovered by zlib/minizip/mztools";
int comsize = (int) strlen(comment); //int comsize = (int) strlen(comment);
if (entriesZip > 0xffff) { if (entriesZip > 0xffff) {
entriesZip = 0xffff; entriesZip = 0xffff;
} }
WRITE_32(header, 0x06054b50); WRITE_32(finalCentralDirectoryHeader, 0x06054b50);
WRITE_16(header + 4, 0); /* disk # */ WRITE_16(finalCentralDirectoryHeader + 4, 0); /* disk # */
WRITE_16(header + 6, 0); /* disk # */ WRITE_16(finalCentralDirectoryHeader + 6, 0); /* disk # */
WRITE_16(header + 8, entriesZip); /* hack */ WRITE_16(finalCentralDirectoryHeader + 8, entriesZip); /* hack */
WRITE_16(header + 10, entriesZip); /* hack */ WRITE_16(finalCentralDirectoryHeader + 10, entriesZip); /* hack */
WRITE_32(header + 12, offsetCD); /* size of CD */ WRITE_32(finalCentralDirectoryHeader + 12, offsetCD); /* size of CD */
WRITE_32(header + 16, offset); /* offset to CD */ WRITE_32(finalCentralDirectoryHeader + 16, offset); /* offset to CD */
WRITE_16(header + 20, comsize); /* comment */ WRITE_16(finalCentralDirectoryHeader + 20, 0 /*comsize*/); /* comment */
/* Header */ /* Header */
if (fwrite(header, 1, 22, fpOutCD) == 22) { if (fwrite(finalCentralDirectoryHeader, 1, 22, fpOutCD) == 22) {
/* Comment field */ /* Comment field */
/*
if (comsize > 0) { if (comsize > 0) {
if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) { if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) {
err = Z_ERRNO; err = Z_ERRNO;
} }
} }
*/
} else { } else {
err = Z_ERRNO; err = Z_ERRNO;
} }

View File

@ -1070,10 +1070,10 @@ extern int ZEXPORT zipWriteInFileInZip (file, buf, len)
return err; return err;
} }
extern int ZEXPORT zipCloseFileInZipRaw (file, uncompressed_size, crc32) extern int ZEXPORT zipCloseFileInZipRaw (file, uncompressed_size, crc32ForFile)
zipFile file; zipFile file;
uLong uncompressed_size; uLong uncompressed_size;
uLong crc32; uLong crc32ForFile;
{ {
zip_internal* zi; zip_internal* zi;
uLong compressed_size; uLong compressed_size;
@ -1124,7 +1124,7 @@ extern int ZEXPORT zipCloseFileInZipRaw (file, uncompressed_size, crc32)
if (!zi->ci.raw) if (!zi->ci.raw)
{ {
crc32 = (uLong)zi->ci.crc32; crc32ForFile = (uLong)zi->ci.crc32;
uncompressed_size = (uLong)zi->ci.stream.total_in; uncompressed_size = (uLong)zi->ci.stream.total_in;
} }
compressed_size = (uLong)zi->ci.stream.total_out; compressed_size = (uLong)zi->ci.stream.total_out;
@ -1132,7 +1132,7 @@ extern int ZEXPORT zipCloseFileInZipRaw (file, uncompressed_size, crc32)
compressed_size += zi->ci.crypt_header_size; compressed_size += zi->ci.crypt_header_size;
# endif # endif
ziplocal_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/ ziplocal_putValue_inmemory(zi->ci.central_header+16,crc32ForFile,4); /*crc*/
ziplocal_putValue_inmemory(zi->ci.central_header+20, ziplocal_putValue_inmemory(zi->ci.central_header+20,
compressed_size,4); /*compr size*/ compressed_size,4); /*compr size*/
if (zi->ci.stream.data_type == Z_ASCII) if (zi->ci.stream.data_type == Z_ASCII)
@ -1153,7 +1153,7 @@ extern int ZEXPORT zipCloseFileInZipRaw (file, uncompressed_size, crc32)
err = ZIP_ERRNO; err = ZIP_ERRNO;
if (err==ZIP_OK) if (err==ZIP_OK)
err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */ err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,crc32ForFile,4); /* crc 32, unknown */
if (err==ZIP_OK) /* compressed size, unknown */ if (err==ZIP_OK) /* compressed size, unknown */
err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4); err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);