Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Zolotarev <deathbaba@gmail.com>2011-07-22 15:02:00 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:20:50 +0300
commitefc5f6aa81d49bd2641ad0c1fce39dc22ff75c2f (patch)
tree40b59077e0b1a83cd27ae56f024c5e1eb5e05baf /coding/zip_reader.cpp
parent0afb0f3b08782065ffb4fe15b3669dc56c90618e (diff)
Added zip files listing support into coding/zip_reader
Diffstat (limited to 'coding/zip_reader.cpp')
-rw-r--r--coding/zip_reader.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/coding/zip_reader.cpp b/coding/zip_reader.cpp
index 0849f8c02d..ee798f6769 100644
--- a/coding/zip_reader.cpp
+++ b/coding/zip_reader.cpp
@@ -39,3 +39,28 @@ ZipFileReader::ZipFileReader(string const & container, string const & file)
SetOffsetAndSize(offset, fileInfo.uncompressed_size);
}
+
+vector<string> ZipFileReader::FilesList(string const & zipContainer)
+{
+ unzFile zip = unzOpen64(zipContainer.c_str());
+ if (!zip)
+ MYTHROW(OpenZipException, ("Can't get zip file handle", zipContainer));
+
+ MY_SCOPE_GUARD(zipGuard, bind(&unzClose, zip));
+
+ if (UNZ_OK != unzGoToFirstFile(zip))
+ MYTHROW(LocateZipException, ("Can't find first file inside zip", zipContainer));
+
+ vector<string> filesList;
+ do
+ {
+ char fileName[256];
+ if (UNZ_OK != unzGetCurrentFileInfo64(zip, NULL, fileName, ARRAY_SIZE(fileName), NULL, 0, NULL, 0))
+ MYTHROW(LocateZipException, ("Can't get file name inside zip", zipContainer));
+
+ filesList.push_back(fileName);
+
+ } while (UNZ_OK == unzGoToNextFile(zip));
+
+ return filesList;
+}