]> git.saurik.com Git - wxWidgets.git/commitdiff
do case normalization after long path one, this fixes the problem with incorrect...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 24 May 2008 14:42:40 +0000 (14:42 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 24 May 2008 14:42:40 +0000 (14:42 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53732 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/filename.cpp
tests/filename/filenametest.cpp

index 0e9a6bdf1481a6b0d85f4c0ec33c2c8b6576885f..0f206a94b5bf1b58e0d8b50325e186d8a01ab839 100644 (file)
@@ -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,
index d51c40dbef974e1c8c67590362e35553b64d6f3c..8aa329f1d2faff8789a2a90db03ec553ff7e0921 100644 (file)
@@ -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 },