|
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.
|