+bool wxFile::ReadAll(wxString *str, const wxMBConv& conv)
+{
+ wxCHECK_MSG( str, false, wxS("Output string must be non-NULL") );
+
+ ssize_t length = Length();
+ wxCHECK_MSG( (wxFileOffset)length == Length(), false, wxT("huge file not supported") );
+
+ wxCharBuffer buf(length);
+ char* p = buf.data();
+ for ( ;; )
+ {
+ static const ssize_t READSIZE = 4096;
+
+ ssize_t nread = Read(p, length > READSIZE ? READSIZE : length);
+ if ( nread == wxInvalidOffset )
+ return false;
+
+ p += nread;
+ if ( length <= nread )
+ break;
+
+ length -= nread;
+ }
+
+ *p = 0;
+
+ wxString strTmp(buf, conv);
+ str->swap(strTmp);
+
+ return true;
+}
+