Don't use Gnulib's explicit_bzero on MS-Windows

This is a preventive change, since Gnulib was recently changed
its explicit_bzero to call SecureZeroMemory on MS-Windows,
disregarding systems older than XP, which didn't have it.

* src/w32.c (explicit_bzero): New function.

* nt/mingw-cfg.site (ac_cv_func_explicit_bzero): Avoid using the
Gnulib replacement for explicit_bzero.
* nt/inc/ms-w32.h (explicit_bzero): Add prototype.
This commit is contained in:
Eli Zaretskii 2020-04-19 19:38:53 +03:00
parent 65990f47cc
commit 3f8b771da9
3 changed files with 22 additions and 0 deletions

View file

@ -440,6 +440,7 @@ extern int alarm (int);
extern int sys_kill (pid_t, int);
extern void explicit_bzero (void *, size_t);
/* For integration with MSDOS support. */
#define getdisk() (_getdrive () - 1)

View file

@ -109,6 +109,7 @@ ac_cv_func_futimens=not-needed
gl_cv_func_futimens_works="not-needed-so-yes"
ac_cv_func_utimensat=yes
gl_cv_func_utimensat_works=yes
ac_cv_func_explicit_bzero=yes
# Aliased to _commit in ms-w32.h
ac_cv_func_fsync=yes
ac_cv_func_fdatasync=yes

View file

@ -2370,6 +2370,26 @@ srandom (int seed)
iz = rand () % RAND_MAX_Z;
}
/* Emulate explicit_bzero. This is to avoid using the Gnulib version,
because it calls SecureZeroMemory at will, disregarding systems
older than Windows XP, which didn't have that function. We want to
avoid having that function as dependency in builds that need to
support systems older than Windows XP, otherwise Emacs will refuse
to start on those systems. */
void
explicit_bzero (void *buf, size_t len)
{
#if _WIN32_WINNT >= 0x0501
/* We are compiling for XP or newer, most probably with MinGW64.
We can use SecureZeroMemory. */
SecureZeroMemory (buf, len);
#else
memset (buf, 0, len);
/* Compiler barrier. */
asm volatile ("" ::: "memory");
#endif
}
/* Return the maximum length in bytes of a multibyte character
sequence encoded in the current ANSI codepage. This is required to
correctly walk the encoded file names one character at a time. */