> Isn't it better to check the value of macros itsef rather than checking for > system dependent macros that does not directly relate to the issue? > specifically for getaddrinfo.c case I think > #if EAI_NODATA != EAI_NONAME > is a better check than checking for > #if !defined(__MINGW64_VERSION_MAJOR) && !defined(WIN32_ONLY_COMPILER) > /* MSVC/WIN64 duplicate */ Yes it's better and it works for all described test environments.
> For the win32.h, I really don't understand why _WINSOCKAPI_ was defined before > <winsock2.h> > some google suggests that defining _WINSOCKAPI_ before <windows.h> prevents > inclusion of winsock.h but that does not have relation to inclusion of > <winsock2.h> and if <winsock2.h> is included first, it should be ok. > > If this guess is right, perhaps it could be better to remove the three lines. > #if !defined(WIN64) || defined(WIN32_ONLY_COMPILER) > #define _WINSOCKAPI_ > #endif I only changed this for consistency. For me, it works without that define in all test environments, too. > +/* __MINGW64_VERSION_MAJOR is related to both 32/64 bit gcc compiles by > + * mingw-w64, however it gots defined only after > Why not use __MINGW32__, which is defined without including any headers? At least in mingw32 v4.4.4 there is no crtdefs.h. I couldn't find a proper define that relates directly to that issue, so attached is a somewhat cumbersome MINGW version check. -- Regards, Lars Kanis
diff --git a/config/ac_func_accept_argtypes.m4 b/config/ac_func_accept_argtypes.m4 index 1e77179..a82788d 100644 --- a/config/ac_func_accept_argtypes.m4 +++ b/config/ac_func_accept_argtypes.m4 @@ -46,7 +46,7 @@ AC_DEFUN([AC_FUNC_ACCEPT_ARGTYPES], [AC_CACHE_VAL(ac_cv_func_accept_arg1,dnl [AC_CACHE_VAL(ac_cv_func_accept_arg2,dnl [AC_CACHE_VAL(ac_cv_func_accept_arg3,dnl - [for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL' 'SOCKET'; do + [for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL' 'SOCKET WSAAPI'; do for ac_cv_func_accept_arg1 in 'int' 'unsigned int' 'SOCKET'; do for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do diff --git a/configure b/configure index de9ba5a..150ceb0 100755 --- a/configure +++ b/configure @@ -18808,7 +18808,7 @@ else if test "${ac_cv_func_accept_arg3+set}" = set; then $as_echo_n "(cached) " >&6 else - for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL' 'SOCKET'; do + for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL' 'SOCKET WSAAPI'; do for ac_cv_func_accept_arg1 in 'int' 'unsigned int' 'SOCKET'; do for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do diff --git a/src/include/c.h b/src/include/c.h index 0391860..db2cb60 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -58,7 +58,7 @@ #endif #include "postgres_ext.h" -#if _MSC_VER >= 1400 || defined(WIN64) +#if _MSC_VER >= 1400 || (__MINGW32__ && (__GNUC__ > 4 || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6))) #define errcode __msvc_errcode #include <crtdefs.h> #undef errcode diff --git a/src/include/port/win32.h b/src/include/port/win32.h index 34f4004..2e72ecc 100644 --- a/src/include/port/win32.h +++ b/src/include/port/win32.h @@ -27,13 +27,6 @@ #undef ERROR -/* - * The Mingw64 headers choke if this is already defined - they - * define it themselves. - */ -#if !defined(WIN64) || defined(WIN32_ONLY_COMPILER) -#define _WINSOCKAPI_ -#endif #include <winsock2.h> #include <ws2tcpip.h> #include <windows.h> diff --git a/src/port/getaddrinfo.c b/src/port/getaddrinfo.c index db19878..721b335 100644 --- a/src/port/getaddrinfo.c +++ b/src/port/getaddrinfo.c @@ -328,12 +328,10 @@ gai_strerror(int errcode) case EAI_MEMORY: return "Not enough memory"; #endif -#ifdef EAI_NODATA -#if !defined(WIN64) && !defined(WIN32_ONLY_COMPILER) /* MSVC/WIN64 duplicate */ +#if defined(EAI_NODATA) && EAI_NODATA != EAI_NONAME /* MSVC/WIN64 duplicate */ case EAI_NODATA: return "No host data of that type was found"; #endif -#endif #ifdef EAI_SERVICE case EAI_SERVICE: return "Class type not found";
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers