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);