]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't use Gnulib's explicit_bzero on MS-Windows
authorEli Zaretskii <eliz@gnu.org>
Sun, 19 Apr 2020 16:38:53 +0000 (19:38 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sun, 19 Apr 2020 16:38:53 +0000 (19:38 +0300)
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.

nt/inc/ms-w32.h
nt/mingw-cfg.site
src/w32.c

index 1cce2c3062f4ba888f165fe14e5da26e874c5ef1..cbe35ea1053f0772eaa4ea6fcf8199e93fc87277 100644 (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)
index 2271eef98d6f649c1de2f58e38430e0f59606aa4..2e898c745e51392a4d528e9a72ff422f6cf17e75 100644 (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
index 42c832a5937025342902ef163493a5b5e157cb17..0f69e652a573df4868498c2b57f5ff6d3bf8e2a7 100644 (file)
--- a/src/w32.c
+++ b/src/w32.c
@@ -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.  */