mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Add a hacky check for text file size in ReadFileToString. Fixes issue 6455.
This commit is contained in:
@ -885,8 +885,34 @@ bool ReadFileToString(bool text_file, const char *filename, std::string &str)
|
|||||||
if (!f)
|
if (!f)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
size_t read_size;
|
||||||
str.resize(GetSize(f));
|
str.resize(GetSize(f));
|
||||||
return file.ReadArray(&str[0], str.size());
|
bool retval = file.ReadArray(&str[0], str.size(), &read_size);
|
||||||
|
|
||||||
|
// On Windows, reading a text file automatically translates \r\n to \n.
|
||||||
|
// This means we will read less characters than the expected size of the
|
||||||
|
// file. In that case, ignore the return value and count ourselves.
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (text_file)
|
||||||
|
{
|
||||||
|
size_t count = 0;
|
||||||
|
for (size_t i = 0; i < read_size; ++i)
|
||||||
|
{
|
||||||
|
if (str[i] == '\n')
|
||||||
|
count += 2;
|
||||||
|
else
|
||||||
|
count += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count != str.size())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
str.resize(read_size);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
IOFile::IOFile()
|
IOFile::IOFile()
|
||||||
|
@ -161,11 +161,15 @@ public:
|
|||||||
bool Close();
|
bool Close();
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool ReadArray(T* data, size_t length)
|
bool ReadArray(T* data, size_t length, size_t* pReadBytes = NULL)
|
||||||
{
|
{
|
||||||
if (!IsOpen() || length != std::fread(data, sizeof(T), length, m_file))
|
size_t read_bytes = 0;
|
||||||
|
if (!IsOpen() || length != (read_bytes = std::fread(data, sizeof(T), length, m_file)))
|
||||||
m_good = false;
|
m_good = false;
|
||||||
|
|
||||||
|
if (pReadBytes)
|
||||||
|
*pReadBytes = read_bytes;
|
||||||
|
|
||||||
return m_good;
|
return m_good;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user