/
balmaster
/
postgres
Обзор
Документация
Войти
/
balmaster
/
postgres
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/port/explicit_bzero.c
73 строки
1 KB
Peter Eisentraut
Check for memset_explicit() and explicit_memset()
02 мар 2026, 09:51
02 мар 2026, 09:51
386ca39
Код
Авторство
О чём код?
/*------------------------------------------------------------------------- * * explicit_bzero.c * * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION * src/port/explicit_bzero.c * *------------------------------------------------------------------------- */ #define __STDC_WANT_LIB_EXT1__ 1 /* needed to access memset_s() */ #include "c.h" #if defined(HAVE_MEMSET_EXPLICIT) void explicit_bzero(void *buf, size_t len) { (void) memset_explicit(buf, 0, len); } #elif defined(HAVE_EXPLICIT_MEMSET) void explicit_bzero(void *buf, size_t len) { (void) explicit_memset(buf, 0, len); } #elif HAVE_DECL_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