From e482b394efc371412ce659b731a9b1e1d73bdf0e Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 24 Oct 2022 10:42:56 +0200 Subject: [PATCH] Added function _wcsncmp * Compare WCHAR strings up to n characters (cherry picked from commit 8178ed26a459356ece17414c6e871a7e0735a4ec) --- winpr/include/winpr/string.h | 2 ++ winpr/libwinpr/crt/string.c | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/winpr/include/winpr/string.h b/winpr/include/winpr/string.h index 8ce83bc1d..3b907c444 100644 --- a/winpr/include/winpr/string.h +++ b/winpr/include/winpr/string.h @@ -57,6 +57,7 @@ extern "C" WINPR_API int _strnicmp(const char* string1, const char* string2, size_t count); WINPR_API int _wcscmp(const WCHAR* string1, const WCHAR* string2); + WINPR_API int _wcsncmp(const WCHAR* string1, const WCHAR* string2, size_t count); WINPR_API size_t _wcslen(const WCHAR* str); WINPR_API size_t _wcsnlen(const WCHAR* str, size_t maxNumberOfElements); @@ -70,6 +71,7 @@ extern "C" #else #define _wcscmp wcscmp +#define _wcsncmp wcsncmp #define _wcslen wcslen #define _wcsnlen wcsnlen #define _wcschr wcschr diff --git a/winpr/libwinpr/crt/string.c b/winpr/libwinpr/crt/string.c index 37fcb4b25..c25ffa279 100644 --- a/winpr/libwinpr/crt/string.c +++ b/winpr/libwinpr/crt/string.c @@ -90,7 +90,20 @@ int _wcscmp(const WCHAR* string1, const WCHAR* string2) Data_Read_UINT16(string1, value1); Data_Read_UINT16(string2, value2); - return value1 - value2; + return (int)value1 - value2; +} + +int _wcsncmp(const WCHAR* string1, const WCHAR* string2, size_t count) +{ + for (size_t x = 0; x < count; x++) + { + const WCHAR a = string1[x]; + const WCHAR b = string2[x]; + + if (a != b) + return (int)a - b; + } + return 0; } /* _wcslen -> wcslen */ -- 2.37.1