CFileHelpers: Rework FileBuf handling

FileBuf: Reserve memory only when it is needed (copyFile)
copyFile: Reserve for small files, only as much memory as is required


Origin commit data
------------------
Branch: ni/coolstream
Commit: 6a9c08ae90
Author: Michael Liebmann <tuxcode.bbg@gmail.com>
Date: 2016-09-06 (Tue, 06 Sep 2016)



------------------
This commit was generated by Migit
This commit is contained in:
Michael Liebmann
2016-09-06 11:30:06 +02:00
parent b96a91a581
commit d214c7736c
2 changed files with 28 additions and 6 deletions

View File

@@ -535,8 +535,7 @@ std::string& htmlEntityDecode(std::string& text)
CFileHelpers::CFileHelpers()
{
FileBufSize = 0xFFFF;
FileBuf = new char[FileBufSize];
FileBufMaxSize = 0xFFFF;
doCopyFlag = true;
ConsoleQuiet = false;
clearDebugInfo();
@@ -544,8 +543,21 @@ CFileHelpers::CFileHelpers()
CFileHelpers::~CFileHelpers()
{
if (FileBuf != NULL)
delete [] FileBuf;
}
char* CFileHelpers::initFileBuf(char* buf, uint32_t size)
{
if (buf == NULL)
buf = new char[size];
return buf;
}
char* CFileHelpers::deleteFileBuf(char* buf)
{
if (buf != NULL)
delete [] buf;
buf = NULL;
return buf;
}
CFileHelpers* CFileHelpers::getInstance()
@@ -743,10 +755,13 @@ bool CFileHelpers::copyFile(const char *Src, const char *Dst, mode_t forceMode/*
return false;
}
char* FileBuf = NULL;
uint32_t block;
off64_t fsizeSrc64 = lseek64(fd1, 0, SEEK_END);
lseek64(fd1, 0, SEEK_SET);
if (fsizeSrc64 > 0x7FFFFFF0) { // > 2GB
uint32_t FileBufSize = FileBufMaxSize;
FileBuf = initFileBuf(FileBuf, FileBufSize);
off64_t fsize64 = fsizeSrc64;
block = FileBufSize;
//printf("#####[%s] fsizeSrc64: %lld 0x%010llX - large file\n", __FUNCTION__, fsizeSrc64, fsizeSrc64);
@@ -765,12 +780,15 @@ bool CFileHelpers::copyFile(const char *Src, const char *Dst, mode_t forceMode/*
if (fsizeSrc64 != fsizeDst64){
close(fd1);
close(fd2);
FileBuf = deleteFileBuf(FileBuf);
return false;
}
}
}
else { // < 2GB
off_t fsizeSrc = lseek(fd1, 0, SEEK_END);
uint32_t FileBufSize = (fsizeSrc < (off_t)FileBufMaxSize) ? fsizeSrc : FileBufMaxSize;
FileBuf = initFileBuf(FileBuf, FileBufSize);
lseek(fd1, 0, SEEK_SET);
off_t fsize = fsizeSrc;
block = FileBufSize;
@@ -790,6 +808,7 @@ bool CFileHelpers::copyFile(const char *Src, const char *Dst, mode_t forceMode/*
if (fsizeSrc != fsizeDst){
close(fd1);
close(fd2);
FileBuf = deleteFileBuf(FileBuf);
return false;
}
}
@@ -800,9 +819,11 @@ bool CFileHelpers::copyFile(const char *Src, const char *Dst, mode_t forceMode/*
if (!doCopyFlag) {
sync();
unlink(Dst);
FileBuf = deleteFileBuf(FileBuf);
return false;
}
FileBuf = deleteFileBuf(FileBuf);
return true;
}