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:
authorvng <viktor.govako@gmail.com>2013-03-04 22:03:47 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:51:34 +0300
commit987f5932aeb79f2700789497e1fc34c62915828f (patch)
tree7943379f587e6d7812d991c8b646357ce9d3e46b /coding
parent581c0df1b6ed881af26097043c3952a7dc61ad62 (diff)
- Factor out buffer size constant for files;
- Avoid copy paste; - Minor code style fixes;
Diffstat (limited to 'coding')
-rw-r--r--coding/coding.pro1
-rw-r--r--coding/coding_tests/zip_creator_test.cpp71
-rw-r--r--coding/constants.hpp3
-rw-r--r--coding/internal/file_data.cpp11
-rw-r--r--coding/zip_creator.cpp73
-rw-r--r--coding/zip_creator.hpp2
6 files changed, 79 insertions, 82 deletions
diff --git a/coding/coding.pro b/coding/coding.pro
index 88bbd56a13..b840d35f0b 100644
--- a/coding/coding.pro
+++ b/coding/coding.pro
@@ -93,3 +93,4 @@ HEADERS += \
uri.hpp \
zip_creator.hpp \
file_name_utils.hpp \
+ constants.hpp \
diff --git a/coding/coding_tests/zip_creator_test.cpp b/coding/coding_tests/zip_creator_test.cpp
index 2519b30632..8658227fef 100644
--- a/coding/coding_tests/zip_creator_test.cpp
+++ b/coding/coding_tests/zip_creator_test.cpp
@@ -1,69 +1,54 @@
#include "../../testing/testing.hpp"
-#include "../../map/framework.hpp"
-
#include "../../coding/zip_creator.hpp"
#include "../../coding/zip_reader.hpp"
#include "../../coding/internal/file_data.hpp"
-#include "../../coding/writer.hpp"
-
-#include "../../base/scope_guard.hpp"
-
-#include "../../platform/platform.hpp"
+#include "../../coding/file_writer.hpp"
+#include "../../coding/constants.hpp"
#include "../../std/string.hpp"
#include "../../std/vector.hpp"
-#include "../../std/iostream.hpp"
-UNIT_TEST(Create_Zip_From_Big_File)
-{
- string const name = "testfileforzip.txt";
+namespace
+{
+ void CreateAndTestZip(string const & filePath, string const & zipPath)
{
- my::FileData f(name, my::FileData::OP_WRITE_TRUNCATE);
- string z(1024*512 + 1, '1');
- f.Write(z.c_str(), z.size());
- }
-
- string const zipName = "testzip.zip";
+ TEST(CreateZipFromPathDeflatedAndDefaultCompression(filePath, zipPath), ());
- TEST(createZipFromPathDeflatedAndDefaultCompression(name, zipName), ());
+ vector<string> files;
+ ZipFileReader::FilesList(zipPath, files);
+ string const unzippedFile = "unzipped.tmp";
+ ZipFileReader::UnzipFile(zipPath, files[0], unzippedFile);
+ TEST(my::IsEqualFiles(filePath, unzippedFile), ());
+ TEST(my::DeleteFileX(filePath), ());
+ TEST(my::DeleteFileX(zipPath), ());
+ TEST(my::DeleteFileX(unzippedFile), ());
+ }
+}
- vector<string> files;
- ZipFileReader::FilesList(zipName, files);
- string const unzippedFile = "unzipped.tmp";
- ZipFileReader::UnzipFile(zipName, files[0], unzippedFile);
+UNIT_TEST(CreateZip_BigFile)
+{
+ string const name = "testfileforzip.txt";
+ {
+ FileWriter f(name);
+ string s(READ_FILE_BUFFER_SIZE + 1, '1');
+ f.Write(s.c_str(), s.size());
+ }
- TEST(my::IsEqualFiles(name, unzippedFile),());
- TEST(my::DeleteFileX(name), ());
- TEST(my::DeleteFileX(zipName), ());
- TEST(my::DeleteFileX(unzippedFile), ());
+ CreateAndTestZip(name, "testzip.zip");
}
-UNIT_TEST(Create_zip)
+UNIT_TEST(CreateZip_Smoke)
{
string const name = "testfileforzip.txt";
{
- my::FileData f(name, my::FileData::OP_WRITE_TRUNCATE);
+ FileWriter f(name);
f.Write(name.c_str(), name.size());
}
- string const zipName = "testzip.zip";
-
- TEST(createZipFromPathDeflatedAndDefaultCompression(name, zipName), ());
-
-
- vector<string> files;
- ZipFileReader::FilesList(zipName, files);
- string const unzippedFile = "unzipped.tmp";
- ZipFileReader::UnzipFile(zipName, files[0], unzippedFile);
-
-
- TEST(my::IsEqualFiles(name, unzippedFile),());
- TEST(my::DeleteFileX(name), ());
- TEST(my::DeleteFileX(zipName), ());
- TEST(my::DeleteFileX(unzippedFile), ());
+ CreateAndTestZip(name, "testzip.zip");
}
diff --git a/coding/constants.hpp b/coding/constants.hpp
new file mode 100644
index 0000000000..3c60abd7b9
--- /dev/null
+++ b/coding/constants.hpp
@@ -0,0 +1,3 @@
+#pragma once
+
+static const size_t READ_FILE_BUFFER_SIZE = 512 * 1024;
diff --git a/coding/internal/file_data.cpp b/coding/internal/file_data.cpp
index 5582b4f099..d70e41c0c2 100644
--- a/coding/internal/file_data.cpp
+++ b/coding/internal/file_data.cpp
@@ -2,6 +2,7 @@
#include "../reader.hpp" // For Reader exceptions.
#include "../writer.hpp" // For Writer exceptions.
+#include "../constants.hpp"
#include "../../base/exception.hpp"
#include "../../base/logging.hpp"
@@ -270,7 +271,7 @@ bool IsEqualFiles(string const & firstFile, string const & secondFile)
if (first.Size() != second.Size())
return false;
- size_t const bufSize = 512 * 1024;
+ size_t const bufSize = READ_FILE_BUFFER_SIZE;
vector<char> buf1, buf2;
buf1.resize(bufSize);
buf2.resize(bufSize);
@@ -279,15 +280,17 @@ bool IsEqualFiles(string const & firstFile, string const & secondFile)
while (currSize < fileSize)
{
- size_t toRead = fileSize - currSize;
- if (toRead > bufSize)
- toRead = bufSize;
+ size_t const toRead = min(bufSize, fileSize - currSize);
+
first.Read(currSize, &buf1[0], toRead);
second.Read(currSize, &buf2[0], toRead);
+
if (buf1 != buf2)
return false;
+
currSize += toRead;
}
+
return true;
}
diff --git a/coding/zip_creator.cpp b/coding/zip_creator.cpp
index a7eb06b9c2..557b6905f3 100644
--- a/coding/zip_creator.cpp
+++ b/coding/zip_creator.cpp
@@ -2,75 +2,80 @@
#include "../../coding/file_name_utils.hpp"
#include "../../coding/internal/file_data.hpp"
+#include "../../coding/constants.hpp"
#include "../../std/vector.hpp"
-#include "../../std/iostream.hpp"
#include "../../std/ctime.hpp"
+#include "../../std/algorithm.hpp"
#include "../../3party/zlib/contrib/minizip/zip.h"
-class ZipHandle
+namespace
{
-public:
- zipFile m_zipFile;
- ZipHandle(string const & filePath)
+ struct ZipHandle
{
- m_zipFile = zipOpen(filePath.c_str(), 0);
- }
- ~ZipHandle()
+ zipFile m_zipFile;
+ ZipHandle(string const & filePath)
+ {
+ m_zipFile = zipOpen(filePath.c_str(), 0);
+ }
+ ~ZipHandle()
+ {
+ if (m_zipFile)
+ zipClose(m_zipFile, NULL);
+ }
+ };
+
+ void CreateTMZip(tm_zip & res)
{
- if (m_zipFile)
- zipClose(m_zipFile, NULL);
+ time_t rawtime;
+ struct tm * timeinfo;
+ time ( &rawtime );
+ timeinfo = localtime ( &rawtime );
+ res.tm_sec = timeinfo->tm_sec;
+ res.tm_min = timeinfo->tm_min;
+ res.tm_hour = timeinfo->tm_hour;
+ res.tm_mday = timeinfo->tm_mday;
+ res.tm_mon = timeinfo->tm_mon;
+ res.tm_year = timeinfo->tm_year;
}
-};
-
-namespace
-{
-void CreateTMZip(tm_zip & res)
-{
- time_t rawtime;
- struct tm * timeinfo;
- time ( &rawtime );
- timeinfo = localtime ( &rawtime );
- res.tm_sec = timeinfo->tm_sec;
- res.tm_min = timeinfo->tm_min;
- res.tm_hour = timeinfo->tm_hour;
- res.tm_mday = timeinfo->tm_mday;
- res.tm_mon = timeinfo->tm_mon;
- res.tm_year = timeinfo->tm_year;
-}
}
-bool createZipFromPathDeflatedAndDefaultCompression(string const & filePath, string const & zipFilePath)
+bool CreateZipFromPathDeflatedAndDefaultCompression(string const & filePath, string const & zipFilePath)
{
ZipHandle zip(zipFilePath);
if (!zip.m_zipFile)
return false;
+
// Special syntax to initialize struct with zeroes
zip_fileinfo zipInfo = zip_fileinfo();
CreateTMZip(zipInfo.tmz_date);
string fileName = filePath;
my::GetNameFromFullPath(fileName);
- if (zipOpenNewFileInZip (zip.m_zipFile, fileName.c_str(), &zipInfo, NULL, 0, NULL, 0, "ZIP from MapsWithMe", Z_DEFLATED, Z_DEFAULT_COMPRESSION) < 0)
+ if (zipOpenNewFileInZip(zip.m_zipFile, fileName.c_str(), &zipInfo,
+ NULL, 0, NULL, 0, "ZIP from MapsWithMe", Z_DEFLATED, Z_DEFAULT_COMPRESSION) < 0)
+ {
return false;
+ }
my::FileData f(filePath, my::FileData::OP_READ);
- size_t const bufSize = 512 * 1024;
+ size_t const bufSize = READ_FILE_BUFFER_SIZE;
vector<char> buffer(bufSize);
size_t const fileSize = f.Size();
size_t currSize = 0;
while (currSize < fileSize)
{
- size_t toRead = fileSize - currSize;
- if (toRead > bufSize)
- toRead = bufSize;
+ size_t const toRead = min(bufSize, fileSize - currSize);
f.Read(currSize, &buffer[0], toRead);
- if (ZIP_OK != zipWriteInFileInZip (zip.m_zipFile, &buffer[0], toRead))
+
+ if (ZIP_OK != zipWriteInFileInZip(zip.m_zipFile, &buffer[0], toRead))
return false;
+
currSize += toRead;
}
+
return true;
}
diff --git a/coding/zip_creator.hpp b/coding/zip_creator.hpp
index 083fa533cb..54255cc31e 100644
--- a/coding/zip_creator.hpp
+++ b/coding/zip_creator.hpp
@@ -1,4 +1,4 @@
#include "../../std/string.hpp"
-bool createZipFromPathDeflatedAndDefaultCompression(string const & filePath, string const & zipFilePath);
+bool CreateZipFromPathDeflatedAndDefaultCompression(string const & filePath, string const & zipFilePath);