commit
65a8282c0b
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user