crt: Implement memset_explicit I implemented it in the same way as glibc. It's just memset, followed by a compiler barrier Signed-off-by: LIU Hao <lh_mouse@126.com>
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am index 3da0d1a..946e280 100644 --- a/mingw-w64-crt/Makefile.am +++ b/mingw-w64-crt/Makefile.am
@@ -1278,7 +1278,7 @@ misc/gettimeofday.c misc/__mingw_has_sse.c \ misc/ftime32.c misc/ftime64.c \ misc/memalignment.c \ - misc/mempcpy.c misc/mingw-aligned-malloc.c \ + misc/mempcpy.c misc/memset_explicit.c misc/mingw-aligned-malloc.c \ misc/strndup.c \ misc/mingw_matherr.c misc/mingw_mbwc_convert.c misc/mingw_usleep.c misc/mingw_wcstod.c misc/mingw_wcstof.c \ misc/mingw_wcstold.c \
diff --git a/mingw-w64-crt/misc/memset_explicit.c b/mingw-w64-crt/misc/memset_explicit.c new file mode 100644 index 0000000..015f377 --- /dev/null +++ b/mingw-w64-crt/misc/memset_explicit.c
@@ -0,0 +1,16 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ + +#define __CRT__NO_INLINE +#include <string.h> + +void * __cdecl +memset_explicit (void *d, int c, size_t len) +{ + memset(d, c, len); + __asm__ __volatile__("" ::: "memory"); + return d; +}
diff --git a/mingw-w64-headers/crt/memory.h b/mingw-w64-headers/crt/memory.h index 760d84b..289f060 100644 --- a/mingw-w64-headers/crt/memory.h +++ b/mingw-w64-headers/crt/memory.h
@@ -41,6 +41,9 @@ _SECIMP errno_t __cdecl memcpy_s (void *_dest,size_t _numberOfElements,const void *_src,size_t _count); void * __cdecl mempcpy (void *_Dst, const void *_Src, size_t _Size); void * __cdecl memset(void *_Dst,int _Val,size_t _Size); +#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 202311L + void * __cdecl memset_explicit(void *_Dst,int _Val,size_t _Size); +#endif #ifndef NO_OLDNAMES void * __cdecl memccpy(void *_Dst,const void *_Src,int _Val,size_t _Size) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
diff --git a/mingw-w64-headers/crt/string.h b/mingw-w64-headers/crt/string.h index 36daadc..34bb336 100644 --- a/mingw-w64-headers/crt/string.h +++ b/mingw-w64-headers/crt/string.h
@@ -54,6 +54,9 @@ _SECIMP errno_t __cdecl memcpy_s (void *_dest,size_t _numberOfElements,const void *_src,size_t _count); void * __cdecl mempcpy (void *_Dst, const void *_Src, size_t _Size); void * __cdecl memset(void *_Dst,int _Val,size_t _Size); +#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 202311L + void * __cdecl memset_explicit(void *_Dst,int _Val,size_t _Size); +#endif #ifndef NO_OLDNAMES void * __cdecl memccpy(void *_Dst,const void *_Src,int _Val,size_t _Size) __MINGW_ATTRIB_DEPRECATED_MSVC2005; int __cdecl memicmp(const void *_Buf1,const void *_Buf2,size_t _Size) __MINGW_ATTRIB_DEPRECATED_MSVC2005;