mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-neutrino.git
synced 2025-08-27 15:32:52 +02:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user