From: <lab...@us...> - 2018-12-09 21:01:19
|
Revision: 1557 http://sourceforge.net/p/opengtoolkit/svn/1557 Author: labviewer Date: 2018-12-09 21:01:17 +0000 (Sun, 09 Dec 2018) Log Message: ----------- Optimize Add GotToFirstFile2 and GoToNextFile2 function Modified Paths: -------------- trunk/lvzip/c_source/lvapi.c trunk/lvzip/c_source/lvapi.h trunk/lvzip/c_source/unzip.h trunk/lvzip/c_source/zalias.h Modified: trunk/lvzip/c_source/lvapi.c =================================================================== --- trunk/lvzip/c_source/lvapi.c 2018-12-09 16:18:48 UTC (rev 1556) +++ trunk/lvzip/c_source/lvapi.c 2018-12-09 21:01:17 UTC (rev 1557) @@ -444,6 +444,30 @@ return err; } +static MgErr RetrieveFileInfo(unzFile node, LStrHandle *fileName, uint16_t sizeFileName, LStrHandle *extraField, uint16_t sizeExtraField, LStrHandle *comment, uint16_t sizeComment) +{ + MgErr err = NumericArrayResize(uB, 1, (UHandle*)extraField, sizeExtraField); + if (!err) + { + err = NumericArrayResize(uB, 1, (UHandle*)fileName, sizeFileName); + if (!err) + { + err = NumericArrayResize(uB, 1, (UHandle*)comment, sizeComment); + if (!err) + { + err = LibToMgErr(unzGetCurrentFileInfo64(node, NULL, (char*)LStrBuf(**fileName), sizeFileName, LStrBuf(**extraField), sizeExtraField, (char*)LStrBuf(**comment), sizeComment)); + if (!err) + { + LStrLen(**extraField) = sizeExtraField; + LStrLen(**fileName) = sizeFileName; + LStrLen(**comment) = sizeComment; + } + } + } + } + return err; +} + /**************************************************************************************************** * * Retrieve the file information for the currently selected file entry @@ -468,26 +492,7 @@ err = LibToMgErr(unzGetCurrentFileInfo(node, pfile_info, NULL, 0, NULL, 0, NULL, 0)); if (!err) { - err = NumericArrayResize(uB, 1, (UHandle*)extraField, pfile_info->size_file_extra); - if (!err) - { - err = NumericArrayResize(uB, 1, (UHandle*)fileName, pfile_info->size_filename); - if (!err) - { - err = NumericArrayResize(uB, 1, (UHandle*)comment, pfile_info->size_file_comment); - if (!err) - { - err = LibToMgErr(unzGetCurrentFileInfo(node, pfile_info, (char*)LStrBuf(**fileName), pfile_info->size_filename, - LStrBuf(**extraField), pfile_info->size_file_extra, (char*)LStrBuf(**comment), pfile_info->size_file_comment)); - if (!err) - { - LStrLen(**extraField) = pfile_info->size_file_extra; - LStrLen(**fileName) = pfile_info->size_filename; - LStrLen(**comment) = pfile_info->size_file_comment; - } - } - } - } + err = RetrieveFileInfo(node, fileName, pfile_info->size_filename, extraField, pfile_info->size_file_extra, comment, pfile_info->size_file_comment); } } return err; @@ -503,26 +508,7 @@ err = LibToMgErr(unzGetCurrentFileInfo64(node, pfile_info, NULL, 0, NULL, 0, NULL, 0)); if (!err) { - err = NumericArrayResize(uB, 1, (UHandle*)extraField, pfile_info->size_file_extra); - if (!err) - { - err = NumericArrayResize(uB, 1, (UHandle*)fileName, pfile_info->size_filename); - if (!err) - { - err = NumericArrayResize(uB, 1, (UHandle*)comment, pfile_info->size_file_comment); - if (!err) - { - err = LibToMgErr(unzGetCurrentFileInfo64(node, pfile_info, (char*)LStrBuf(**fileName), pfile_info->size_filename, - LStrBuf(**extraField), pfile_info->size_file_extra, (char*)LStrBuf(**comment), pfile_info->size_file_comment)); - if (!err) - { - LStrLen(**extraField) = pfile_info->size_file_extra; - LStrLen(**fileName) = pfile_info->size_filename; - LStrLen(**comment) = pfile_info->size_file_comment; - } - } - } - } + err = RetrieveFileInfo(node, fileName, pfile_info->size_filename, extraField, pfile_info->size_file_extra, comment, pfile_info->size_file_comment); } } return err; @@ -647,6 +633,21 @@ return err; } +LibAPI(MgErr) lvzlib_unzGoToFirstFile2(LVRefNum *refnum, unz_file_info64 *pfile_info, LStrHandle *fileName, LStrHandle *extraField, LStrHandle *comment) +{ + unzFile node; + MgErr err = lvzlibGetRefnum(refnum, &node, UnzMagic); + if (!err) + { + err = LibToMgErr(unzGoToFirstFile2(node, pfile_info, NULL, 0, NULL, 0, NULL, 0)); + if (!err) + { + err = RetrieveFileInfo(node, fileName, pfile_info->size_filename, extraField, pfile_info->size_file_extra, comment, pfile_info->size_file_comment); + } + } + return err; +} + /**************************************************************************************************** * * Positions the pointer to the next file entre in the archive @@ -666,6 +667,21 @@ return err; } +LibAPI(MgErr) lvzlib_unzGoToNextFile2(LVRefNum *refnum, unz_file_info64 *pfile_info, LStrHandle *fileName, LStrHandle *extraField, LStrHandle *comment) +{ + unzFile node; + MgErr err = lvzlibGetRefnum(refnum, &node, UnzMagic); + if (!err) + { + err = LibToMgErr(unzGoToNextFile2(node, pfile_info, NULL, 0, NULL, 0, NULL, 0)); + if (!err) + { + err = RetrieveFileInfo(node, fileName, pfile_info->size_filename, extraField, pfile_info->size_file_extra, comment, pfile_info->size_file_comment); + } + } + return err; +} + /**************************************************************************************************** * * Low level function to position the current read pointer at a specific location inside the archive Modified: trunk/lvzip/c_source/lvapi.h =================================================================== --- trunk/lvzip/c_source/lvapi.h 2018-12-09 16:18:48 UTC (rev 1556) +++ trunk/lvzip/c_source/lvapi.h 2018-12-09 21:01:17 UTC (rev 1557) @@ -34,7 +34,9 @@ LibAPI(MgErr) lvzlib_unzReadCurrentFile(LVRefNum *refnum, LStrHandle buffer); LibAPI(MgErr) lvzlib_unzCloseCurrentFile(LVRefNum *refnum); LibAPI(MgErr) lvzlib_unzGoToFirstFile(LVRefNum *refnum); +LibAPI(MgErr) lvzlib_unzGoToFirstFile64(LVRefNum *refnum, unz_file_info64 *pfile_info, LStrHandle *fileName, LStrHandle *extraField, LStrHandle *comment); LibAPI(MgErr) lvzlib_unzGoToNextFile(LVRefNum *refnum); +LibAPI(MgErr) lvzlib_unzGoToNextFile64(LVRefNum *refnum, unz_file_info64 *pfile_info, LStrHandle *fileName, LStrHandle *extraField, LStrHandle *comment); LibAPI(MgErr) lvzlib_unzGoToFilePos32(LVRefNum *refnum, unz_file_pos *pos); LibAPI(MgErr) lvzlib_unzGoToFilePos64(LVRefNum *refnum, unz64_file_pos *pos); LibAPI(MgErr) lvzlib_unzGetFilePos32(LVRefNum *refnum, unz_file_pos *pos); Modified: trunk/lvzip/c_source/unzip.h =================================================================== --- trunk/lvzip/c_source/unzip.h 2018-12-09 16:18:48 UTC (rev 1556) +++ trunk/lvzip/c_source/unzip.h 2018-12-09 21:01:17 UTC (rev 1557) @@ -75,46 +75,47 @@ /* unz_file_info contain information about a file in the zipfile */ typedef struct unz_file_info64_s { - uint16_t version; /* version made by 2 bytes */ - uint16_t version_needed; /* version needed to extract 2 bytes */ - uint16_t flag; /* general purpose bit flag 2 bytes */ - uint16_t compression_method; /* compression method 2 bytes */ - uint32_t dos_date; /* last mod file date in Dos fmt 4 bytes */ - uint32_t crc; /* crc-32 4 bytes */ - uint64_t compressed_size; /* compressed size 8 bytes */ - uint64_t uncompressed_size; /* uncompressed size 8 bytes */ - uint16_t size_filename; /* filename length 2 bytes */ - uint16_t size_file_extra; /* extra field length 2 bytes */ - uint16_t size_file_comment; /* file comment length 2 bytes */ - - uint32_t disk_num_start; /* disk number start 4 bytes */ - uint16_t internal_fa; /* internal file attributes 2 bytes */ - uint32_t external_fa; /* external file attributes 4 bytes */ - - uint64_t disk_offset; - - uint16_t size_file_extra_internal; + uint16_t version; /* version made by 2 bytes, 2 */ + uint16_t version_needed; /* version needed to extract 2 bytes, 4 */ + uint16_t flag; /* general purpose bit flag 2 bytes, 6 */ + uint16_t compression_method; /* compression method 2 bytes, 8 */ + uint32_t dos_date; /* last mod file date in Dos fmt 4 bytes, 12 */ + uint32_t crc; /* crc-32 4 bytes, 16 */ + uint64_t compressed_size; /* compressed size 8 bytes, 24 */ + uint64_t uncompressed_size; /* uncompressed size 8 bytes, 32 */ + uint16_t size_filename; /* filename length 2 bytes, 34 */ + uint16_t size_file_extra; /* extra field length 2 bytes, 36 */ + uint16_t size_file_comment; /* file comment length 2 bytes, 38 */ + uint16_t padding1; /* filler1 2 bytes, 40 */ + uint32_t disk_num_start; /* disk number start 4 bytes, 44 */ + uint16_t internal_fa; /* internal file attributes 2 bytes, 46 */ + uint16_t padding2; /* filler2 2 bytes, 48 */ + uint32_t external_fa; /* external file attributes 4 bytes, 52 */ + uint32_t padding3; /* filler3 4 bytes, 56 */ + uint64_t disk_offset; /* disk offset 8 bytes, 64 */ + uint16_t size_file_extra_internal; /* 2 bytes, 66 */ } unz_file_info64; typedef struct unz_file_info_s { - uint16_t version; /* version made by 2 bytes */ - uint16_t version_needed; /* version needed to extract 2 bytes */ - uint16_t flag; /* general purpose bit flag 2 bytes */ - uint16_t compression_method; /* compression method 2 bytes */ - uint32_t dos_date; /* last mod file date in Dos fmt 4 bytes */ - uint32_t crc; /* crc-32 4 bytes */ - uint32_t compressed_size; /* compressed size 4 bytes */ - uint32_t uncompressed_size; /* uncompressed size 4 bytes */ - uint16_t size_filename; /* filename length 2 bytes */ - uint16_t size_file_extra; /* extra field length 2 bytes */ - uint16_t size_file_comment; /* file comment length 2 bytes */ + uint16_t version; /* version made by 2 bytes, 2 */ + uint16_t version_needed; /* version needed to extract 2 bytes, 4 */ + uint16_t flag; /* general purpose bit flag 2 bytes, 6 */ + uint16_t compression_method; /* compression method 2 bytes, 8 */ + uint32_t dos_date; /* last mod file date in Dos fmt 4 bytes, 12 */ + uint32_t crc; /* crc-32 4 bytes, 16 */ + uint32_t compressed_size; /* compressed size 4 bytes, 20 */ + uint32_t uncompressed_size; /* uncompressed size 4 bytes, 24 */ + uint16_t size_filename; /* filename length 2 bytes, 26 */ + uint16_t size_file_extra; /* extra field length 2 bytes, 28 */ + uint16_t size_file_comment; /* file comment length 2 bytes, 30 */ + + uint16_t disk_num_start; /* disk number start 2 bytes, 32 */ + uint16_t internal_fa; /* internal file attributes 2 bytes, 34 */ + uint16_t padding1; /* filler1 2 bytes, 36 */ + uint32_t external_fa; /* external file attributes 4 bytes, 40 */ - uint16_t disk_num_start; /* disk number start 2 bytes */ - uint16_t internal_fa; /* internal file attributes 2 bytes */ - uint32_t external_fa; /* external file attributes 4 bytes */ - - uint64_t disk_offset; + uint64_t disk_offset; /* disk offset 8 bytes, 48 */ } unz_file_info; /***************************************************************************/ Modified: trunk/lvzip/c_source/zalias.h =================================================================== --- trunk/lvzip/c_source/zalias.h 2018-12-09 16:18:48 UTC (rev 1556) +++ trunk/lvzip/c_source/zalias.h 2018-12-09 21:01:17 UTC (rev 1557) @@ -74,7 +74,9 @@ #define unzGoToFilePos lvzip_unzGoToFilePos #define unzGoToFilePos64 lvzip_unzGoToFilePos64 #define unzGoToFirstFile lvzip_unzGoToFirstFile +#define unzGoToFirstFile2 lvzip_unzGoToFirstFile2 #define unzGoToNextFile lvzip_unzGoToNextFile +#define unzGoToNextFile2 lvzip_unzGoToNextFile2 #define unzLocateFile lvzip_unzLocateFile #define unzOpen lvzip_unzOpen #define unzOpen64 lvzip_unzOpen64 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |