xref: /minix3/common/lib/libc/string/explicit_memset.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc /* $NetBSD: explicit_memset.c,v 1.4 2014/06/24 16:39:39 drochner Exp $ */
2*0a6a1f1dSLionel Sambuc 
3*0a6a1f1dSLionel Sambuc /*
4*0a6a1f1dSLionel Sambuc  * Written by Matthias Drochner <drochner@NetBSD.org>.
5*0a6a1f1dSLionel Sambuc  * Public domain.
6*0a6a1f1dSLionel Sambuc  */
784d9c625SLionel Sambuc 
884d9c625SLionel Sambuc #if !defined(_KERNEL) && !defined(_STANDALONE)
984d9c625SLionel Sambuc #include "namespace.h"
1084d9c625SLionel Sambuc #include <string.h>
1184d9c625SLionel Sambuc #ifdef __weak_alias
1284d9c625SLionel Sambuc __weak_alias(explicit_memset,_explicit_memset)
1384d9c625SLionel Sambuc #endif
1484d9c625SLionel Sambuc #define explicit_memset_impl __explicit_memset_impl
1584d9c625SLionel Sambuc #else
1684d9c625SLionel Sambuc #include <lib/libkern/libkern.h>
1784d9c625SLionel Sambuc #endif
1884d9c625SLionel Sambuc 
1984d9c625SLionel Sambuc /*
2084d9c625SLionel Sambuc  * The use of a volatile pointer guarantees that the compiler
2184d9c625SLionel Sambuc  * will not optimise the call away.
2284d9c625SLionel Sambuc  */
2384d9c625SLionel Sambuc void *(* volatile explicit_memset_impl)(void *, int, size_t) = memset;
2484d9c625SLionel Sambuc 
2584d9c625SLionel Sambuc void *
explicit_memset(void * b,int c,size_t len)2684d9c625SLionel Sambuc explicit_memset(void *b, int c, size_t len)
2784d9c625SLionel Sambuc {
2884d9c625SLionel Sambuc 
2984d9c625SLionel Sambuc 	return (*explicit_memset_impl)(b, c, len);
3084d9c625SLionel Sambuc }
31