11.5Sriastrad/* $NetBSD: explicit_memset.c,v 1.5 2024/11/02 02:43:48 riastradh Exp $ */ 21.4Sdrochner 31.4Sdrochner/* 41.4Sdrochner * Written by Matthias Drochner <drochner@NetBSD.org>. 51.4Sdrochner * Public domain. 61.4Sdrochner */ 71.1Sriastrad 81.1Sriastrad#if !defined(_KERNEL) && !defined(_STANDALONE) 91.3Sriastrad#include "namespace.h" 101.1Sriastrad#include <string.h> 111.3Sriastrad#ifdef __weak_alias 121.3Sriastrad__weak_alias(explicit_memset,_explicit_memset) 131.5Sriastrad__strong_alias(memset_explicit,_explicit_memset) /* C23 */ 141.3Sriastrad#endif 151.1Sriastrad#define explicit_memset_impl __explicit_memset_impl 161.1Sriastrad#else 171.1Sriastrad#include <lib/libkern/libkern.h> 181.1Sriastrad#endif 191.1Sriastrad 201.1Sriastrad/* 211.1Sriastrad * The use of a volatile pointer guarantees that the compiler 221.1Sriastrad * will not optimise the call away. 231.1Sriastrad */ 241.1Sriastradvoid *(* volatile explicit_memset_impl)(void *, int, size_t) = memset; 251.1Sriastrad 261.2Sriastradvoid * 271.1Sriastradexplicit_memset(void *b, int c, size_t len) 281.1Sriastrad{ 291.1Sriastrad 301.2Sriastrad return (*explicit_memset_impl)(b, c, len); 311.1Sriastrad} 32