From bb91ff63bcb8012384a7639f711c0bbdd3173be9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 4 May 2012 18:31:48 +0000 Subject: [PATCH] Don't remove the last slash from "/" directory name under Unix. This was totally wrong as it returned empty string as (invalid) directory name. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71353 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 4 ++++ src/unix/dir.cpp | 9 ++++++--- tests/file/dir.cpp | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 111ec6fb62..197a1565e0 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -561,6 +561,10 @@ Univ: - Fix regression with read-only wxComboBox appearance (Jason Erb). +Unix: + +- Fix bug with wxDir("/").GetName() returning empty string. + 2.9.3: (released 2011-12-14) diff --git a/src/unix/dir.cpp b/src/unix/dir.cpp index 9e71c8a40f..b67c9dd9c6 100644 --- a/src/unix/dir.cpp +++ b/src/unix/dir.cpp @@ -235,10 +235,13 @@ wxString wxDir::GetName() const if ( m_data ) { name = M_DIR->GetName(); - if ( !name.empty() && (name.Last() == wxT('/')) ) + + // Notice that we need to check for length > 1 as we shouldn't remove + // the last slash from the root directory! + if ( name.length() > 1 && (name.Last() == wxT('/')) ) { - // chop off the last (back)slash - name.Truncate(name.length() - 1); + // chop off the last slash + name.RemoveLast(); } } diff --git a/tests/file/dir.cpp b/tests/file/dir.cpp index caffd17a6d..c5151d243e 100644 --- a/tests/file/dir.cpp +++ b/tests/file/dir.cpp @@ -41,11 +41,13 @@ private: CPPUNIT_TEST( DirExists ); CPPUNIT_TEST( Traverse ); CPPUNIT_TEST( Enum ); + CPPUNIT_TEST( GetName ); CPPUNIT_TEST_SUITE_END(); void DirExists(); void Traverse(); void Enum(); + void GetName(); void CreateTempFile(const wxString& path); wxArrayString DirEnumHelper(wxDir& dir, @@ -227,3 +229,15 @@ void DirTestCase::DirExists() CPPUNIT_ASSERT( wxDir::Exists(wxGetCwd()) ); } +void DirTestCase::GetName() +{ + wxDir d; + + CPPUNIT_ASSERT( d.Open(".") ); + CPPUNIT_ASSERT( d.GetName().Last() != wxFILE_SEP_PATH ); + +#ifdef __UNIX__ + CPPUNIT_ASSERT( d.Open("/") ); + CPPUNIT_ASSERT_EQUAL( "/", d.GetName() ); +#endif +} -- 2.45.2