Annotation of embedaddon/lighttpd/src/safe_memclear.c, revision 1.1.1.1
1.1 misho 1: #include "first.h"
2:
3: #include "settings.h"
4:
5: #include "safe_memclear.h"
6:
7: #include <string.h>
8:
9: #if !defined(HAVE_MEMSET_S) && !defined(HAVE_EXPLICIT_BZERO)
10:
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);
14:
15: void __li_safe_memset_hook(void *buf, size_t len)
16: {
17: UNUSED(buf);
18: UNUSED(len);
19: }
20: # endif /* HAVE_WEAK_SYMBOLS */
21:
22: static void* safe_memset(void *s, int c, size_t n)
23: {
24: if (n > 0) {
25: volatile unsigned volatile_zero = 0;
26: volatile unsigned char *vs = (volatile unsigned char*)s;
27:
28: do {
29: memset(s, c, n);
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 */
34: }
35:
36: return s;
37: }
38: #endif /* !defined(HAVE_MEMSET_S) && !defined(HAVE_EXPLICIT_BZERO) */
39:
40:
41: void safe_memclear(void *s, size_t n) {
42: #if defined(HAVE_MEMSET_S)
43: memset_s(s, n, 0, n);
44: #elif defined(HAVE_EXPLICIT_BZERO)
45: explicit_bzero(s, n);
46: #else
47: safe_memset(s, 0, n);
48: #endif
49: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>