3 #include "safe_memclear.h"
7 #if !defined(HAVE_MEMSET_S) && !defined(HAVE_EXPLICIT_BZERO)
9 # if defined(HAVE_WEAK_SYMBOLS)
10 /* it seems weak functions are never inlined, even for static builds */
11 __attribute__((weak
)) void __li_safe_memset_hook(void *buf
, size_t len
);
13 void __li_safe_memset_hook(void *buf
, size_t len
)
18 # endif /* HAVE_WEAK_SYMBOLS */
20 static void* safe_memset(void *s
, int c
, size_t n
)
23 volatile unsigned volatile_zero
= 0;
24 volatile unsigned char *vs
= (volatile unsigned char*)s
;
28 } while (vs
[volatile_zero
] != (unsigned char)c
);
29 # if defined(HAVE_WEAK_SYMBOLS)
30 __li_safe_memset_hook(s
, n
);
31 # endif /* HAVE_WEAK_SYMBOLS */
36 #endif /* !defined(HAVE_MEMSET_S) && !defined(HAVE_EXPLICIT_BZERO) */
39 void safe_memclear(void *s
, size_t n
) {
40 #if defined(HAVE_MEMSET_S)
42 #elif defined(HAVE_EXPLICIT_BZERO)