mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-29 00:11:14 +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
This commit is contained in:
@@ -535,8 +535,7 @@ std::string& htmlEntityDecode(std::string& text)
|
|||||||
|
|
||||||
CFileHelpers::CFileHelpers()
|
CFileHelpers::CFileHelpers()
|
||||||
{
|
{
|
||||||
FileBufSize = 0xFFFF;
|
FileBufMaxSize = 0xFFFF;
|
||||||
FileBuf = new char[FileBufSize];
|
|
||||||
doCopyFlag = true;
|
doCopyFlag = true;
|
||||||
ConsoleQuiet = false;
|
ConsoleQuiet = false;
|
||||||
clearDebugInfo();
|
clearDebugInfo();
|
||||||
@@ -544,8 +543,21 @@ CFileHelpers::CFileHelpers()
|
|||||||
|
|
||||||
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()
|
CFileHelpers* CFileHelpers::getInstance()
|
||||||
@@ -743,10 +755,13 @@ bool CFileHelpers::copyFile(const char *Src, const char *Dst, mode_t forceMode/*
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* FileBuf = NULL;
|
||||||
uint32_t block;
|
uint32_t block;
|
||||||
off64_t fsizeSrc64 = lseek64(fd1, 0, SEEK_END);
|
off64_t fsizeSrc64 = lseek64(fd1, 0, SEEK_END);
|
||||||
lseek64(fd1, 0, SEEK_SET);
|
lseek64(fd1, 0, SEEK_SET);
|
||||||
if (fsizeSrc64 > 0x7FFFFFF0) { // > 2GB
|
if (fsizeSrc64 > 0x7FFFFFF0) { // > 2GB
|
||||||
|
uint32_t FileBufSize = FileBufMaxSize;
|
||||||
|
FileBuf = initFileBuf(FileBuf, FileBufSize);
|
||||||
off64_t fsize64 = fsizeSrc64;
|
off64_t fsize64 = fsizeSrc64;
|
||||||
block = FileBufSize;
|
block = FileBufSize;
|
||||||
//printf("#####[%s] fsizeSrc64: %lld 0x%010llX - large file\n", __FUNCTION__, fsizeSrc64, fsizeSrc64);
|
//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){
|
if (fsizeSrc64 != fsizeDst64){
|
||||||
close(fd1);
|
close(fd1);
|
||||||
close(fd2);
|
close(fd2);
|
||||||
|
FileBuf = deleteFileBuf(FileBuf);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // < 2GB
|
else { // < 2GB
|
||||||
off_t fsizeSrc = lseek(fd1, 0, SEEK_END);
|
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);
|
lseek(fd1, 0, SEEK_SET);
|
||||||
off_t fsize = fsizeSrc;
|
off_t fsize = fsizeSrc;
|
||||||
block = FileBufSize;
|
block = FileBufSize;
|
||||||
@@ -790,6 +808,7 @@ bool CFileHelpers::copyFile(const char *Src, const char *Dst, mode_t forceMode/*
|
|||||||
if (fsizeSrc != fsizeDst){
|
if (fsizeSrc != fsizeDst){
|
||||||
close(fd1);
|
close(fd1);
|
||||||
close(fd2);
|
close(fd2);
|
||||||
|
FileBuf = deleteFileBuf(FileBuf);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -800,9 +819,11 @@ bool CFileHelpers::copyFile(const char *Src, const char *Dst, mode_t forceMode/*
|
|||||||
if (!doCopyFlag) {
|
if (!doCopyFlag) {
|
||||||
sync();
|
sync();
|
||||||
unlink(Dst);
|
unlink(Dst);
|
||||||
|
FileBuf = deleteFileBuf(FileBuf);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FileBuf = deleteFileBuf(FileBuf);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -84,10 +84,11 @@ struct helpersDebugInfo {
|
|||||||
class CFileHelpers
|
class CFileHelpers
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
unsigned long FileBufSize;
|
uint32_t FileBufMaxSize;
|
||||||
char *FileBuf;
|
|
||||||
int fd1, fd2;
|
int fd1, fd2;
|
||||||
|
|
||||||
|
char* initFileBuf(char* buf, uint32_t size);
|
||||||
|
char* deleteFileBuf(char* buf);
|
||||||
bool ConsoleQuiet;
|
bool ConsoleQuiet;
|
||||||
helpersDebugInfo DebugInfo;
|
helpersDebugInfo DebugInfo;
|
||||||
void setDebugInfo(const char* msg, const char* file, const char* func, int line);
|
void setDebugInfo(const char* msg, const char* file, const char* func, int line);
|
||||||
|
Reference in New Issue
Block a user