Alexandre Julliard : ntdll: Add memcpy_s and memmove_s.
Alexandre Julliard
julliard at winehq.org
Wed Jun 29 16:25:53 CDT 2022
Module: wine
Branch: master
Commit: cbf5ad74fcf40a56788933d962cb157a0b3bacb8
URL: https://source.winehq.org/git/wine.git/?a=commit;h=cbf5ad74fcf40a56788933d962cb157a0b3bacb8
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Jun 29 11:52:23 2022 +0200
ntdll: Add memcpy_s and memmove_s.
Implementation copied from msvcrt.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/ntdll.spec | 2 ++
dlls/ntdll/string.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 38 insertions(+)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 0cda13586f4..2a119c9a508 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -1581,7 +1581,9 @@
@ cdecl memchr(ptr long long)
@ cdecl memcmp(ptr ptr long)
@ cdecl memcpy(ptr ptr long)
+@ cdecl memcpy_s(ptr long ptr long)
@ cdecl memmove(ptr ptr long)
+@ cdecl memmove_s(ptr long ptr long)
@ cdecl memset(ptr long long)
@ cdecl pow(double double)
@ cdecl qsort(ptr long long ptr)
diff --git a/dlls/ntdll/string.c b/dlls/ntdll/string.c
index 1bea000b2bd..c0db6f832ef 100644
--- a/dlls/ntdll/string.c
+++ b/dlls/ntdll/string.c
@@ -142,6 +142,42 @@ void * __cdecl memmove( void *dst, const void *src, size_t n )
}
+/*********************************************************************
+ * memcpy_s (MSVCRT.@)
+ */
+errno_t __cdecl memcpy_s( void *dst, size_t len, const void *src, size_t count )
+{
+ if (!count) return 0;
+ if (!dst) return EINVAL;
+ if (!src)
+ {
+ memset( dst, 0, len );
+ return EINVAL;
+ }
+ if (count > len)
+ {
+ memset( dst, 0, len );
+ return ERANGE;
+ }
+ memmove( dst, src, count );
+ return 0;
+}
+
+
+/*********************************************************************
+ * memmove_s (MSVCRT.@)
+ */
+errno_t __cdecl memmove_s( void *dst, size_t len, const void *src, size_t count )
+{
+ if (!count) return 0;
+ if (!dst) return EINVAL;
+ if (!src) return EINVAL;
+ if (count > len) return ERANGE;
+ memmove( dst, src, count );
+ return 0;
+}
+
+
static inline void memset_aligned_32( unsigned char *d, uint64_t v, size_t n )
{
unsigned char *end = d + n;
More information about the wine-cvs
mailing list