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>