From 23d0369d9d519f5b4fa5ba82bc01a542ceaf1a2a Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 20 Apr 2010 21:39:11 +0200 Subject: [PATCH] msvcrt: Added strncpy_s implementation. --- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/heap.c | 38 ++++++++++++++++++++++++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 0bbbfda3719..945bf4b102f 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1388,7 +1388,7 @@ @ stub strncat_s @ cdecl strncmp(str str long) msvcrt.strncmp @ cdecl strncpy(ptr str long) msvcrt.strncpy -@ stub strncpy_s +@ cdecl strncpy_s(ptr long str long) msvcrt.strncpy_s @ cdecl strnlen(str long) msvcrt.strnlen @ cdecl strpbrk(str str) msvcrt.strpbrk @ cdecl strrchr(str long) msvcrt.strrchr diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 45cd885d169..db16a0bfd8e 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1372,7 +1372,7 @@ @ stub strncat_s @ cdecl strncmp(str str long) msvcrt.strncmp @ cdecl strncpy(ptr str long) msvcrt.strncpy -@ stub strncpy_s +@ cdecl strncpy_s(ptr long str long) msvcrt.strncpy_s @ cdecl strnlen(str long) msvcrt.strnlen @ cdecl strpbrk(str str) msvcrt.strpbrk @ cdecl strrchr(str long) msvcrt.strrchr diff --git a/dlls/msvcrt/heap.c b/dlls/msvcrt/heap.c index 7fd5d3b4262..c57a46ca8a7 100644 --- a/dlls/msvcrt/heap.c +++ b/dlls/msvcrt/heap.c @@ -550,3 +550,41 @@ int CDECL memmove_s(void *dest, MSVCRT_size_t numberOfElements, const void *src, memmove(dest, src, count); return 0; } + +/********************************************************************* + * strncpy_s (MSVCRT.@) + */ +int CDECL strncpy_s(char *dest, MSVCRT_size_t numberOfElements, + const char *src, MSVCRT_size_t count) +{ + MSVCRT_size_t i, end; + + TRACE("(%s %lu %s %lu)\n", dest, numberOfElements, src, count); + + if(!count) + return 0; + + if(!dest || !src || !numberOfElements) { + MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0); + *MSVCRT__errno() = MSVCRT_EINVAL; + return MSVCRT_EINVAL; + } + + if(count!=_TRUNCATE && count