RFC: Locale-independent case-insensitive string comparison

Francois Gouget fgouget at codeweavers.com
Mon Sep 24 06:01:01 CDT 2012


diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 28f82a3..f465ad7 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -640,7 +640,7 @@ static void HTTP_FixURL(http_request_t *request)
         }
     }
 
-    if(CSTR_EQUAL != CompareStringW( LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE,
+    if(CSTR_EQUAL != CompareStringW( LOCALE_INVARIANT, NORM_IGNORECASE,
                        request->path, strlenW(request->path), szHttp, strlenW(szHttp) )
        && request->path[0] != '/') /* not an absolute path ?? --> fix it !! */
     {

In this code snippet it feels wrong to have this string comparison depend on the system 
locale, which in Wine's case would come from the user's Unix locale. 
Isn't this a case where LOCALE_INVARIANT would be better?

However I have not found a case where this makes a difference anyway, 
either with 'http:' or with 'file:'. That is, 'file:' always matches 
'FILE:', even in Turkish, as long as I don't use NORM_LINGUISTIC_CASING. 
Conversely, 'fîle:' is different from 'FILE:' no matter what.

Once I have a CompareString() test-case I can make some for UrlIs(), 
PathCreateFormURL(), possibly ShellExecute(), etc.

-- 
Francois Gouget <fgouget at codeweavers.com>




More information about the wine-devel mailing list