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
This commit is contained in:
Vadim Zeitlin
2012-05-04 18:31:48 +00:00
parent 7bb22bd68d
commit bb91ff63bc
3 changed files with 24 additions and 3 deletions

View File

@@ -561,6 +561,10 @@ Univ:
- Fix regression with read-only wxComboBox appearance (Jason Erb). - 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) 2.9.3: (released 2011-12-14)

View File

@@ -235,10 +235,13 @@ wxString wxDir::GetName() const
if ( m_data ) if ( m_data )
{ {
name = M_DIR->GetName(); 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 // chop off the last slash
name.Truncate(name.length() - 1); name.RemoveLast();
} }
} }

View File

@@ -41,11 +41,13 @@ private:
CPPUNIT_TEST( DirExists ); CPPUNIT_TEST( DirExists );
CPPUNIT_TEST( Traverse ); CPPUNIT_TEST( Traverse );
CPPUNIT_TEST( Enum ); CPPUNIT_TEST( Enum );
CPPUNIT_TEST( GetName );
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
void DirExists(); void DirExists();
void Traverse(); void Traverse();
void Enum(); void Enum();
void GetName();
void CreateTempFile(const wxString& path); void CreateTempFile(const wxString& path);
wxArrayString DirEnumHelper(wxDir& dir, wxArrayString DirEnumHelper(wxDir& dir,
@@ -227,3 +229,15 @@ void DirTestCase::DirExists()
CPPUNIT_ASSERT( wxDir::Exists(wxGetCwd()) ); 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
}