threads / patch / 25955

patch, 14 partsmsvc: Fix compilation errors in compat/win32/sys/poll.c

Subject: [PATCH 01/14] msvc: Fix compilation errors in compat/win32/sys/poll.c

## tl;dr

8 messages between Dec 4, 2010 and Dec 11, 2010. Diffs are folded; open one to read it.

replies: 7people: 4as markdown or json

Ramsay Jones· Dec 4, 2010, 18:54 UTC · lore

The msvc winsock2.h header file conditionally defines or declares poll() related symbols which cause many macro redefinition errors, a struct type redefinition error and syntax errors. These symbols are defined in support of the WSAPoll() API, new in Windows Vista, when the symbol _WIN32_WINNT is defined and _WIN32_WINNT >= 0x0600.

In order to avoid the compilation errors, we set _WIN32_WINNT to 0x0502 (which would target Windows Server 2003) prior to including the winsock2.h header file.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---
 compat/win32/sys/poll.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)
Show changes to compat/win32/sys/poll.c +3 −0
diff --git a/compat/win32/sys/poll.c b/compat/win32/sys/poll.c
index 7e74ebe..708a6c9 100644
--- a/compat/win32/sys/poll.c
+++ b/compat/win32/sys/poll.c
@@ -34,6 +34,9 @@
 
 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
 # define WIN32_NATIVE
+# if defined (_MSC_VER)
+#  define _WIN32_WINNT 0x0502
+# endif
 # include <winsock2.h>
 # include <windows.h>
 # include <io.h>
-- 
1.7.3
Jonathan Nieder· Dec 4, 2010, 20:45 UTC · re: Ramsay Jones · lore

Re: [PATCH 01/14] msvc: Fix compilation errors in compat/win32/sys/poll.c

Ramsay Jones wrote:
Show 5 quoted lines
> The msvc winsock2.h header file conditionally defines or declares
> poll() related symbols which cause many macro redefinition errors,
> a struct type redefinition error and syntax errors. These symbols
> are defined in support of the WSAPoll() API, new in Windows Vista,
> when the symbol _WIN32_WINNT is defined and _WIN32_WINNT >= 0x0600.

Could it make sense to define this at the same time as _GNU_SOURCE et al?

	#define _ALL_SOURCE 1
	#define _GNU_SOURCE 1
	#define _BSD_SOURCE 1
	#define _NETBSD_SOURCE 1
	#define _SGI_SOURCE 1
	#define _WIN32_WINNT 0x0502

Haven't thought carefully about the consequences, though; your patch is probably safer.

Ramsay Jones· Dec 7, 2010, 22:54 UTC · re: Jonathan Nieder · lore

Re: [PATCH 01/14] msvc: Fix compilation errors in compat/win32/sys/poll.c

Jonathan Nieder wrote:
Show 12 quoted lines
> Could it make sense to define this at the same time as _GNU_SOURCE et
> al?
> 
> 	#define _ALL_SOURCE 1
> 	#define _GNU_SOURCE 1
> 	#define _BSD_SOURCE 1
> 	#define _NETBSD_SOURCE 1
> 	#define _SGI_SOURCE 1
> 	#define _WIN32_WINNT 0x0502
> 
> Haven't thought carefully about the consequences, though; your patch
> is probably safer.
[Sorry for the late reply, I've been away from email for several days]

This would not fix the compilation errors, since compat/win32/sys/poll.c does not include the git-compat-util.h header file (and I *don't* think it should). ;-)

ATB, Ramsay Jones

Erik Faye-Lund· Dec 4, 2010, 21:12 UTC · re: Ramsay Jones · lore

Re: [PATCH 01/14] msvc: Fix compilation errors in compat/win32/sys/poll.c

On Sat, Dec 4, 2010 at 7:54 PM, Ramsay Jones <ramsay@ramsay1.demon.co.uk> wrote:
Show 30 quoted lines
>
> The msvc winsock2.h header file conditionally defines or declares
> poll() related symbols which cause many macro redefinition errors,
> a struct type redefinition error and syntax errors. These symbols
> are defined in support of the WSAPoll() API, new in Windows Vista,
> when the symbol _WIN32_WINNT is defined and _WIN32_WINNT >= 0x0600.
>
> In order to avoid the compilation errors, we set _WIN32_WINNT to
> 0x0502 (which would target Windows Server 2003) prior to including
> the winsock2.h header file.
>
> Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
> ---
>  compat/win32/sys/poll.c |    3 +++
>  1 files changed, 3 insertions(+), 0 deletions(-)
>
> diff --git a/compat/win32/sys/poll.c b/compat/win32/sys/poll.c
> index 7e74ebe..708a6c9 100644
> --- a/compat/win32/sys/poll.c
> +++ b/compat/win32/sys/poll.c
> @@ -34,6 +34,9 @@
>
>  #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
>  # define WIN32_NATIVE
> +# if defined (_MSC_VER)
> +#  define _WIN32_WINNT 0x0502
> +# endif
>  # include <winsock2.h>
>  # include <windows.h>
>  # include <io.h>
I have an almost identical patch in my msvc-tree, so FWIW:
Acked-by: Erik Faye-Lund <kusmabite@gmail.com>
Johannes Sixt· Dec 4, 2010, 21:22 UTC · re: Ramsay Jones · lore

Re: [PATCH 01/14] msvc: Fix compilation errors in compat/win32/sys/poll.c

On Samstag, 4. Dezember 2010, Ramsay Jones wrote:
Show 29 quoted lines
> The msvc winsock2.h header file conditionally defines or declares
> poll() related symbols which cause many macro redefinition errors,
> a struct type redefinition error and syntax errors. These symbols
> are defined in support of the WSAPoll() API, new in Windows Vista,
> when the symbol _WIN32_WINNT is defined and _WIN32_WINNT >= 0x0600.
>
> In order to avoid the compilation errors, we set _WIN32_WINNT to
> 0x0502 (which would target Windows Server 2003) prior to including
> the winsock2.h header file.
>
> Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
> ---
>  compat/win32/sys/poll.c |    3 +++
>  1 files changed, 3 insertions(+), 0 deletions(-)
>
> diff --git a/compat/win32/sys/poll.c b/compat/win32/sys/poll.c
> index 7e74ebe..708a6c9 100644
> --- a/compat/win32/sys/poll.c
> +++ b/compat/win32/sys/poll.c
> @@ -34,6 +34,9 @@
>
>  #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
>  # define WIN32_NATIVE
> +# if defined (_MSC_VER)
> +#  define _WIN32_WINNT 0x0502
> +# endif
>  # include <winsock2.h>
>  # include <windows.h>
>  # include <io.h>
Don't you have to do the same in git-compat-util.h?
-- Hannes
Ramsay Jones· Dec 8, 2010, 00:18 UTC · re: Johannes Sixt · lore

Re: [PATCH 01/14] msvc: Fix compilation errors in compat/win32/sys/poll.c

Johannes Sixt wrote:
Show 17 quoted lines
> On Samstag, 4. Dezember 2010, Ramsay Jones wrote:
>> diff --git a/compat/win32/sys/poll.c b/compat/win32/sys/poll.c
>> index 7e74ebe..708a6c9 100644
>> --- a/compat/win32/sys/poll.c
>> +++ b/compat/win32/sys/poll.c
>> @@ -34,6 +34,9 @@
>>
>>  #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
>>  # define WIN32_NATIVE
>> +# if defined (_MSC_VER)
>> +#  define _WIN32_WINNT 0x0502
>> +# endif
>>  # include <winsock2.h>
>>  # include <windows.h>
>>  # include <io.h>
> 
> Don't you have to do the same in git-compat-util.h?

No. compat/win32/sys/poll.c doesn't include git-compat-util.h (and I don't think it should), so adding it there would not solve the immediate problem. Also, I don't see any reason to restrict the API used by both MinGW and msvc in other parts of git.

ATB, Ramsay Jones

Johannes Sixt· Dec 8, 2010, 19:42 UTC · re: Ramsay Jones · lore

Re: [PATCH 01/14] msvc: Fix compilation errors in compat/win32/sys/poll.c

On Mittwoch, 8. Dezember 2010, Ramsay Jones wrote:
Show 21 quoted lines
> Johannes Sixt wrote:
> > On Samstag, 4. Dezember 2010, Ramsay Jones wrote:
> >> diff --git a/compat/win32/sys/poll.c b/compat/win32/sys/poll.c
> >> index 7e74ebe..708a6c9 100644
> >> --- a/compat/win32/sys/poll.c
> >> +++ b/compat/win32/sys/poll.c
> >> @@ -34,6 +34,9 @@
> >>
> >>  #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
> >>  # define WIN32_NATIVE
> >> +# if defined (_MSC_VER)
> >> +#  define _WIN32_WINNT 0x0502
> >> +# endif
> >>  # include <winsock2.h>
> >>  # include <windows.h>
> >>  # include <io.h>
> >
> > Don't you have to do the same in git-compat-util.h?
>
> No. compat/win32/sys/poll.c doesn't include git-compat-util.h (and I
> don't think it should),
I know and I agree.
> so adding it there would not solve the immediate 
> problem.

Didn't I say: "do the same..."? :-) So the question remains open. After all, by doing so, you would make sure that the rest of git sees the same API (struct definitions and #defined constants) as compat/win32/sys/poll.c, no?

-- Hannes
Johannes Sixt· Dec 11, 2010, 22:09 UTC · lore

Re: [PATCH 01/14] msvc: Fix compilation errors in compat/win32/sys/poll.c

On Samstag, 11. Dezember 2010, Ramsay Jones wrote:
> Before sending the patch, I generated a
> before and after pre-processor file and spent about 2-3 hours using tkdiff,
> vim, grep etc., to try and determine if it was a "safe" change.
Thanks. This dispels my concerns.
-- Hannes

← back to recent threads