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-02 19:27:59 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:20:20 +0300
commitf2f968c546009462418c2e87e3c1c93c3d92e350 (patch)
tree575bef1cbb04e3a89333e64497098e9a1f086b99 /coding/zip_reader.cpp
parent2cbd88b88265f9efc2763b695aba4de860f9a0e3 (diff)
[3party] Added all zlib files and zip support compilation
Diffstat (limited to 'coding/zip_reader.cpp')
-rw-r--r--coding/zip_reader.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/coding/zip_reader.cpp b/coding/zip_reader.cpp
new file mode 100644
index 0000000000..b82e87b854
--- /dev/null
+++ b/coding/zip_reader.cpp
@@ -0,0 +1,36 @@
+#include "zip_reader.hpp"
+
+#include "../base/scope_guard.hpp"
+#include "../base/logging.hpp"
+
+#include "../std/bind.hpp"
+
+#include "../3party/zlib/contrib/minizip/unzip.h"
+
+ZipFileReader::ZipFileReader(string const & container, string const & file)
+ : base_type(container)
+{
+ unzFile zip = unzOpen(container.c_str());
+ if (!zip)
+ MYTHROW(OpenZipException, ("Can't get zip file handle", container));
+
+ MY_SCOPE_GUARD(zipGuard, bind(&unzClose, zip));
+
+ if (UNZ_OK != unzLocateFile(zip, file.c_str(), 1))
+ MYTHROW(LocateZipException, ("Can't locate file inside zip", file));
+
+ unz_file_pos filePos;
+ if (UNZ_OK != unzGetFilePos(zip, &filePos))
+ MYTHROW(LocateZipException, ("Can't locate file offset inside zip", file));
+
+ unz_file_info fileInfo;
+ if (UNZ_OK != unzGetCurrentFileInfo(zip, &fileInfo, NULL, 0, NULL, 0, NULL, 0))
+ MYTHROW(LocateZipException, ("Can't get uncompressed file size inside zip", file));
+
+ if (fileInfo.compressed_size != fileInfo.uncompressed_size)
+ MYTHROW(InvalidZipException, ("File should be uncompressed inside zip", file));
+
+ LOG(LDEBUG, (file, "offset:", filePos.pos_in_zip_directory, "size:", fileInfo.uncompressed_size));
+
+ SetOffsetAndSize(filePos.pos_in_zip_directory, fileInfo.uncompressed_size);
+}