bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
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>
> 


      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).