5 #include "safe_memclear.h"
9 #if !defined(HAVE_MEMSET_S) && !defined(HAVE_EXPLICIT_BZERO)
11 # if defined(HAVE_WEAK_SYMBOLS)
12 /* it seems weak functions are never inlined, even for static builds */
13 __attribute__((weak
)) void __li_safe_memset_hook(void *buf
, size_t len
);
15 void __li_safe_memset_hook(void *buf
, size_t len
)
20 # endif /* HAVE_WEAK_SYMBOLS */
22 static void* safe_memset(void *s
, int c
, size_t n
)
25 volatile unsigned volatile_zero
= 0;
26 volatile unsigned char *vs
= (volatile unsigned char*)s
;
30 } while (vs
[volatile_zero
] != (unsigned char)c
);
31 # if defined(HAVE_WEAK_SYMBOLS)
32 __li_safe_memset_hook(s
, n
);
33 # endif /* HAVE_WEAK_SYMBOLS */
38 #endif /* !defined(HAVE_MEMSET_S) && !defined(HAVE_EXPLICIT_BZERO) */
41 void safe_memclear(void *s
, size_t n
) {
42 #if defined(HAVE_MEMSET_S)
44 #elif defined(HAVE_EXPLICIT_BZERO)