Fix sign bug

Prevent blockSize from exceeding file's length
This commit is contained in:
Phillip Stephens 2015-07-09 20:46:30 -07:00
parent a7c180db00
commit 8d3524b1f6
2 changed files with 9 additions and 5 deletions

View File

@ -12,7 +12,7 @@ namespace io
class FileReader : public IStreamReader
{
public:
FileReader(const std::string& filename, atUint32 cacheSize = (32 * 1024));
FileReader(const std::string& filename, atInt32 cacheSize = (32 * 1024));
virtual ~FileReader();
inline const std::string& filename() const
{return m_filename;}
@ -27,12 +27,12 @@ public:
atUint64 length() const;
atUint64 readUBytesToBuf(void* buf, atUint64 len);
void setCacheSize(const atUint32 blockSize);
void setCacheSize(const atInt32 blockSize);
protected:
std::string m_filename;
FILE* m_fileHandle;
std::unique_ptr<atUint8[]> m_cacheData;
atUint32 m_blockSize;
atInt32 m_blockSize;
atInt32 m_curBlock;
atUint64 m_offset;
};

View File

@ -14,7 +14,7 @@ namespace Athena
{
namespace io
{
FileReader::FileReader(const std::string& filename, atUint32 cacheSize)
FileReader::FileReader(const std::string& filename, atInt32 cacheSize)
: m_filename(filename),
m_fileHandle(nullptr),
m_cacheData(nullptr),
@ -145,9 +145,13 @@ atUint64 FileReader::readUBytesToBuf(void* buf, atUint64 len)
}
}
void FileReader::setCacheSize(const atUint32 blockSize)
void FileReader::setCacheSize(const atInt32 blockSize)
{
m_blockSize = blockSize;
if (m_blockSize > length())
m_blockSize = length();
m_curBlock = -1;
if (m_blockSize > 0)
m_cacheData.reset(new atUint8[m_blockSize]);