From 9a0c5c012a1137c4c3fb0773df8644553dcc0551 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 24 May 2008 14:42:40 +0000 Subject: [PATCH] do case normalization after long path one, this fixes the problem with incorrect paths case under Vista (closes 9162) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53732 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/filename.cpp | 35 ++++++++++++++++------------------- tests/filename/filenametest.cpp | 2 ++ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/common/filename.cpp b/src/common/filename.cpp index 0e9a6bd..0f206a9 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,32 +1270,34 @@ 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) ) +#if defined(__WIN32__) + if ( (flags & wxPATH_NORM_LONG) && (format == wxPATH_DOS) ) { - // VZ: expand env vars here too? + Assign(GetLongPath()); + } +#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(); - } -#if defined(__WIN32__) - if ( (flags & wxPATH_NORM_LONG) && (format == wxPATH_DOS) ) - { - Assign(GetLongPath()); + // 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(); + } } -#endif // Win32 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 d51c40d..8aa329f 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 }, -- 2.7.4