From e0dc0ffc6f2f2a4826156d7451e1dc6e80e53243 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 28 May 2020 02:06:51 +0200 Subject: [PATCH] Improve pattern for defining _WIN32_WINNT. Newer versions of the Windows API may not only add, but also remove API functions. Therefore, when the user is e.g. building for Windows 10, we should not set _WIN32_WINNT to e.g. Windows 8, as this may enable the use of APIs that were present in Windows 8 but removed in Windows 10. Suggested by Steve Lhomme in . * lib/ftruncate.c (_WIN32_WINNT): Don't set to a smaller value. * lib/sethostname.c (_WIN32_WINNT): Likewise. * lib/stat-w32.c (_WIN32_WINNT): Likewise. --- ChangeLog | 13 +++++++++++++ lib/ftruncate.c | 6 ++++-- lib/sethostname.c | 44 +++++++++++++++++++++++--------------------- lib/stat-w32.c | 6 ++++-- 4 files changed, 44 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index aa0843944d..ae76e2c955 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2020-05-27 Bruno Haible + + Improve pattern for defining _WIN32_WINNT. + Newer versions of the Windows API may not only add, but also remove API + functions. Therefore, when the user is e.g. building for Windows 10, we + should not set _WIN32_WINNT to e.g. Windows 8, as this may enable the + use of APIs that were present in Windows 8 but removed in Windows 10. + Suggested by Steve Lhomme in + . + * lib/ftruncate.c (_WIN32_WINNT): Don't set to a smaller value. + * lib/sethostname.c (_WIN32_WINNT): Likewise. + * lib/stat-w32.c (_WIN32_WINNT): Likewise. + 2020-05-27 Bruno Haible javacomp: Make more robust in multithreaded applications. diff --git a/lib/ftruncate.c b/lib/ftruncate.c index a1856374e8..2514075e51 100644 --- a/lib/ftruncate.c +++ b/lib/ftruncate.c @@ -30,8 +30,10 @@ argument. So, define a 64-bit safe SetFileSize function ourselves. */ /* Ensure that declares GetFileSizeEx. */ -# undef _WIN32_WINNT -# define _WIN32_WINNT _WIN32_WINNT_WIN2K +# if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN2K) +# undef _WIN32_WINNT +# define _WIN32_WINNT _WIN32_WINNT_WIN2K +# endif /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN diff --git a/lib/sethostname.c b/lib/sethostname.c index 1be69beabb..96318fb801 100644 --- a/lib/sethostname.c +++ b/lib/sethostname.c @@ -23,11 +23,11 @@ /* Unix API. */ /* Specification. */ -#include +# include -#include -#include -#include +# include +# include +# include /* Set up to LEN chars of NAME as system hostname. Return 0 if ok, set errno and return -1 on error. */ @@ -43,7 +43,7 @@ sethostname (const char *name, size_t len) return -1; } -#ifdef __minix /* Minix */ +# ifdef __minix /* Minix */ { FILE *hostf; int r = 0; @@ -76,38 +76,40 @@ sethostname (const char *name, size_t len) return r; } -#else +# else /* For platforms that we don't have a better option for, simply bail out. */ errno = ENOSYS; return -1; -#endif +# endif } #else /* Native Windows API. Also used on Cygwin. */ /* Ensure that declares SetComputerNameEx. */ -#undef _WIN32_WINNT -#define _WIN32_WINNT _WIN32_WINNT_WIN2K +# if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN2K) +# undef _WIN32_WINNT +# define _WIN32_WINNT _WIN32_WINNT_WIN2K +# endif -#define WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN /* Specification. */ -#include +# include -#include -#include -#include +# include +# include +# include -#include +# include /* The mingw header files don't define GetComputerNameEx, SetComputerNameEx. */ -#ifndef GetComputerNameEx -# define GetComputerNameEx GetComputerNameExA -#endif -#ifndef SetComputerNameEx -# define SetComputerNameEx SetComputerNameExA -#endif +# ifndef GetComputerNameEx +# define GetComputerNameEx GetComputerNameExA +# endif +# ifndef SetComputerNameEx +# define SetComputerNameEx SetComputerNameExA +# endif /* Set up to LEN chars of NAME as system hostname. Return 0 if ok, set errno and return -1 on error. */ diff --git a/lib/stat-w32.c b/lib/stat-w32.c index 296ccf18ca..c4b5de9a71 100644 --- a/lib/stat-w32.c +++ b/lib/stat-w32.c @@ -21,8 +21,10 @@ #if defined _WIN32 && ! defined __CYGWIN__ /* Ensure that defines FILE_ID_INFO. */ -#undef _WIN32_WINNT -#define _WIN32_WINNT _WIN32_WINNT_WIN8 +#if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8) +# undef _WIN32_WINNT +# define _WIN32_WINNT _WIN32_WINNT_WIN8 +#endif #include #include -- 2.39.5