diff --git a/src/common/filename.cpp b/src/common/filename.cpp index 0e9a6bdf14..0f206a94b5 100644 --- a/src/common/filename.cpp +++ b/src/common/filename.cpp @@ -1261,11 +1261,6 @@ bool wxFileName::Normalize(int flags, } } - if ( (flags & wxPATH_NORM_CASE) && !IsCaseSensitive(format) ) - { - dir.MakeLower(); - } - m_dirs.Add(dir); } @@ -1275,26 +1270,12 @@ bool wxFileName::Normalize(int flags, wxString filename; if (GetShortcutTarget(GetFullPath(format), filename)) { - // Repeat this since we may now have a new path - if ( (flags & wxPATH_NORM_CASE) && !IsCaseSensitive(format) ) - { - filename.MakeLower(); - } m_relative = false; Assign(filename); } } #endif - if ( (flags & wxPATH_NORM_CASE) && !IsCaseSensitive(format) ) - { - // VZ: expand env vars here too? - - m_volume.MakeLower(); - m_name.MakeLower(); - m_ext.MakeLower(); - } - #if defined(__WIN32__) if ( (flags & wxPATH_NORM_LONG) && (format == wxPATH_DOS) ) { @@ -1302,6 +1283,22 @@ bool wxFileName::Normalize(int flags, } #endif // Win32 + // Change case (this should be kept at the end of the function, to ensure + // that the path doesn't change any more after we normalize its case) + if ( (flags & wxPATH_NORM_CASE) && !IsCaseSensitive(format) ) + { + m_volume.MakeLower(); + m_name.MakeLower(); + m_ext.MakeLower(); + + // directory entries must be made lower case as well + count = m_dirs.GetCount(); + for ( size_t i = 0; i < count; i++ ) + { + m_dirs[i].MakeLower(); + } + } + return true; } @@ -2239,7 +2236,7 @@ bool wxFileName::GetTimes(wxDateTime *dtAccess, // not 9x bool ok; FILETIME ftAccess, ftCreate, ftWrite; - if ( IsDir() ) + if ( IsDir() ) { // implemented in msw/dir.cpp extern bool wxGetDirectoryTimes(const wxString& dirname, diff --git a/tests/filename/filenametest.cpp b/tests/filename/filenametest.cpp index d51c40dbef..8aa329f1d2 100644 --- a/tests/filename/filenametest.cpp +++ b/tests/filename/filenametest.cpp @@ -317,6 +317,8 @@ void FileNameTestCase::TestNormalize() "c:\\program files\\wx", wxPATH_DOS }, { "C:/Program Files/wx", wxPATH_NORM_ALL | wxPATH_NORM_CASE, "c:\\program files\\wx", wxPATH_DOS }, + { "C:\\Users\\zeitlin", wxPATH_NORM_ALL | wxPATH_NORM_CASE, + "c:\\users\\zeitlin", wxPATH_DOS }, // test wxPATH_NORM_ABSOLUTE { "a/b/", wxPATH_NORM_ABSOLUTE, cwd + "a/b/", wxPATH_UNIX },