X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/11846af3385acbcc587f507d69bd1d7bbf28d7f6..d45318b8b6857ab6159b37c2f3ddce6a5f68be28:/src/common/ffile.cpp diff --git a/src/common/ffile.cpp b/src/common/ffile.cpp index 7887d45fe5..42a43f2cb4 100644 --- a/src/common/ffile.cpp +++ b/src/common/ffile.cpp @@ -103,36 +103,28 @@ bool wxFFile::Close() // read/write // ---------------------------------------------------------------------------- -bool wxFFile::ReadAll(wxString *str) +bool wxFFile::ReadAll(wxString *str, wxMBConv& conv) { wxCHECK_MSG( str, false, wxT("invalid parameter") ); wxCHECK_MSG( IsOpened(), false, wxT("can't read from closed file") ); wxCHECK_MSG( Length() >= 0, false, wxT("invalid length") ); size_t length = (size_t)Length(); - wxCHECK_MSG( length == Length(), false, wxT("huge file not supported") ); + wxCHECK_MSG( (wxFileOffset)length == Length(), false, wxT("huge file not supported") ); clearerr(m_fp); - str->Empty(); - str->Alloc(length); - - wxChar buf[1024]; - static const size_t nSize = WXSIZEOF(buf) - 1; // -1 for trailing '\0' - while ( !Eof() ) + const size_t fileLen = Length(); + wxCharBuffer buf(fileLen + 1); + if ( (fread(buf.data(), sizeof(char), fileLen, m_fp) < fileLen) || Error() ) { - size_t nRead = fread(buf, sizeof(wxChar), nSize, m_fp); - if ( (nRead < nSize) && Error() ) - { - wxLogSysError(_("Read error on file '%s'"), m_name.c_str()); - - return false; - } - //else: just EOF + wxLogSysError(_("Read error on file '%s'"), m_name.c_str()); - buf[nRead] = 0; - *str += buf; + return false; } + buf.data()[fileLen] = 0; + *str = wxString(buf, conv); + return true; }