summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2017-03-29 18:31:00 +0300
committerAndrei Karas <akaras@inbox.ru>2017-03-29 18:31:00 +0300
commit7132f71cf010e4f13eb27c1a24d8878aa984b43f (patch)
tree330ad08a5ae15d0f4dc2d13461de1d5a47a69fe6
parentd9c0d1c3b2800b0c995393426b65a031203ca2f0 (diff)
downloadmv-7132f71cf010e4f13eb27c1a24d8878aa984b43f.tar.gz
mv-7132f71cf010e4f13eb27c1a24d8878aa984b43f.tar.bz2
mv-7132f71cf010e4f13eb27c1a24d8878aa984b43f.tar.xz
mv-7132f71cf010e4f13eb27c1a24d8878aa984b43f.zip
Remove extra memory copy in VirtFs::loadFile.
Also add const into VirtFs::loadFile.
-rw-r--r--src/fs/virtfs/virtfs.cpp8
-rw-r--r--src/fs/virtfs/virtfs.h4
-rw-r--r--src/fs/virtfs/virtfs1_unittest.cc14
-rw-r--r--src/fs/virtfs/virtfsdir.cpp6
-rw-r--r--src/fs/virtfs/virtfsdir.h6
-rw-r--r--src/fs/virtfs/virtfsfuncs.h6
-rw-r--r--src/fs/virtfs/virtfstools.cpp4
-rw-r--r--src/fs/virtfs/virtfszip.cpp13
-rw-r--r--src/fs/virtfs/virtfszip.h6
-rw-r--r--src/gui/windows/updaterwindow.cpp2
-rw-r--r--src/integrity_unittest.cc2
-rw-r--r--src/utils/translation/poparser.cpp2
-rw-r--r--src/utils/translation/translationmanager.cpp3
-rw-r--r--src/utils/xml/libxml.cpp4
-rw-r--r--src/utils/xml/pugixml.cpp4
-rw-r--r--src/utils/xml/tinyxml2.cpp4
16 files changed, 44 insertions, 44 deletions
diff --git a/src/fs/virtfs/virtfs.cpp b/src/fs/virtfs/virtfs.cpp
index 9d1432270..d9423f66e 100644
--- a/src/fs/virtfs/virtfs.cpp
+++ b/src/fs/virtfs/virtfs.cpp
@@ -562,8 +562,8 @@ namespace VirtFs
return file->funcs->eof(file);
}
- char *loadFile(std::string filename,
- int &restrict fileSize)
+ const char *loadFile(std::string filename,
+ int &restrict fileSize)
{
prepareFsPath(filename);
if (checkPath(filename) == false)
@@ -575,7 +575,9 @@ namespace VirtFs
FOR_EACH (std::vector<VirtFsEntry*>::const_iterator, it, mEntries)
{
VirtFsEntry *const entry = *it;
- char *const buf = entry->funcs->loadFile(entry, filename, fileSize);
+ const char *const buf = entry->funcs->loadFile(entry,
+ filename,
+ fileSize);
if (buf != nullptr)
return buf;
}
diff --git a/src/fs/virtfs/virtfs.h b/src/fs/virtfs/virtfs.h
index e09d6c6ac..ca74206e8 100644
--- a/src/fs/virtfs/virtfs.h
+++ b/src/fs/virtfs/virtfs.h
@@ -93,8 +93,8 @@ namespace VirtFs
bool mountDirSilent2(std::string newDir,
const Append append);
#endif // UNITTESTS
- char *loadFile(std::string filename,
- int &restrict fileSize);
+ const char *loadFile(std::string filename,
+ int &restrict fileSize);
} // namespace VirtFs
extern const char *dirSeparator;
diff --git a/src/fs/virtfs/virtfs1_unittest.cc b/src/fs/virtfs/virtfs1_unittest.cc
index ee8e97e3e..a48f9829c 100644
--- a/src/fs/virtfs/virtfs1_unittest.cc
+++ b/src/fs/virtfs/virtfs1_unittest.cc
@@ -1433,8 +1433,8 @@ TEST_CASE("VirtFs1 loadFile1")
VirtFs::mountDir(prefix + "data",
Append_false);
- char *const buffer = VirtFs::loadFile("test/test.txt", fileSize);
- REQUIRE(static_cast<void*>(buffer) != nullptr);
+ const char *const buffer = VirtFs::loadFile("test/test.txt", fileSize);
+ REQUIRE(static_cast<const void*>(buffer) != nullptr);
REQUIRE(fileSize == 23);
REQUIRE(strncmp(buffer, "test line 1\ntest line 2", 23) == 0);
delete [] buffer;
@@ -1459,8 +1459,9 @@ TEST_CASE("VirtFs1 loadFile2")
SECTION("test 1")
{
- char *restrict buffer = VirtFs::loadFile("dir2//test.txt", fileSize);
- REQUIRE(static_cast<void*>(buffer) != nullptr);
+ const char *restrict buffer = VirtFs::loadFile("dir2//test.txt",
+ fileSize);
+ REQUIRE(static_cast<const void*>(buffer) != nullptr);
REQUIRE(fileSize == 23);
REQUIRE(strncmp(buffer, "test line 1\ntest line 2", 23) == 0);
delete [] buffer;
@@ -1468,8 +1469,9 @@ TEST_CASE("VirtFs1 loadFile2")
SECTION("test 2")
{
- char *restrict buffer = VirtFs::loadFile("dir2\\/test.txt", fileSize);
- REQUIRE(static_cast<void*>(buffer) != nullptr);
+ const char *restrict buffer = VirtFs::loadFile("dir2\\/test.txt",
+ fileSize);
+ REQUIRE(static_cast<const void*>(buffer) != nullptr);
REQUIRE(fileSize == 23);
REQUIRE(strncmp(buffer, "test line 1\ntest line 2", 23) == 0);
delete [] buffer;
diff --git a/src/fs/virtfs/virtfsdir.cpp b/src/fs/virtfs/virtfsdir.cpp
index 923d1409d..b6f197ae3 100644
--- a/src/fs/virtfs/virtfsdir.cpp
+++ b/src/fs/virtfs/virtfsdir.cpp
@@ -443,9 +443,9 @@ namespace VirtFsDir
return pos < 0 || len < 0 || pos >= len;
}
- char *loadFile(VirtFsEntry *restrict const entry,
- const std::string &restrict filename,
- int &restrict fileSize)
+ const char *loadFile(VirtFsEntry *restrict const entry,
+ const std::string &restrict filename,
+ int &restrict fileSize)
{
VirtDirEntry *const dirEntry = static_cast<VirtDirEntry*>(entry);
const std::string path = entry->root + filename;
diff --git a/src/fs/virtfs/virtfsdir.h b/src/fs/virtfs/virtfsdir.h
index 985cc5dc2..37e472a12 100644
--- a/src/fs/virtfs/virtfsdir.h
+++ b/src/fs/virtfs/virtfsdir.h
@@ -82,9 +82,9 @@ namespace VirtFsDir
int seek(VirtFile *restrict const file,
const uint64_t pos);
int eof(VirtFile *restrict const file);
- char *loadFile(VirtFsEntry *restrict const entry,
- const std::string &restrict fileName,
- int &restrict fileSize);
+ const char *loadFile(VirtFsEntry *restrict const entry,
+ const std::string &restrict fileName,
+ int &restrict fileSize);
} // namespace VirtFsDir
#endif // UTILS_VIRTFSDIR_H
diff --git a/src/fs/virtfs/virtfsfuncs.h b/src/fs/virtfs/virtfsfuncs.h
index 05b74cc7d..21b7a3220 100644
--- a/src/fs/virtfs/virtfsfuncs.h
+++ b/src/fs/virtfs/virtfsfuncs.h
@@ -84,9 +84,9 @@ struct VirtFsFuncs final
VirtFile *(*openAppend) (VirtFsEntry *restrict const entry,
const std::string &filename);
int (*eof) (VirtFile *restrict const file);
- char *(*loadFile) (VirtFsEntry *restrict const entry,
- const std::string &restrict fileName,
- int &restrict fileSize);
+ const char *(*loadFile) (VirtFsEntry *restrict const entry,
+ const std::string &restrict fileName,
+ int &restrict fileSize);
};
#endif // UTILS_VIRTFSFUNCS_H
diff --git a/src/fs/virtfs/virtfstools.cpp b/src/fs/virtfs/virtfstools.cpp
index cc11f5022..8bcc0d065 100644
--- a/src/fs/virtfs/virtfstools.cpp
+++ b/src/fs/virtfs/virtfstools.cpp
@@ -159,7 +159,7 @@ namespace VirtFs
std::string loadTextFileString(const std::string &fileName)
{
int contentsLength;
- char *fileContents = VirtFs::loadFile(fileName, contentsLength);
+ const char *fileContents = VirtFs::loadFile(fileName, contentsLength);
if (!fileContents)
{
@@ -175,7 +175,7 @@ namespace VirtFs
StringVect &lines)
{
int contentsLength;
- char *fileContents = VirtFs::loadFile(fileName, contentsLength);
+ const char *fileContents = VirtFs::loadFile(fileName, contentsLength);
if (!fileContents)
{
diff --git a/src/fs/virtfs/virtfszip.cpp b/src/fs/virtfs/virtfszip.cpp
index 62ad591ae..d344a4c64 100644
--- a/src/fs/virtfs/virtfszip.cpp
+++ b/src/fs/virtfs/virtfszip.cpp
@@ -336,9 +336,9 @@ namespace VirtFsZip
return file->mPos >= file->mSize;
}
- char *loadFile(VirtFsEntry *restrict const entry,
- const std::string &restrict filename,
- int &restrict fileSize)
+ const char *loadFile(VirtFsEntry *restrict const entry,
+ const std::string &restrict filename,
+ int &restrict fileSize)
{
VirtZipEntry *const zipEntry = static_cast<VirtZipEntry*>(entry);
FOR_EACH (std::vector<ZipLocalHeader*>::const_iterator,
@@ -357,12 +357,7 @@ namespace VirtFsZip
filename.c_str());
fileSize = header->uncompressSize;
- // Allocate memory and load the file
- char *restrict const buffer = new char[fileSize];
- if (fileSize > 0)
- buffer[fileSize - 1] = 0;
- memcpy(buffer, buf, fileSize);
- return buffer;
+ return reinterpret_cast<const char*>(buf);
}
}
return nullptr;
diff --git a/src/fs/virtfs/virtfszip.h b/src/fs/virtfs/virtfszip.h
index 77196a72b..bf2d75f3a 100644
--- a/src/fs/virtfs/virtfszip.h
+++ b/src/fs/virtfs/virtfszip.h
@@ -71,9 +71,9 @@ namespace VirtFsZip
int seek(VirtFile *restrict const file,
const uint64_t pos);
int eof(VirtFile *restrict const file);
- char *loadFile(VirtFsEntry *restrict const entry,
- const std::string &restrict fileName,
- int &restrict fileSize);
+ const char *loadFile(VirtFsEntry *restrict const entry,
+ const std::string &restrict fileName,
+ int &restrict fileSize);
} // namespace VirtFsZip
#endif // UTILS_VIRTFSZIP_H
diff --git a/src/gui/windows/updaterwindow.cpp b/src/gui/windows/updaterwindow.cpp
index 082db75cd..6ef065eed 100644
--- a/src/gui/windows/updaterwindow.cpp
+++ b/src/gui/windows/updaterwindow.cpp
@@ -1069,7 +1069,7 @@ bool UpdaterWindow::validateFile(const std::string &filePath,
unsigned long UpdaterWindow::getFileHash(const std::string &filePath)
{
int size = 0;
- char *const buf = VirtFs::loadFile(filePath, size);
+ const char *const buf = VirtFs::loadFile(filePath, size);
if (buf == nullptr)
return 0;
unsigned long res = Net::Download::adlerBuffer(buf, size);
diff --git a/src/integrity_unittest.cc b/src/integrity_unittest.cc
index aea7fe073..31157b0b6 100644
--- a/src/integrity_unittest.cc
+++ b/src/integrity_unittest.cc
@@ -76,7 +76,7 @@ static bool compareBuffers(const unsigned char *const buf2)
{
bool isCorrect(true);
int sz = 0;
- unsigned char *buf1 = reinterpret_cast<unsigned char*>(
+ const unsigned char *buf1 = reinterpret_cast<const unsigned char*>(
VirtFs::loadFile("hide.png", sz));
REQUIRE(buf1 != nullptr);
REQUIRE(sz == 368);
diff --git a/src/utils/translation/poparser.cpp b/src/utils/translation/poparser.cpp
index 6ac1221a9..af436b7de 100644
--- a/src/utils/translation/poparser.cpp
+++ b/src/utils/translation/poparser.cpp
@@ -46,7 +46,7 @@ PoParser::PoParser() :
void PoParser::openFile(const std::string &name)
{
int size;
- char *buf = VirtFs::loadFile(getFileName(name), size);
+ const char *buf = VirtFs::loadFile(getFileName(name), size);
if (buf)
{
diff --git a/src/utils/translation/translationmanager.cpp b/src/utils/translation/translationmanager.cpp
index 12c5519c4..6acde15d6 100644
--- a/src/utils/translation/translationmanager.cpp
+++ b/src/utils/translation/translationmanager.cpp
@@ -93,7 +93,8 @@ bool TranslationManager::translateFile(const std::string &fileName,
return false;
int contentsLength;
- char *fileContents = VirtFs::loadFile(fileName, contentsLength);
+ const char *fileContents = VirtFs::loadFile(fileName,
+ contentsLength);
if (!fileContents)
{
diff --git a/src/utils/xml/libxml.cpp b/src/utils/xml/libxml.cpp
index ccb3aca39..f7319f7ee 100644
--- a/src/utils/xml/libxml.cpp
+++ b/src/utils/xml/libxml.cpp
@@ -98,9 +98,9 @@ namespace XML
valid = true;
if (useResman == UseVirtFs_true)
{
- data = VirtFs::loadFile(
+ data = const_cast<char*>(VirtFs::loadFile(
filename.c_str(),
- size);
+ size));
}
else
{
diff --git a/src/utils/xml/pugixml.cpp b/src/utils/xml/pugixml.cpp
index 1b5a3278e..7ad2779cd 100644
--- a/src/utils/xml/pugixml.cpp
+++ b/src/utils/xml/pugixml.cpp
@@ -76,9 +76,9 @@ namespace XML
valid = true;
if (useResman == UseVirtFs_true)
{
- data = VirtFs::loadFile(
+ data = const_cast<char*>(VirtFs::loadFile(
filename.c_str(),
- size);
+ size));
}
else
{
diff --git a/src/utils/xml/tinyxml2.cpp b/src/utils/xml/tinyxml2.cpp
index c88930828..214d08f42 100644
--- a/src/utils/xml/tinyxml2.cpp
+++ b/src/utils/xml/tinyxml2.cpp
@@ -68,9 +68,9 @@ namespace XML
valid = true;
if (useResman == UseVirtFs_true)
{
- data = VirtFs::loadFile(
+ data = const_cast<char*>(VirtFs::loadFile(
filename.c_str(),
- size);
+ size));
}
else
{