From: Shaun Ren sren@codeweavers.com
Some programs, such as Final Fantasy IV (3D remake), expect strncmp to return exactly +/-1 when the strings are not equal.
Signed-off-by: Shaun Ren sren@codeweavers.com --- dlls/msvcrt/string.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c index dd392abd203..d1bdf73d209 100644 --- a/dlls/msvcrt/string.c +++ b/dlls/msvcrt/string.c @@ -3289,7 +3289,14 @@ int __cdecl strncmp(const char *str1, const char *str2, size_t len) { if (!len) return 0; while (--len && *str1 && *str1 == *str2) { str1++; str2++; } + +#if defined(_WIN64) || defined(_UCRT) || _MSVCR_VER == 70 || _MSVCR_VER == 71 || _MSVCR_VER >= 110 + if ((unsigned char)*str1 > (unsigned char)*str2) return 1; + if ((unsigned char)*str1 < (unsigned char)*str2) return -1; + return 0; +#else return (unsigned char)*str1 - (unsigned char)*str2; +#endif }
/*********************************************************************