X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/466e87bd8c80937ca21e8471dc45ed49480675b6..e6310bbc5a3bce1033c0e579341e115be9df6fe9:/src/common/fileconf.cpp diff --git a/src/common/fileconf.cpp b/src/common/fileconf.cpp index 1503ece182..bc153a0a9f 100644 --- a/src/common/fileconf.cpp +++ b/src/common/fileconf.cpp @@ -222,12 +222,12 @@ public: bool IsEmpty() const { return Entries().IsEmpty() && Groups().IsEmpty(); } // find entry/subgroup (NULL if not found) - wxFileConfigGroup *FindSubgroup(const wxChar *szName) const; - wxFileConfigEntry *FindEntry (const wxChar *szName) const; + wxFileConfigGroup *FindSubgroup(const wxString& name) const; + wxFileConfigEntry *FindEntry (const wxString& name) const; // delete entry/subgroup, return false if doesn't exist - bool DeleteSubgroupByName(const wxChar *szName); - bool DeleteEntry(const wxChar *szName); + bool DeleteSubgroupByName(const wxString& name); + bool DeleteEntry(const wxString& name); // create new entry/subgroup returning pointer to newly created element wxFileConfigGroup *AddSubgroup(const wxString& strName); @@ -344,7 +344,7 @@ void wxFileConfig::Init() // It's not an error if (one of the) file(s) doesn't exist. // parse the global file - if ( m_fnGlobalFile.FileExists() ) + if ( m_fnGlobalFile.IsOk() && m_fnGlobalFile.FileExists() ) { wxTextFile fileGlobal(m_fnGlobalFile.GetFullPath()); @@ -360,7 +360,7 @@ void wxFileConfig::Init() } // parse the local file - if ( m_fnLocalFile.FileExists() ) + if ( m_fnLocalFile.IsOk() && m_fnLocalFile.FileExists() ) { wxTextFile fileLocal(m_fnLocalFile.GetFullPath()); if ( fileLocal.Open(*m_conv/*ignored in ANSI build*/) ) @@ -536,15 +536,16 @@ wxFileConfig::~wxFileConfig() void wxFileConfig::Parse(const wxTextBuffer& buffer, bool bLocal) { - const wxChar *pStart; - const wxChar *pEnd; - wxString strLine; size_t nLineCount = buffer.GetLineCount(); for ( size_t n = 0; n < nLineCount; n++ ) { - strLine = buffer[n]; + wxString strLine = buffer[n]; + // FIXME-UTF8: rewrite using iterators, without this buffer + wxWxCharBuffer buf(strLine.c_str()); + const wxChar *pStart; + const wxChar *pEnd; // add the line to linked list if ( bLocal ) @@ -560,7 +561,7 @@ void wxFileConfig::Parse(const wxTextBuffer& buffer, bool bLocal) // skip leading spaces - for ( pStart = strLine; wxIsspace(*pStart); pStart++ ) + for ( pStart = buf; wxIsspace(*pStart); pStart++ ) ; // skip blank/comment lines @@ -728,7 +729,7 @@ wxFileConfig::DoSetPath(const wxString& strPath, bool createMissingComponents) // change current group size_t n; m_pCurrentGroup = m_pRootGroup; - for ( n = 0; n < aParts.Count(); n++ ) { + for ( n = 0; n < aParts.GetCount(); n++ ) { wxFileConfigGroup *pNextGroup = m_pCurrentGroup->FindSubgroup(aParts[n]); if ( pNextGroup == NULL ) { @@ -743,7 +744,7 @@ wxFileConfig::DoSetPath(const wxString& strPath, bool createMissingComponents) // recombine path parts in one variable m_strPath.Empty(); - for ( n = 0; n < aParts.Count(); n++ ) { + for ( n = 0; n < aParts.GetCount(); n++ ) { m_strPath << wxCONFIG_PATH_SEPARATOR << aParts[n]; } @@ -767,7 +768,7 @@ bool wxFileConfig::GetFirstGroup(wxString& str, long& lIndex) const bool wxFileConfig::GetNextGroup (wxString& str, long& lIndex) const { - if ( size_t(lIndex) < m_pCurrentGroup->Groups().Count() ) { + if ( size_t(lIndex) < m_pCurrentGroup->Groups().GetCount() ) { str = m_pCurrentGroup->Groups()[(size_t)lIndex++]->Name(); return true; } @@ -783,7 +784,7 @@ bool wxFileConfig::GetFirstEntry(wxString& str, long& lIndex) const bool wxFileConfig::GetNextEntry (wxString& str, long& lIndex) const { - if ( size_t(lIndex) < m_pCurrentGroup->Entries().Count() ) { + if ( size_t(lIndex) < m_pCurrentGroup->Entries().GetCount() ) { str = m_pCurrentGroup->Entries()[(size_t)lIndex++]->Name(); return true; } @@ -793,10 +794,10 @@ bool wxFileConfig::GetNextEntry (wxString& str, long& lIndex) const size_t wxFileConfig::GetNumberOfEntries(bool bRecursive) const { - size_t n = m_pCurrentGroup->Entries().Count(); + size_t n = m_pCurrentGroup->Entries().GetCount(); if ( bRecursive ) { wxFileConfigGroup *pOldCurrentGroup = m_pCurrentGroup; - size_t nSubgroups = m_pCurrentGroup->Groups().Count(); + size_t nSubgroups = m_pCurrentGroup->Groups().GetCount(); for ( size_t nGroup = 0; nGroup < nSubgroups; nGroup++ ) { CONST_CAST m_pCurrentGroup = m_pCurrentGroup->Groups()[nGroup]; n += GetNumberOfEntries(true); @@ -809,10 +810,10 @@ size_t wxFileConfig::GetNumberOfEntries(bool bRecursive) const size_t wxFileConfig::GetNumberOfGroups(bool bRecursive) const { - size_t n = m_pCurrentGroup->Groups().Count(); + size_t n = m_pCurrentGroup->Groups().GetCount(); if ( bRecursive ) { wxFileConfigGroup *pOldCurrentGroup = m_pCurrentGroup; - size_t nSubgroups = m_pCurrentGroup->Groups().Count(); + size_t nSubgroups = m_pCurrentGroup->Groups().GetCount(); for ( size_t nGroup = 0; nGroup < nSubgroups; nGroup++ ) { CONST_CAST m_pCurrentGroup = m_pCurrentGroup->Groups()[nGroup]; n += GetNumberOfGroups(true); @@ -1059,7 +1060,7 @@ bool wxFileConfig::Save(wxOutputStream& os, const wxMBConv& conv) bool wxFileConfig::RenameEntry(const wxString& oldName, const wxString& newName) { - wxASSERT_MSG( !wxStrchr(oldName, wxCONFIG_PATH_SEPARATOR), + wxASSERT_MSG( oldName.find(wxCONFIG_PATH_SEPARATOR) == wxString::npos, _T("RenameEntry(): paths are not supported") ); // check that the entry exists @@ -1148,7 +1149,8 @@ bool wxFileConfig::DeleteAll() if ( m_fnLocalFile.IsOk() ) { - if ( m_fnLocalFile.FileExists() && wxRemove(m_fnLocalFile.GetFullPath()) == -1 ) + if ( m_fnLocalFile.FileExists() && + !wxRemoveFile(m_fnLocalFile.GetFullPath()) ) { wxLogSysError(_("can't delete user configuration file '%s'"), m_fnLocalFile.GetFullPath().c_str()); @@ -1339,12 +1341,12 @@ wxFileConfigGroup::wxFileConfigGroup(wxFileConfigGroup *pParent, wxFileConfigGroup::~wxFileConfigGroup() { // entries - size_t n, nCount = m_aEntries.Count(); + size_t n, nCount = m_aEntries.GetCount(); for ( n = 0; n < nCount; n++ ) delete m_aEntries[n]; // subgroups - nCount = m_aSubgroups.Count(); + nCount = m_aSubgroups.GetCount(); for ( n = 0; n < nCount; n++ ) delete m_aSubgroups[n]; } @@ -1507,7 +1509,7 @@ void wxFileConfigGroup::UpdateGroupAndSubgroupsLines() // also update all subgroups as they have this groups name in their lines - const size_t nCount = m_aSubgroups.Count(); + const size_t nCount = m_aSubgroups.GetCount(); for ( size_t n = 0; n < nCount; n++ ) { m_aSubgroups[n]->UpdateGroupAndSubgroupsLines(); @@ -1548,11 +1550,11 @@ wxString wxFileConfigGroup::GetFullName() const // use binary search because the array is sorted wxFileConfigEntry * -wxFileConfigGroup::FindEntry(const wxChar *szName) const +wxFileConfigGroup::FindEntry(const wxString& name) const { size_t i, lo = 0, - hi = m_aEntries.Count(); + hi = m_aEntries.GetCount(); int res; wxFileConfigEntry *pEntry; @@ -1561,9 +1563,9 @@ wxFileConfigGroup::FindEntry(const wxChar *szName) const pEntry = m_aEntries[i]; #if wxCONFIG_CASE_SENSITIVE - res = wxStrcmp(pEntry->Name(), szName); + res = pEntry->Name().compare(name); #else - res = wxStricmp(pEntry->Name(), szName); + res = pEntry->Name().CmpNoCase(name); #endif if ( res > 0 ) @@ -1578,11 +1580,11 @@ wxFileConfigGroup::FindEntry(const wxChar *szName) const } wxFileConfigGroup * -wxFileConfigGroup::FindSubgroup(const wxChar *szName) const +wxFileConfigGroup::FindSubgroup(const wxString& name) const { size_t i, lo = 0, - hi = m_aSubgroups.Count(); + hi = m_aSubgroups.GetCount(); int res; wxFileConfigGroup *pGroup; @@ -1591,9 +1593,9 @@ wxFileConfigGroup::FindSubgroup(const wxChar *szName) const pGroup = m_aSubgroups[i]; #if wxCONFIG_CASE_SENSITIVE - res = wxStrcmp(pGroup->Name(), szName); + res = pGroup->Name().compare(name); #else - res = wxStricmp(pGroup->Name(), szName); + res = pGroup->Name().CmpNoCase(name); #endif if ( res > 0 ) @@ -1644,9 +1646,9 @@ wxFileConfigGroup *wxFileConfigGroup::AddSubgroup(const wxString& strName) delete several of them. */ -bool wxFileConfigGroup::DeleteSubgroupByName(const wxChar *szName) +bool wxFileConfigGroup::DeleteSubgroupByName(const wxString& name) { - wxFileConfigGroup * const pGroup = FindSubgroup(szName); + wxFileConfigGroup * const pGroup = FindSubgroup(name); return pGroup ? DeleteSubgroup(pGroup) : false; } @@ -1673,7 +1675,7 @@ bool wxFileConfigGroup::DeleteSubgroup(wxFileConfigGroup *pGroup) : wxEmptyString ); // delete all entries... - size_t nCount = pGroup->m_aEntries.Count(); + size_t nCount = pGroup->m_aEntries.GetCount(); wxLogTrace(FILECONF_TRACE_MASK, _T("Removing %lu entries"), (unsigned long)nCount ); @@ -1692,7 +1694,7 @@ bool wxFileConfigGroup::DeleteSubgroup(wxFileConfigGroup *pGroup) } // ...and subgroups of this subgroup - nCount = pGroup->m_aSubgroups.Count(); + nCount = pGroup->m_aSubgroups.GetCount(); wxLogTrace( FILECONF_TRACE_MASK, _T("Removing %lu subgroups"), (unsigned long)nCount ); @@ -1726,11 +1728,11 @@ bool wxFileConfigGroup::DeleteSubgroup(wxFileConfigGroup *pGroup) // our last entry is being deleted, so find the last one which // stays by going back until we find a subgroup or reach the // group line - const size_t nSubgroups = m_aSubgroups.Count(); + const size_t nSubgroups = m_aSubgroups.GetCount(); m_pLastGroup = NULL; for ( wxFileConfigLineList *pl = pLine->Prev(); - pl && pl != m_pLine && !m_pLastGroup; + pl && !m_pLastGroup; pl = pl->Prev() ) { // does this line belong to our subgroup? @@ -1744,6 +1746,9 @@ bool wxFileConfigGroup::DeleteSubgroup(wxFileConfigGroup *pGroup) break; } } + + if ( pl == m_pLine ) + break; } } @@ -1762,9 +1767,9 @@ bool wxFileConfigGroup::DeleteSubgroup(wxFileConfigGroup *pGroup) return true; } -bool wxFileConfigGroup::DeleteEntry(const wxChar *szName) +bool wxFileConfigGroup::DeleteEntry(const wxString& name) { - wxFileConfigEntry *pEntry = FindEntry(szName); + wxFileConfigEntry *pEntry = FindEntry(name); if ( !pEntry ) { // entry doesn't exist, nothing to do @@ -1781,7 +1786,7 @@ bool wxFileConfigGroup::DeleteEntry(const wxChar *szName) // go back until we find another entry or reach the group's line wxFileConfigEntry *pNewLast = NULL; - size_t n, nEntries = m_aEntries.Count(); + size_t n, nEntries = m_aEntries.GetCount(); wxFileConfigLineList *pl; for ( pl = pLine->Prev(); pl != m_pLine; pl = pl->Prev() ) { // is it our subgroup? @@ -1917,18 +1922,18 @@ void wxFileConfigEntry::SetValue(const wxString& strValue, bool bUser) int CompareEntries(wxFileConfigEntry *p1, wxFileConfigEntry *p2) { #if wxCONFIG_CASE_SENSITIVE - return wxStrcmp(p1->Name(), p2->Name()); + return p1->Name().compare(p2->Name()); #else - return wxStricmp(p1->Name(), p2->Name()); + return p1->Name().CmpNoCase(p2->Name()); #endif } int CompareGroups(wxFileConfigGroup *p1, wxFileConfigGroup *p2) { #if wxCONFIG_CASE_SENSITIVE - return wxStrcmp(p1->Name(), p2->Name()); + return p1->Name().compare(p2->Name()); #else - return wxStricmp(p1->Name(), p2->Name()); + return p1->Name().CmpNoCase(p2->Name()); #endif }