X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b494c48b31885ee0d9cd91e7931ac837e00144a0..068b764a5a7cc2929b1fd8ea5643f43b5cbc8762:/src/common/fileconf.cpp diff --git a/src/common/fileconf.cpp b/src/common/fileconf.cpp index a4c5629b0b..2cfdd601b5 100644 --- a/src/common/fileconf.cpp +++ b/src/common/fileconf.cpp @@ -292,7 +292,10 @@ wxString wxFileConfig::GetGlobalDir() // There's no such thing as global cfg dir in MS-DOS, let's return // current directory (FIXME_MGL?) return wxT(".\\"); +#elif defined(__WXWINCE__) + strDir = wxT("\\Windows\\"); #else // Windows + wxChar szWinDir[MAX_PATH]; ::GetWindowsDirectory(szWinDir, MAX_PATH); @@ -502,7 +505,12 @@ wxFileConfig::wxFileConfig(wxInputStream &inStream, wxMBConv& conv) break; } - strTmp.append(wxConvertMB2WX(buf), inStream.LastRead()); + // FIXME: this is broken because if we have part of multibyte + // character in the buffer (and another part hasn't been + // read yet) we're going to lose data because of conversion + // errors + buf[inStream.LastRead()] = '\0'; + strTmp += conv.cMB2WX(buf); } while ( !inStream.Eof() ); @@ -540,6 +548,7 @@ wxFileConfig::wxFileConfig(wxInputStream &inStream, wxMBConv& conv) Parse(memText, true /* local */); SetRootPath(); + ResetDirty(); } #endif // wxUSE_STREAMS @@ -584,7 +593,7 @@ void wxFileConfig::Parse(wxTextBuffer& buffer, bool bLocal) { LineListAppend(strLine); - // let the root group have it start line as well + // let the root group have its start line as well if ( !n ) { m_pCurrentGroup->SetLine(m_linesTail); @@ -1010,7 +1019,9 @@ bool wxFileConfig::Save(wxOutputStream& os, wxMBConv& conv) { wxString line = p->Text(); line += wxTextFile::GetEOL(); - if ( !os.Write(line.mb_str(conv), line.length()) ) + + wxCharBuffer buf(line.mb_str(conv)); + if ( !os.Write(buf, strlen(buf)) ) { wxLogError(_("Error saving user configuration data.")); @@ -1253,6 +1264,9 @@ void wxFileConfig::LineListRemove(wxFileConfigLineList *pLine) else pNext->SetPrev(pPrev); + if ( m_pRootGroup->GetGroupLine() == pLine ) + m_pRootGroup->SetLine(m_linesHead); + wxLogTrace( FILECONF_TRACE_MASK, _T(" head: %s"), ((m_linesHead) ? m_linesHead->Text().c_str() : wxEmptyString) ); @@ -1312,7 +1326,8 @@ wxFileConfigGroup::~wxFileConfigGroup() void wxFileConfigGroup::SetLine(wxFileConfigLineList *pLine) { - wxASSERT( m_pLine == 0 ); // shouldn't be called twice + // shouldn't be called twice unless we are resetting the line + wxASSERT( m_pLine == 0 || pLine == 0 ); m_pLine = pLine; }