Piotr Caban : msvcrt: Added strncpy_s implementation.

Alexandre Julliard julliard at winehq.org
Wed Apr 21 10:40:19 CDT 2010


Module: wine
Branch: master
Commit: 23d0369d9d519f5b4fa5ba82bc01a542ceaf1a2a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=23d0369d9d519f5b4fa5ba82bc01a542ceaf1a2a

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Apr 20 21:39:11 2010 +0200

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 0bbbfda..945bf4b 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 45cd885..db16a0b 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 7fd5d3b..c57a46c 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<numberOfElements)
+        end = count;
+    else
+        end = numberOfElements-1;
+
+    for(i=0; i<end && src[i]; i++)
+        dest[i] = src[i];
+
+    if(!src[i] || end==count || count==_TRUNCATE) {
+        dest[i] = '\0';
+        return 0;
+    }
+
+    MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0);
+    dest[0] = '\0';
+    *MSVCRT__errno() = MSVCRT_EINVAL;
+    return MSVCRT_EINVAL;
+}
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 98db83f..f21588f 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1328,7 +1328,7 @@
 # stub strncat_s
 @ cdecl strncmp(str str long) ntdll.strncmp
 @ cdecl strncpy(ptr str long) ntdll.strncpy
-# stub strncpy_s
+@ cdecl strncpy_s(ptr long str long)
 @ cdecl strnlen(str long) MSVCRT_strnlen
 @ cdecl strpbrk(str str) ntdll.strpbrk
 @ cdecl strrchr(str long) ntdll.strrchr




More information about the wine-cvs mailing list