summaryrefslogtreecommitdiff
path: root/main/explicit_bzero.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/explicit_bzero.c')
-rw-r--r--main/explicit_bzero.c21
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
/*