1*b7152c32Sriastradh /* $NetBSD: explicit_memset.c,v 1.5 2024/11/02 02:43:48 riastradh Exp $ */ 21970d452Sdrochner 31970d452Sdrochner /* 41970d452Sdrochner * Written by Matthias Drochner <drochner@NetBSD.org>. 51970d452Sdrochner * Public domain. 61970d452Sdrochner */ 782db4b98Sriastradh 882db4b98Sriastradh #if !defined(_KERNEL) && !defined(_STANDALONE) 91239c2bbSriastradh #include "namespace.h" 1082db4b98Sriastradh #include <string.h> 111239c2bbSriastradh #ifdef __weak_alias 121239c2bbSriastradh __weak_alias(explicit_memset,_explicit_memset) 13*b7152c32Sriastradh __strong_alias(memset_explicit,_explicit_memset) /* C23 */ 141239c2bbSriastradh #endif 1582db4b98Sriastradh #define explicit_memset_impl __explicit_memset_impl 1682db4b98Sriastradh #else 1782db4b98Sriastradh #include <lib/libkern/libkern.h> 1882db4b98Sriastradh #endif 1982db4b98Sriastradh 2082db4b98Sriastradh /* 2182db4b98Sriastradh * The use of a volatile pointer guarantees that the compiler 2282db4b98Sriastradh * will not optimise the call away. 2382db4b98Sriastradh */ 2482db4b98Sriastradh void *(* volatile explicit_memset_impl)(void *, int, size_t) = memset; 2582db4b98Sriastradh 26495fdb7eSriastradh void * 2782db4b98Sriastradh explicit_memset(void *b, int c, size_t len) 2882db4b98Sriastradh { 2982db4b98Sriastradh 30495fdb7eSriastradh return (*explicit_memset_impl)(b, c, len); 3182db4b98Sriastradh } 32