From: Steve Lhomme <robux4@ycbcr.xyz>
To: bug-gnulib@gnu.org
Subject: Re: [PATCH v2] win32: don't force _WIN32_WINNT to a lower version
Date: Thu, 28 May 2020 07:33:31 +0200 [thread overview]
Message-ID: <b3fed0ba-68e2-0d86-36e9-0005fda91f4d@ycbcr.xyz> (raw)
In-Reply-To: <2895607.v3o5bAyo4j@omega>
On 2020-05-28 2:12, Bruno Haible wrote:
> Hi Steve,
Hi Bruno,
>> 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>
I've never been hit by an API removal. But with UWP and win10 variants
they made a set of API's available on all devices but not all of them
(the full API set is left on Desktop, for now). So apps targeting *all*
win10 devices should restrict to these API's.
https://docs.microsoft.com/en-us/uwp/win32-and-com/win32-apis
> Applied like this. (I couldn't take your patch as-is, because in Gnulib
> we indent preprocessor lines in a particular way.)
Thanks a lot.
> 2020-05-27 Bruno Haible <bruno@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 <robux4@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>
>
prev parent reply other threads:[~2020-05-28 5:33 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-26 11:43 [PATCH v2] win32: don't force _WIN32_WINNT to a lower version Steve Lhomme
2020-05-26 20:38 ` Bruno Haible
2020-05-27 6:16 ` Steve Lhomme
2020-05-28 0:12 ` Bruno Haible
2020-05-28 5:33 ` Steve Lhomme [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://lists.gnu.org/mailman/listinfo/bug-gnulib
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b3fed0ba-68e2-0d86-36e9-0005fda91f4d@ycbcr.xyz \
--to=robux4@ycbcr.xyz \
--cc=bug-gnulib@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).