diff options
Diffstat (limited to 'main/explicit_bzero.c')
| -rw-r--r-- | main/explicit_bzero.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/main/explicit_bzero.c b/main/explicit_bzero.c index e44fb433df..990a8047bc 100644 --- a/main/explicit_bzero.c +++ b/main/explicit_bzero.c @@ -16,8 +16,6 @@ +----------------------------------------------------------------------+ */ -/* $Id$ */ - #include "php.h" #ifndef HAVE_EXPLICIT_BZERO @@ -30,15 +28,22 @@ #include <string.h> -__attribute__((weak)) void -__explicit_bzero_hook(void *dst, size_t siz) -{ -} - PHPAPI void php_explicit_bzero(void *dst, size_t siz) { +#if HAVE_EXPLICIT_MEMSET + explicit_memset(dst, 0, siz); +#elif defined(PHP_WIN32) + RtlSecureZeroMemory(dst, siz); +#elif defined(__GNUC__) memset(dst, 0, siz); - __explicit_bzero_hook(dst, siz); + asm __volatile__("" :: "r"(dst) : "memory"); +#else + size_t i = 0; + volatile unsigned char *buf = (volatile unsigned char *)dst; + + for (; i < siz; i ++) + buf[i] = 0; +#endif } #endif /* |
