mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-15 21:10:26 +02:00
7559d8ebfa
Backpatch-through: update all files in master, backpatch legal files through 9.4
56 lines
1.0 KiB
C
56 lines
1.0 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* explicit_bzero.c
|
|
*
|
|
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
*
|
|
* IDENTIFICATION
|
|
* src/port/explicit_bzero.c
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#include "c.h"
|
|
|
|
#if defined(HAVE_MEMSET_S)
|
|
|
|
void
|
|
explicit_bzero(void *buf, size_t len)
|
|
{
|
|
(void) memset_s(buf, len, 0, len);
|
|
}
|
|
|
|
#elif defined(WIN32)
|
|
|
|
void
|
|
explicit_bzero(void *buf, size_t len)
|
|
{
|
|
(void) SecureZeroMemory(buf, len);
|
|
}
|
|
|
|
#else
|
|
|
|
/*
|
|
* Indirect call through a volatile pointer to hopefully avoid dead-store
|
|
* optimisation eliminating the call. (Idea taken from OpenSSH.) We can't
|
|
* assume bzero() is present either, so for simplicity we define our own.
|
|
*/
|
|
|
|
static void
|
|
bzero2(void *buf, size_t len)
|
|
{
|
|
memset(buf, 0, len);
|
|
}
|
|
|
|
static void (* volatile bzero_p)(void *, size_t) = bzero2;
|
|
|
|
void
|
|
explicit_bzero(void *buf, size_t len)
|
|
{
|
|
bzero_p(buf, len);
|
|
}
|
|
|
|
#endif
|