From 67ab5dc5d49f55dba7409f179bc0da09efee52ec Mon Sep 17 00:00:00 2001 From: Kaimakan71 Date: Sun, 6 Oct 2024 08:02:08 -0400 Subject: [PATCH] [SDK:CRT] Implement wcscpy_s() and wcscat_s() --- SDK/CRT/STRING/wstr.c | 47 ++++++++++++++++++++++++++++++++++++++++--- SDK/INC/CRT/wchar.h | 2 ++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/SDK/CRT/STRING/wstr.c b/SDK/CRT/STRING/wstr.c index 959782c..a8111bd 100644 --- a/SDK/CRT/STRING/wstr.c +++ b/SDK/CRT/STRING/wstr.c @@ -26,7 +26,7 @@ wcslen ( ptr = str; while (*ptr++); - return (const char*)ptr - (const char*)str - sizeof(wchar_t); + return ptr - str; } size_t @@ -39,9 +39,12 @@ wcsnlen ( size_t len; len = 0; - while (len < maxlen && str[len++]); + while (len < maxlen && *str) { + len++; + str++; + } - return len - sizeof(wchar_t); + return len; } int @@ -127,3 +130,41 @@ wcsstr ( return NULL; } + +wchar_t * +wcscpy_s ( + wchar_t *dest, + size_t maxlen, + const wchar_t *src + ) + +{ + for (size_t i = 0; i < maxlen; i++, src++) { + dest[i] = *src; + + if (!*src) { + break; + } + } + + return dest; +} + +wchar_t * +wcscat_s ( + wchar_t *dest, + size_t maxlen, + const wchar_t *src + ) + +{ + for (size_t i = wcsnlen(dest, maxlen); i < maxlen; i++, src++) { + dest[i] = *src; + + if (!*src) { + break; + } + } + + return dest; +} diff --git a/SDK/INC/CRT/wchar.h b/SDK/INC/CRT/wchar.h index c7e0e15..4ecd5d9 100644 --- a/SDK/INC/CRT/wchar.h +++ b/SDK/INC/CRT/wchar.h @@ -31,6 +31,8 @@ int wcscmp(const wchar_t* s1, const wchar_t* s2); int wcsncmp(const wchar_t* s1, const wchar_t* s2, size_t n); wchar_t *wcschr(const wchar_t *wcs, wchar_t wc); wchar_t *wcsstr(const wchar_t *haystack, const wchar_t *needle); +wchar_t *wcscpy_s(wchar_t *dest, size_t maxlen, const wchar_t *src); +wchar_t *wcscat_s(wchar_t *dest, size_t maxlen, const wchar_t *src); wchar_t *wmemset(wchar_t *dest, wchar_t c, size_t count); wchar_t *wmemcpy(wchar_t *dest, const wchar_t *src, size_t count);