Skip to content

Commit

Permalink
Changes to address allocation issues see the following submission for…
Browse files Browse the repository at this point in the history
  • Loading branch information
figment committed Feb 8, 2014
1 parent f4ae9cd commit 0e78c22
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 12 deletions.
8 changes: 4 additions & 4 deletions source/Irrlicht/CFileSystem.cpp
Expand Up @@ -125,12 +125,12 @@ IReadFile* CFileSystem::createAndOpenFile(const io::path& filename)

//! Creates an IReadFile interface for treating memory like a file.
IReadFile* CFileSystem::createMemoryReadFile(const void* memory, s32 len,
const io::path& fileName, bool deleteMemoryWhenDropped)
const io::path& fileName, bool deleteMemoryWhenDropped, bool makeLocalCopy)
{
if (!memory)
return 0;
else
return new CMemoryReadFile(memory, len, fileName, deleteMemoryWhenDropped);
return new CMemoryReadFile(memory, len, fileName, deleteMemoryWhenDropped, makeLocalCopy);
}


Expand All @@ -147,12 +147,12 @@ IReadFile* CFileSystem::createLimitReadFile(const io::path& fileName,

//! Creates an IReadFile interface for treating memory like a file.
IWriteFile* CFileSystem::createMemoryWriteFile(void* memory, s32 len,
const io::path& fileName, bool deleteMemoryWhenDropped)
const io::path& fileName, bool deleteMemoryWhenDropped, bool makeLocalCopy)
{
if (!memory)
return 0;
else
return new CMemoryWriteFile(memory, len, fileName, deleteMemoryWhenDropped);
return new CMemoryWriteFile(memory, len, fileName, deleteMemoryWhenDropped, makeLocalCopy);
}


Expand Down
4 changes: 2 additions & 2 deletions source/Irrlicht/CFileSystem.h
Expand Up @@ -34,13 +34,13 @@ class CFileSystem : public IFileSystem
virtual IReadFile* createAndOpenFile(const io::path& filename) _IRR_OVERRIDE_;

//! Creates an IReadFile interface for accessing memory like a file.
virtual IReadFile* createMemoryReadFile(const void* memory, s32 len, const io::path& fileName, bool deleteMemoryWhenDropped = false) _IRR_OVERRIDE_;
virtual IReadFile* createMemoryReadFile(const void* memory, s32 len, const io::path& fileName, bool deleteMemoryWhenDropped = false, bool makeLocalCopy=false) _IRR_OVERRIDE_;

//! Creates an IReadFile interface for accessing files inside files
virtual IReadFile* createLimitReadFile(const io::path& fileName, IReadFile* alreadyOpenedFile, long pos, long areaSize) _IRR_OVERRIDE_;

//! Creates an IWriteFile interface for accessing memory like a file.
virtual IWriteFile* createMemoryWriteFile(void* memory, s32 len, const io::path& fileName, bool deleteMemoryWhenDropped=false) _IRR_OVERRIDE_;
virtual IWriteFile* createMemoryWriteFile(void* memory, s32 len, const io::path& fileName, bool deleteMemoryWhenDropped=false, bool makeLocalCopy=false) _IRR_OVERRIDE_;

//! Opens a file for write access.
virtual IWriteFile* createAndWriteFile(const io::path& filename, bool append=false) _IRR_OVERRIDE_;
Expand Down
25 changes: 21 additions & 4 deletions source/Irrlicht/CMemoryFile.cpp
Expand Up @@ -10,9 +10,26 @@ namespace irr
namespace io
{

//! copy routine to allow for local allocator to hold memory
const void * dupe(const void *m, long len, bool clone) {
if (clone) {
c8* b = new c8[len];
if (m) memcpy(b, m, len);
return b;
}
return m;
}
void * dupe(void *m, long len, bool clone) {
if (clone) {
c8* b = new c8[len];
if (m) memcpy(b, m, len);
return b;
}
return m;
}

CMemoryReadFile::CMemoryReadFile(const void* memory, long len, const io::path& fileName, bool d)
: Buffer(memory), Len(len), Pos(0), Filename(fileName), deleteMemoryWhenDropped(d)
CMemoryReadFile::CMemoryReadFile(const void* memory, long len, const io::path& fileName, bool d, bool c)
: Buffer(dupe(memory,len,c)), Len(len), Pos(0), Filename(fileName), deleteMemoryWhenDropped(d||c)
{
#ifdef _DEBUG
setDebugName("CMemoryReadFile");
Expand Down Expand Up @@ -90,8 +107,8 @@ const io::path& CMemoryReadFile::getFileName() const
}


CMemoryWriteFile::CMemoryWriteFile(void* memory, long len, const io::path& fileName, bool d)
: Buffer(memory), Len(len), Pos(0), Filename(fileName), deleteMemoryWhenDropped(d)
CMemoryWriteFile::CMemoryWriteFile(void* memory, long len, const io::path& fileName, bool d, bool c)
: Buffer(dupe(memory,len,c)), Len(len), Pos(0), Filename(fileName), deleteMemoryWhenDropped(d||c)
{
#ifdef _DEBUG
setDebugName("CMemoryWriteFile");
Expand Down
4 changes: 2 additions & 2 deletions source/Irrlicht/CMemoryFile.h
Expand Up @@ -23,7 +23,7 @@ namespace io
public:

//! Constructor
CMemoryReadFile(const void* memory, long len, const io::path& fileName, bool deleteMemoryWhenDropped);
CMemoryReadFile(const void* memory, long len, const io::path& fileName, bool deleteMemoryWhenDropped, bool makeLocalCopy = false);

//! Destructor
virtual ~CMemoryReadFile();
Expand Down Expand Up @@ -60,7 +60,7 @@ namespace io
public:

//! Constructor
CMemoryWriteFile(void* memory, long len, const io::path& fileName, bool deleteMemoryWhenDropped);
CMemoryWriteFile(void* memory, long len, const io::path& fileName, bool deleteMemoryWhenDropped, bool makeLocalCopy = false);

//! Destructor
virtual ~CMemoryWriteFile();
Expand Down

0 comments on commit 0e78c22

Please sign in to comment.