xref: /minix3/common/lib/libc/string/explicit_memset.c (revision 84d9c625bfea59e274550651111ae9edfdc40fbd)
1*84d9c625SLionel Sambuc /* $NetBSD: explicit_memset.c,v 1.3 2013/08/28 17:47:07 riastradh Exp $ */
2*84d9c625SLionel Sambuc 
3*84d9c625SLionel Sambuc #if !defined(_KERNEL) && !defined(_STANDALONE)
4*84d9c625SLionel Sambuc #include "namespace.h"
5*84d9c625SLionel Sambuc #include <string.h>
6*84d9c625SLionel Sambuc #ifdef __weak_alias
7*84d9c625SLionel Sambuc __weak_alias(explicit_memset,_explicit_memset)
8*84d9c625SLionel Sambuc #endif
9*84d9c625SLionel Sambuc #define explicit_memset_impl __explicit_memset_impl
10*84d9c625SLionel Sambuc #else
11*84d9c625SLionel Sambuc #include <lib/libkern/libkern.h>
12*84d9c625SLionel Sambuc #endif
13*84d9c625SLionel Sambuc 
14*84d9c625SLionel Sambuc /*
15*84d9c625SLionel Sambuc  * The use of a volatile pointer guarantees that the compiler
16*84d9c625SLionel Sambuc  * will not optimise the call away.
17*84d9c625SLionel Sambuc  */
18*84d9c625SLionel Sambuc void *(* volatile explicit_memset_impl)(void *, int, size_t) = memset;
19*84d9c625SLionel Sambuc 
20*84d9c625SLionel Sambuc void *
21*84d9c625SLionel Sambuc explicit_memset(void *b, int c, size_t len)
22*84d9c625SLionel Sambuc {
23*84d9c625SLionel Sambuc 
24*84d9c625SLionel Sambuc 	return (*explicit_memset_impl)(b, c, len);
25*84d9c625SLionel Sambuc }
26