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

Previous thread: Can't seem to commit by weloki on Saturday, December 4, 2010 - 9:33 am. (3 messages)

Next thread: [PATCH 03/14] msvc: Fix build by adding missing INTMAX_MAX define by Ramsay Jones on Saturday, December 4, 2010 - 11:57 am. (2 messages)
From: Ramsay Jones
Date: Saturday, December 4, 2010 - 11:54 am

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>
-- 
1.7.3


--

From: Jonathan Nieder
Date: Saturday, December 4, 2010 - 1:45 pm

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

From: Ramsay Jones
Date: Tuesday, December 7, 2010 - 3:54 pm

[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



--

From: Erik Faye-Lund
Date: Saturday, December 4, 2010 - 2:12 pm

I have an almost identical patch in my msvc-tree, so FWIW:

Acked-by: Erik Faye-Lund <kusmabite@gmail.com>
--

From: Johannes Sixt
Date: Saturday, December 4, 2010 - 2:22 pm

Don't you have to do the same in git-compat-util.h?

-- Hannes

--

From: Ramsay Jones
Date: Tuesday, December 7, 2010 - 5:18 pm

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

--

From: Johannes Sixt
Date: Wednesday, December 8, 2010 - 12:42 pm

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

From: Johannes Sixt
Date: Saturday, December 11, 2010 - 3:09 pm

Thanks. This dispels my concerns.

-- Hannes
--

Previous thread: Can't seem to commit by weloki on Saturday, December 4, 2010 - 9:33 am. (3 messages)

Next thread: [PATCH 03/14] msvc: Fix build by adding missing INTMAX_MAX define by Ramsay Jones on Saturday, December 4, 2010 - 11:57 am. (2 messages)