WCMD not working anymore
Dmitry Timoshkov
dmitry at baikal.ru
Wed Jul 2 07:56:54 CDT 2003
"Sylvain Petreolle" <spetreolle at yahoo.fr> wrote:
> With the command "DIR" entered we have :
> ...
> 0009:Call kernel32.CompareStringA(00000400,00001001,40792654
> "DIR",00000003,4057bcd3 "DIR",ffffffff) ret=405769b9
> 0009:Ret kernel32.CompareStringA() retval=00000001 ret=405769b9
> ....
>
> where the return code should be 2 (CSTR_EQUAL)
Thanks for the report. Here is the patch. I've added a test case
for that bug as well.
Changelog:
Dmitry Timoshkov <dmitry at codeweavers.com>
Exit ealier from LCMapStringA in the case of LCMAP_SORTKEY.
Don't rely on computing string length by MultiByteToWideChar
in CompareStringA, do it manually.
--
Dmitry.
-------------- next part --------------
diff -u cvs/hq/wine/dlls/kernel/locale.c wine/dlls/kernel/locale.c
--- cvs/hq/wine/dlls/kernel/locale.c Sat Jun 28 14:30:49 2003
+++ wine/dlls/kernel/locale.c Wed Jul 2 21:29:56 2003
@@ -1154,6 +1154,7 @@ INT WINAPI LCMapStringA(LCID lcid, DWORD
goto map_string_exit;
}
ret = wine_get_sortkey(flags, srcW, srclenW, dst, dstlen);
+ goto map_string_exit;
}
if (flags & SORT_STRINGSORT)
@@ -1224,6 +1225,9 @@ INT WINAPI CompareStringA(LCID lcid, DWO
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
+
+ if (len1 < 0) len1 = strlen(str1);
+ if (len2 < 0) len2 = strlen(str2);
GetLocaleInfoW(lcid, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
(WCHAR *)&locale_cp, (sizeof(locale_cp)/sizeof(WCHAR)));
diff -u cvs/hq/wine/dlls/kernel/tests/locale.c wine/dlls/kernel/tests/locale.c
--- cvs/hq/wine/dlls/kernel/tests/locale.c Tue Jul 1 16:17:51 2003
+++ wine/dlls/kernel/tests/locale.c Wed Jul 2 21:29:56 2003
@@ -719,6 +719,10 @@ char buffer1[BUFFER_SIZE], buffer2[BUFFE
ret = CompareStringA(lcid, NORM_IGNORECASE, buffer1, -1, buffer2, 0);
ok (ret == 3, "CompareStringA (st1=%s str2=%s) expected result=3, got %d", buffer1, buffer2, ret);
+
+ strcpy(buffer1, "Salut"); strcpy(buffer2, "saLuT");
+ ret = CompareStringA(lcid, NORM_IGNORECASE, buffer1, 5, buffer2, -1);
+ ok (ret == 2, "CompareStringA (st1=%s str2=%s) expected result=2, got %d", buffer1, buffer2, ret);
}
void test_LCMapStringA(void)
More information about the wine-patches
mailing list