From 096991428f304681d26e971cd7af6c13b67f48ca Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Thu, 2 Oct 2008 22:00:34 +0200 Subject: [PATCH] msvcrt: Implemented wcsncpy_s. --- dlls/msvcrt/msvcrt.spec | 1 + dlls/msvcrt/wcs.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index ecdce4f9a71..c54d33e7286 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -772,6 +772,7 @@ @ cdecl wcsncat(wstr wstr long) ntdll.wcsncat @ cdecl wcsncmp(wstr wstr long) ntdll.wcsncmp @ cdecl wcsncpy(ptr wstr long) ntdll.wcsncpy +@ cdecl wcsncpy_s(ptr long wstr long) MSVCRT_wcsncpy_s @ cdecl wcspbrk(wstr wstr) MSVCRT_wcspbrk @ cdecl wcsrchr(wstr long) ntdll.wcsrchr @ cdecl wcsspn(wstr wstr) ntdll.wcsspn diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index 8eccb39552b..5c80092d73b 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -1046,3 +1046,34 @@ INT CDECL MSVCRT_wcscpy_s( MSVCRT_wchar_t* wcDest, MSVCRT_size_t numElement, con return 0; } + +/****************************************************************** + * wcsncpy_s (MSVCRT.@) + */ +INT CDECL MSVCRT_wcsncpy_s( MSVCRT_wchar_t* wcDest, MSVCRT_size_t numElement, const MSVCRT_wchar_t *wcSrc, + MSVCRT_size_t count ) +{ + INT size = 0; + + if (!wcDest || !numElement) + return MSVCRT_EINVAL; + + wcDest[0] = 0; + + if (!wcSrc) + { + return MSVCRT_EINVAL; + } + + size = min(strlenW(wcSrc), count); + + if (size >= numElement) + { + return MSVCRT_ERANGE; + } + + memcpy( wcDest, wcSrc, size*sizeof(WCHAR) ); + wcDest[size] = '\0'; + + return 0; +}