X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/03647350fc7cd141953c72e0284e928847d30f44..931d6a47c32a5b4c283243cb553ce71ee2b535d5:/src/common/ffile.cpp diff --git a/src/common/ffile.cpp b/src/common/ffile.cpp index 0ca910ed08..0f479565d2 100644 --- a/src/common/ffile.cpp +++ b/src/common/ffile.cpp @@ -1,10 +1,9 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: ffile.cpp +// Name: src/common/ffile.cpp // Purpose: wxFFile encapsulates "FILE *" IO stream // Author: Vadim Zeitlin // Modified by: // Created: 14.07.99 -// RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -42,25 +41,13 @@ // implementation // ============================================================================ -// ---------------------------------------------------------------------------- -// seek and tell with large file support if available -// ---------------------------------------------------------------------------- - -#ifdef HAVE_FSEEKO -# define wxFseek fseeko -# define wxFtell ftello -#else -# define wxFseek fseek -# define wxFtell ftell -#endif - // ---------------------------------------------------------------------------- // opening the file // ---------------------------------------------------------------------------- wxFFile::wxFFile(const wxString& filename, const wxString& mode) { - Detach(); + m_fp = NULL; (void)Open(filename, mode); } @@ -69,16 +56,16 @@ bool wxFFile::Open(const wxString& filename, const wxString& mode) { wxASSERT_MSG( !m_fp, wxT("should close or detach the old file first") ); - m_fp = wxFopen(filename, mode); + FILE* const fp = wxFopen(filename, mode); - if ( !m_fp ) + if ( !fp ) { wxLogSysError(_("can't open file '%s'"), filename); return false; } - m_name = filename; + Attach(fp, filename); return true; } @@ -94,7 +81,7 @@ bool wxFFile::Close() return false; } - Detach(); + m_fp = NULL; } return true; @@ -114,12 +101,12 @@ bool wxFFile::ReadAll(wxString *str, const wxMBConv& conv) clearerr(m_fp); - wxCharBuffer buf(length + 1); + wxCharBuffer buf(length); // note that real length may be less than file length for text files with DOS EOLs // ('\r's get dropped by CRT when reading which means that we have // realLen = fileLen - numOfLinesInTheFile) - length = fread(buf.data(), sizeof(char), length, m_fp); + length = fread(buf.data(), 1, length, m_fp); if ( Error() ) { @@ -129,7 +116,9 @@ bool wxFFile::ReadAll(wxString *str, const wxMBConv& conv) } buf.data()[length] = 0; - *str = wxString(buf, conv); + + wxString strTmp(buf, conv); + str->swap(strTmp); return true; } @@ -215,7 +204,7 @@ bool wxFFile::Seek(wxFileOffset ofs, wxSeekMode mode) break; } -#ifndef HAVE_FSEEKO +#ifndef wxHAS_LARGE_FFILES if ((long)ofs != ofs) { wxLogError(_("Seek error on file '%s' (large files not supported by stdio)"), m_name.c_str()); @@ -256,7 +245,7 @@ wxFileOffset wxFFile::Length() const wxCHECK_MSG( IsOpened(), wxInvalidOffset, wxT("wxFFile::Length(): file is closed!") ); - wxFFile& self = *(wxFFile *)this; // const_cast + wxFFile& self = *const_cast(this); wxFileOffset posOld = Tell(); if ( posOld != wxInvalidOffset )