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 +}