Hi Steve, > When building for UWP it's particularly important as a lot of APIs may > be hidden if you use the proper values and they are hidden because you > shouldn't use them. Forcing to use them when they shouldn't will lead to > apps that don't run.
Oh, so Microsoft is not only adding new APIs from one version to the next, but sometimes also removing APIs. Indeed, the Microsoft doc says this: "Over the years, Windows APIs and data types have been added, and sometimes changed or removed." <https://docs.microsoft.com/en-us/cpp/porting/overview-of-potential-upgrade-issues-visual-cpp> Applied like this. (I couldn't take your patch as-is, because in Gnulib we indent preprocessor lines in a particular way.) 2020-05-27 Bruno Haible <br...@clisp.org> 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 <rob...@ycbcr.xyz> in <https://lists.gnu.org/archive/html/bug-gnulib/2020-05/msg00318.html>. * 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. diff --git a/lib/ftruncate.c b/lib/ftruncate.c index a185637..2514075 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 <windows.h> 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 1be69be..96318fb 100644 --- a/lib/sethostname.c +++ b/lib/sethostname.c @@ -23,11 +23,11 @@ /* Unix API. */ /* Specification. */ -#include <unistd.h> +# include <unistd.h> -#include <errno.h> -#include <stdio.h> -#include <limits.h> +# include <errno.h> +# include <stdio.h> +# include <limits.h> /* 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 <windows.h> 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 <unistd.h> +# include <unistd.h> -#include <errno.h> -#include <limits.h> -#include <string.h> +# include <errno.h> +# include <limits.h> +# include <string.h> -#include <windows.h> +# include <windows.h> /* 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 296ccf1..c4b5de9 100644 --- a/lib/stat-w32.c +++ b/lib/stat-w32.c @@ -21,8 +21,10 @@ #if defined _WIN32 && ! defined __CYGWIN__ /* Ensure that <windows.h> 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 <sys/types.h> #include <sys/stat.h>