|
@@ -15,7 +15,7 @@
|
|
|
Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions.
|
|
|
Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data
|
|
|
It is used when recreting zip archive with RAW when deleting items from a zip.
|
|
|
- ZIP64 data is automaticly added to items that needs it, and existing ZIP64 data need to be removed.
|
|
|
+ ZIP64 data is automatically added to items that needs it, and existing ZIP64 data need to be removed.
|
|
|
Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required)
|
|
|
Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
|
|
|
|
|
@@ -116,7 +116,7 @@ typedef struct linkedlist_datablock_internal_s
|
|
|
struct linkedlist_datablock_internal_s* next_datablock;
|
|
|
uLong avail_in_this_block;
|
|
|
uLong filled_in_this_block;
|
|
|
- uLong unused; /* for future use and alignement */
|
|
|
+ uLong unused; /* for future use and alignment */
|
|
|
unsigned char data[SIZEDATA_INDATABLOCK];
|
|
|
} linkedlist_datablock_internal;
|
|
|
|
|
@@ -157,7 +157,7 @@ typedef struct
|
|
|
ZPOS64_T totalUncompressedData;
|
|
|
#ifndef NOCRYPT
|
|
|
unsigned long keys[3]; /* keys defining the pseudo-random sequence */
|
|
|
- const unsigned long* pcrc_32_tab;
|
|
|
+ const z_crc_t* pcrc_32_tab;
|
|
|
int crypt_header_size;
|
|
|
#endif
|
|
|
} curfile64_info;
|
|
@@ -171,7 +171,7 @@ typedef struct
|
|
|
curfile64_info ci; /* info on the file curretly writing */
|
|
|
|
|
|
ZPOS64_T begin_pos; /* position of the beginning of the zipfile */
|
|
|
- ZPOS64_T add_position_when_writting_offset;
|
|
|
+ ZPOS64_T add_position_when_writing_offset;
|
|
|
ZPOS64_T number_entry;
|
|
|
|
|
|
#ifndef NO_ADDFILEINEXISTINGZIP
|
|
@@ -807,7 +807,7 @@ int LoadCentralDirectoryRecord(zip64_internal* pziinit)
|
|
|
}
|
|
|
|
|
|
byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir);
|
|
|
- pziinit->add_position_when_writting_offset = byte_before_the_zipfile;
|
|
|
+ pziinit->add_position_when_writing_offset = byte_before_the_zipfile;
|
|
|
|
|
|
{
|
|
|
ZPOS64_T size_central_dir_to_read = size_central_dir;
|
|
@@ -877,7 +877,7 @@ extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* gl
|
|
|
ziinit.in_opened_file_inzip = 0;
|
|
|
ziinit.ci.stream_initialised = 0;
|
|
|
ziinit.number_entry = 0;
|
|
|
- ziinit.add_position_when_writting_offset = 0;
|
|
|
+ ziinit.add_position_when_writing_offset = 0;
|
|
|
init_linkedlist(&(ziinit.central_dir));
|
|
|
|
|
|
|
|
@@ -1069,6 +1069,7 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename,
|
|
|
int err = ZIP_OK;
|
|
|
|
|
|
# ifdef NOCRYPT
|
|
|
+ (crcForCrypting);
|
|
|
if (password != NULL)
|
|
|
return ZIP_PARAMERROR;
|
|
|
# endif
|
|
@@ -1116,9 +1117,9 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename,
|
|
|
zi->ci.flag = flagBase;
|
|
|
if ((level==8) || (level==9))
|
|
|
zi->ci.flag |= 2;
|
|
|
- if ((level==2))
|
|
|
+ if (level==2)
|
|
|
zi->ci.flag |= 4;
|
|
|
- if ((level==1))
|
|
|
+ if (level==1)
|
|
|
zi->ci.flag |= 6;
|
|
|
if (password != NULL)
|
|
|
zi->ci.flag |= 1;
|
|
@@ -1165,7 +1166,7 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename,
|
|
|
if(zi->ci.pos_local_header >= 0xffffffff)
|
|
|
zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4);
|
|
|
else
|
|
|
- zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4);
|
|
|
+ zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writing_offset,4);
|
|
|
|
|
|
for (i=0;i<size_filename;i++)
|
|
|
*(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
|
|
@@ -1714,7 +1715,7 @@ extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_s
|
|
|
if (err==ZIP_OK)
|
|
|
err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
|
|
|
|
|
|
- if(uncompressed_size >= 0xffffffff)
|
|
|
+ if(uncompressed_size >= 0xffffffff || compressed_size >= 0xffffffff )
|
|
|
{
|
|
|
if(zi->ci.pos_zip64extrainfo > 0)
|
|
|
{
|
|
@@ -1728,6 +1729,8 @@ extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_s
|
|
|
if (err==ZIP_OK) /* uncompressed size, unknown */
|
|
|
err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);
|
|
|
}
|
|
|
+ else
|
|
|
+ err = ZIP_BADZIPFILE; // Caller passed zip64 = 0, so no room for zip64 info -> fatal
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -1756,7 +1759,7 @@ extern int ZEXPORT zipCloseFileInZip (zipFile file)
|
|
|
int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
|
|
|
{
|
|
|
int err = ZIP_OK;
|
|
|
- ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset;
|
|
|
+ ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset;
|
|
|
|
|
|
err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
|
|
|
|
|
@@ -1809,7 +1812,7 @@ int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centra
|
|
|
|
|
|
if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
|
|
|
{
|
|
|
- ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
|
|
|
+ ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
|
|
|
err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
|
|
|
}
|
|
|
return err;
|
|
@@ -1850,13 +1853,13 @@ int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir,
|
|
|
|
|
|
if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
|
|
|
{
|
|
|
- ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
|
|
|
+ ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
|
|
|
if(pos >= 0xffffffff)
|
|
|
{
|
|
|
err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);
|
|
|
}
|
|
|
else
|
|
|
- err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);
|
|
|
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writing_offset),4);
|
|
|
}
|
|
|
|
|
|
return err;
|
|
@@ -1922,8 +1925,8 @@ extern int ZEXPORT zipClose (zipFile file, const char* global_comment)
|
|
|
}
|
|
|
free_linkedlist(&(zi->central_dir));
|
|
|
|
|
|
- pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
|
|
|
- if(pos >= 0xffffffff)
|
|
|
+ pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
|
|
|
+ if(pos >= 0xffffffff || zi->number_entry > 0xFFFF)
|
|
|
{
|
|
|
ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
|
|
|
Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
|