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
path: root/coding
diff options
context:
space:
mode:
authorYuri Gorshenin <y@maps.me>2016-05-10 15:24:46 +0300
committerYuri Gorshenin <y@maps.me>2016-05-10 15:37:41 +0300
commit18287be1dbd25e98d3ac59e13a86687c5e697605 (patch)
tree0e0ed21893a75a3d3487c96a8bf8cdc9424855b4 /coding
parent9375997212876b739a713dd49caf99821be8466d (diff)
[coding] Fixes to SRTM parser CL.
Diffstat (limited to 'coding')
-rw-r--r--coding/zip_reader.cpp36
-rw-r--r--coding/zip_reader.hpp6
2 files changed, 21 insertions, 21 deletions
diff --git a/coding/zip_reader.cpp b/coding/zip_reader.cpp
index 4c37d66090..102bdd77a4 100644
--- a/coding/zip_reader.cpp
+++ b/coding/zip_reader.cpp
@@ -118,30 +118,28 @@ void ZipFileReader::UnzipFile(string const & zipContainer, string const & fileIn
outFileGuard.release();
}
-char* ZipFileReader::UnzipFileToMemory(string const & zipContainer, string const & fileInZip)
+void ZipFileReader::UnzipFileToMemory(string const & cont, string const & file,
+ vector<char> & data)
{
- unzFile zip = unzOpen64(zipContainer.c_str());
+ unzFile zip = unzOpen64(cont.c_str());
if (!zip)
- MYTHROW(OpenZipException, ("Can't get zip file handle", zipContainer));
- MY_SCOPE_GUARD(zipGuard, bind(&unzClose, zip));
-
- if (UNZ_OK != unzLocateFile(zip, fileInZip.c_str(), 1))
- MYTHROW(LocateZipException, ("Can't locate file inside zip", fileInZip));
+ MYTHROW(OpenZipException, ("Can't get zip file handle:", cont));
+ MY_SCOPE_GUARD(zipCloser, bind(&unzClose, zip));
+ if (UNZ_OK != unzLocateFile(zip, file.c_str(), 1 /* case sensitivity */))
+ MYTHROW(LocateZipException, ("Can't locate file inside zip container:", file));
if (UNZ_OK != unzOpenCurrentFile(zip))
- MYTHROW(LocateZipException, ("Can't open file inside zip", fileInZip));
- MY_SCOPE_GUARD(currentFileGuard, bind(&unzCloseCurrentFile, zip));
-
- unz_file_info64 fileInfo;
- if (UNZ_OK != unzGetCurrentFileInfo64(zip, &fileInfo, NULL, 0, NULL, 0, NULL, 0))
- MYTHROW(LocateZipException, ("Can't get uncompressed file size inside zip", fileInZip));
- size_t const uncompressedFileSize = fileInfo.uncompressed_size;
+ MYTHROW(LocateZipException, ("Can't open file inside zip container:", file));
+ MY_SCOPE_GUARD(currentFileCloser, bind(&unzCloseCurrentFile, zip));
- char* buf= new char[uncompressedFileSize];
+ unz_file_info64 info;
+ if (UNZ_OK != unzGetCurrentFileInfo64(zip, &info, NULL, 0, NULL, 0, NULL, 0))
+ MYTHROW(LocateZipException, ("Can't get uncompressed file size inside zip:", file));
- int const readBytes = unzReadCurrentFile(zip, buf, uncompressedFileSize);
- if (readBytes < 0)
- MYTHROW(InvalidZipException, ("Error", readBytes, "while unzipping", fileInZip, "from", zipContainer));
+ size_t const size = info.uncompressed_size;
+ data.resize(size);
- return buf;
+ int const bytesRead = unzReadCurrentFile(zip, data.data(), size);
+ if (bytesRead < 0)
+ MYTHROW(InvalidZipException, ("Error:", bytesRead, "while unzipping", file, "in", cont));
}
diff --git a/coding/zip_reader.hpp b/coding/zip_reader.hpp
index 6c36693df4..7970cff087 100644
--- a/coding/zip_reader.hpp
+++ b/coding/zip_reader.hpp
@@ -32,8 +32,10 @@ public:
static void UnzipFile(string const & zipContainer, string const & fileInZip,
string const & outFilePath, ProgressFn progressFn = ProgressFn());
- /// @warning Counsumer must manually free result
- static char* UnzipFileToMemory(string const & zipContainer, string const & fileInZip);
+ /// Unzips |file| in |cont| to |buffer|.
+ ///
+ /// @warning Can throw OpenZipException and LocateZipException.
+ static void UnzipFileToMemory(string const & cont, string const & file, vector<char> & data);
static void FilesList(string const & zipContainer, FileListT & filesList);