explicit_memset.c revision 1.4
11.4Sdrochner/* $NetBSD: explicit_memset.c,v 1.4 2014/06/24 16:39:39 drochner 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.3Sriastrad#endif
141.1Sriastrad#define explicit_memset_impl __explicit_memset_impl
151.1Sriastrad#else
161.1Sriastrad#include <lib/libkern/libkern.h>
171.1Sriastrad#endif
181.1Sriastrad
191.1Sriastrad/*
201.1Sriastrad * The use of a volatile pointer guarantees that the compiler
211.1Sriastrad * will not optimise the call away.
221.1Sriastrad */
231.1Sriastradvoid *(* volatile explicit_memset_impl)(void *, int, size_t) = memset;
241.1Sriastrad
251.2Sriastradvoid *
261.1Sriastradexplicit_memset(void *b, int c, size_t len)
271.1Sriastrad{
281.1Sriastrad
291.2Sriastrad	return (*explicit_memset_impl)(b, c, len);
301.1Sriastrad}
31