]> git.saurik.com Git - wxWidgets.git/commitdiff
Restore case-insensitivity for file name matching under Windows.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 15 Jun 2013 21:49:29 +0000 (21:49 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 15 Jun 2013 21:49:29 +0000 (21:49 +0000)
This was broken by the changes of r73790, see #3432. Fix this by converting
both the file name and the wildcard mask to the upper case before checking
whether the former matches the latter.

Closes #15243.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74243 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/dir.cpp

index 55f855cf6f9ffe9ecbd48b917a64f6e2b829b98b..447d40ccff11bb13ff6434c37f5b46ae73b9eb71 100644 (file)
@@ -77,8 +77,22 @@ const wxChar *GetNameFromFindData(const FIND_STRUCT *finddata)
 inline bool
 CheckFoundMatch(const FIND_STRUCT* finddata, const wxString& filter)
 {
-    return filter.empty() ||
-                wxString(GetNameFromFindData(finddata)).Matches(filter);
+    // If there is no filter, the found file must be the one we really are
+    // looking for.
+    if ( filter.empty() )
+        return true;
+
+    // Otherwise do check the match validity. Notice that we must do it
+    // case-insensitively because the case of the file names is not supposed to
+    // matter under Windows.
+    wxString fn(GetNameFromFindData(finddata));
+
+    // However if the filter contains only special characters (which is a
+    // common case), we can skip the case conversion.
+    if ( filter.find_first_not_of(wxS("*?.")) == wxString::npos )
+        return fn.Matches(filter);
+
+    return fn.MakeUpper().Matches(filter.Upper());
 }
 
 inline bool