// explicit_bzero() is supported both on GNU and BSD
// memset_s() is supported on Windows and BSD, lacked in glibc
void
Zero(void *dst, size_t len)
{
// Based on GnuTLS gnutls_memset
if (len == 0) {
return;
}
volatile unsigned volatile_zero = 0;
volatile unsigned char *vdata = (volatile unsigned char *)dst;
do {
memset(dst, '\x00', len);
} while (vdata[volatile_zero] != '\x00');
}