Commit 09a6c909 authored by Tom Lane's avatar Tom Lane

Fix bogus freeaddrinfo() call in WIN32 code, extend gai_strerror to

cover more error codes.  Per Petr Jelinek.
parent 1a334362
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* *
* Copyright (c) 2003-2005, PostgreSQL Global Development Group * Copyright (c) 2003-2005, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/include/getaddrinfo.h,v 1.15 2005/07/27 12:44:10 neilc Exp $ * $PostgreSQL: pgsql/src/include/getaddrinfo.h,v 1.16 2005/08/25 17:50:59 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
/* Various macros that ought to be in <netdb.h>, but might not be */ /* Various macros that ought to be in <netdb.h>, but might not be */
#ifndef EAI_FAIL #ifndef EAI_FAIL
#ifndef WIN32
#define EAI_BADFLAGS (-1) #define EAI_BADFLAGS (-1)
#define EAI_NONAME (-2) #define EAI_NONAME (-2)
#define EAI_AGAIN (-3) #define EAI_AGAIN (-3)
...@@ -40,7 +41,18 @@ ...@@ -40,7 +41,18 @@
#define EAI_SERVICE (-8) #define EAI_SERVICE (-8)
#define EAI_MEMORY (-10) #define EAI_MEMORY (-10)
#define EAI_SYSTEM (-11) #define EAI_SYSTEM (-11)
#endif #else /* WIN32 */
#define EAI_AGAIN WSATRY_AGAIN
#define EAI_BADFLAGS WSAEINVAL
#define EAI_FAIL WSANO_RECOVERY
#define EAI_FAMILY WSAEAFNOSUPPORT
#define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
#define EAI_NODATA WSANO_DATA
#define EAI_NONAME WSAHOST_NOT_FOUND
#define EAI_SERVICE WSATYPE_NOT_FOUND
#define EAI_SOCKTYPE WSAESOCKTNOSUPPORT
#endif /* !WIN32 */
#endif /* !EAI_FAIL */
#ifndef AI_PASSIVE #ifndef AI_PASSIVE
#define AI_PASSIVE 0x0001 #define AI_PASSIVE 0x0001
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* Copyright (c) 2003-2005, PostgreSQL Global Development Group * Copyright (c) 2003-2005, PostgreSQL Global Development Group
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/port/getaddrinfo.c,v 1.18 2005/08/24 22:13:23 tgl Exp $ * $PostgreSQL: pgsql/src/port/getaddrinfo.c,v 1.19 2005/08/25 17:51:01 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -103,9 +103,12 @@ haveNativeWindowsIPv6routines(void) ...@@ -103,9 +103,12 @@ haveNativeWindowsIPv6routines(void)
{ {
/* We found a dll, so now get the addresses of the routines */ /* We found a dll, so now get the addresses of the routines */
getaddrinfo_ptr = GetProcAddress(hLibrary, "getaddrinfo"); getaddrinfo_ptr = (getaddrinfo_ptr_t) GetProcAddress(hLibrary,
freeaddrinfo_ptr = GetProcAddress(hLibrary, "freeaddrinfo"); "getaddrinfo");
getnameinfo_ptr = GetProcAddress(hLibrary, "getnameinfo"); freeaddrinfo_ptr = (freeaddrinfo_ptr_t) GetProcAddress(hLibrary,
"freeaddrinfo");
getnameinfo_ptr = (getnameinfo_ptr_t) GetProcAddress(hLibrary,
"getnameinfo");
/* /*
* If any one of the routines is missing, let's play it safe and * If any one of the routines is missing, let's play it safe and
...@@ -277,7 +280,7 @@ freeaddrinfo(struct addrinfo * res) ...@@ -277,7 +280,7 @@ freeaddrinfo(struct addrinfo * res)
*/ */
if (haveNativeWindowsIPv6routines()) if (haveNativeWindowsIPv6routines())
{ {
(*freeaddrinfo_ptr) (node, service, hintp, res); (*freeaddrinfo_ptr) (res);
return; return;
} }
#endif #endif
...@@ -310,6 +313,7 @@ gai_strerror(int errcode) ...@@ -310,6 +313,7 @@ gai_strerror(int errcode)
} }
return hstrerror(hcode); return hstrerror(hcode);
#else /* !HAVE_HSTRERROR */ #else /* !HAVE_HSTRERROR */
switch (errcode) switch (errcode)
...@@ -318,7 +322,31 @@ gai_strerror(int errcode) ...@@ -318,7 +322,31 @@ gai_strerror(int errcode)
return "Unknown host"; return "Unknown host";
case EAI_AGAIN: case EAI_AGAIN:
return "Host name lookup failure"; return "Host name lookup failure";
case EAI_FAIL: /* Errors below are probably WIN32 only */
#ifdef EAI_BADFLAGS
case EAI_BADFLAGS:
return "Invalid argument";
#endif
#ifdef EAI_FAMILY
case EAI_FAMILY:
return "Address family not supported";
#endif
#ifdef EAI_MEMORY
case EAI_MEMORY:
return "Not enough memory";
#endif
#ifdef EAI_NODATA
case EAI_NODATA:
return "No host data of that type was found";
#endif
#ifdef EAI_SERVICE
case EAI_SERVICE:
return "Class type not found";
#endif
#ifdef EAI_SOCKTYPE
case EAI_SOCKTYPE:
return "Socket type not supported";
#endif
default: default:
return "Unknown server error"; return "Unknown server error";
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment