[mod_auth] require digest uri= match original URI
[lighttpd.git] / src / safe_memclear.c
blob15617a46e64937612ddc55b0275714c2100d82ba
1 #include "first.h"
3 #include "safe_memclear.h"
5 #include <string.h>
7 #if !defined(HAVE_MEMSET_S) && !defined(HAVE_EXPLICIT_BZERO) && !defined(HAVE_EXPLICIT_MEMSET)
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)
15 UNUSED(buf);
16 UNUSED(len);
18 # endif /* HAVE_WEAK_SYMBOLS */
20 static void* safe_memset(void *s, int c, size_t n)
22 if (n > 0) {
23 volatile unsigned volatile_zero = 0;
24 volatile unsigned char *vs = (volatile unsigned char*)s;
26 do {
27 memset(s, c, n);
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 */
34 return s;
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)
41 memset_s(s, n, 0, n);
42 #elif defined(HAVE_EXPLICIT_BZERO)
43 explicit_bzero(s, n);
44 #elif defined(HAVE_EXPLICIT_MEMSET)
45 explicit_memset(s, 0, n);
46 #else
47 safe_memset(s, 0, n);
48 #endif