]> git.saurik.com Git - wxWidgets.git/commitdiff
fix wxConfig::DeleteGroup() for arguments with trailing slash (replaces patch 1624589)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 7 Jan 2007 16:36:54 +0000 (16:36 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 7 Jan 2007 16:36:54 +0000 (16:36 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44126 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/confbase.h
src/common/fileconf.cpp
src/msw/regconf.cpp
tests/fileconf/fileconftest.cpp

index 320d536fc6c6eb738de5765248b1498c9ffe1a01..27060de0e4a1dd051bbd803c7e69240fec69b6f0 100644 (file)
@@ -97,6 +97,7 @@ All:
 - wxGrid::GetBestSize() returns same size the grid would have after AutoSize()
 - Added wxTreeCtrl::CollapseAll[Children]() and IsEmpty() (Francesco Montorsi)
 - Several RTL-related positioning fixes (Diaa Sami)
+- Fix wxConfig::DeleteGroup() for arguments with trailing slash (David Hart)
 
 wxMSW:
 
index 63b755f0f92467eaf722536a514ae65a649d7e4e..1d58ac75a63f3c4ac30bd61077e90d913009ab12 100644 (file)
@@ -225,7 +225,7 @@ public:
     // delete the group (with all subgroups)
   virtual bool DeleteGroup(const wxString& key) = 0;
     // delete the whole underlying object (disk file, registry key, ...)
-    // primarly for use by desinstallation routine.
+    // primarily for use by uninstallation routine.
   virtual bool DeleteAll() = 0;
 
   // options
@@ -254,6 +254,13 @@ protected:
   static bool IsImmutable(const wxString& key)
     { return !key.IsEmpty() && key[0] == wxCONFIG_IMMUTABLE_PREFIX; }
 
+  // return the path without trailing separator, if any: this should be called
+  // to sanitize paths referring to the group names before passing them to
+  // wxConfigPathChanger as "/foo/bar/" should be the same as "/foo/bar" and it
+  // isn't interpreted in the same way by it (and this can't be changed there
+  // as it's not the same for the entries names)
+  static wxString RemoveTrailingSeparator(const wxString& key);
+
   // do read/write the values of different types
   virtual bool DoReadString(const wxString& key, wxString *pStr) const = 0;
   virtual bool DoReadLong(const wxString& key, long *pl) const = 0;
index 8d67e3a4f76d072a2afa08405ed121a49c980890..b47cb982a52b283a6f2b2b3bba7c7ecb6a4d4026 100644 (file)
@@ -1172,7 +1172,7 @@ bool wxFileConfig::DeleteEntry(const wxString& key, bool bGroupIfEmptyAlso)
 
 bool wxFileConfig::DeleteGroup(const wxString& key)
 {
-  wxConfigPathChanger path(this, key);
+  wxConfigPathChanger path(this, RemoveTrailingSeparator(key));
 
   if ( !m_pCurrentGroup->DeleteSubgroupByName(path.Name()) )
       return false;
index 1777569b8885c45327a362bba52d69ef9e383670..71b62aeb95e74cbd218b619f4921d01422e9ceef 100644 (file)
@@ -697,7 +697,7 @@ bool wxRegConfig::DeleteEntry(const wxString& value, bool bGroupIfEmptyAlso)
 
 bool wxRegConfig::DeleteGroup(const wxString& key)
 {
-  wxConfigPathChanger path(this, key);
+  wxConfigPathChanger path(this, RemoveTrailingSeparator(key));
 
   if ( !m_keyLocal.Exists() )
   {
index 7c90ff461207b0a6c7abbd8d92a3d4fbf27a8b49..fa10884e15adc5063f428c2ff12e0ab608cd5c69 100644 (file)
@@ -309,7 +309,8 @@ void FileConfigTestCase::DeleteGroup()
                          _T("[root/group2]\n"),
                          fc );
 
-    CPPUNIT_ASSERT( fc.DeleteGroup(_T("root/group2")) );
+    // notice trailing slash: it should be ignored
+    CPPUNIT_ASSERT( fc.DeleteGroup(_T("root/group2/")) );
     wxVERIFY_FILECONFIG( _T("[root]\n")
                          _T("entry=value\n"),
                          fc );