From 09a6c909458b44c51d0c8a8b58ae2590c7815b9f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 25 Aug 2005 17:51:01 +0000 Subject: [PATCH] Fix bogus freeaddrinfo() call in WIN32 code, extend gai_strerror to cover more error codes. Per Petr Jelinek. --- src/include/getaddrinfo.h | 16 ++++++++++++++-- src/port/getaddrinfo.c | 42 +++++++++++++++++++++++++++++++++++------- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/include/getaddrinfo.h b/src/include/getaddrinfo.h index 8c430bf5d8..3561aac091 100644 --- a/src/include/getaddrinfo.h +++ b/src/include/getaddrinfo.h @@ -15,7 +15,7 @@ * * 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 @@ /* Various macros that ought to be in , but might not be */ #ifndef EAI_FAIL +#ifndef WIN32 #define EAI_BADFLAGS (-1) #define EAI_NONAME (-2) #define EAI_AGAIN (-3) @@ -40,7 +41,18 @@ #define EAI_SERVICE (-8) #define EAI_MEMORY (-10) #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 #define AI_PASSIVE 0x0001 diff --git a/src/port/getaddrinfo.c b/src/port/getaddrinfo.c index 77757d3a79..1bdb60503b 100644 --- a/src/port/getaddrinfo.c +++ b/src/port/getaddrinfo.c @@ -16,7 +16,7 @@ * Copyright (c) 2003-2005, PostgreSQL Global Development Group * * 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) { /* We found a dll, so now get the addresses of the routines */ - getaddrinfo_ptr = GetProcAddress(hLibrary, "getaddrinfo"); - freeaddrinfo_ptr = GetProcAddress(hLibrary, "freeaddrinfo"); - getnameinfo_ptr = GetProcAddress(hLibrary, "getnameinfo"); + getaddrinfo_ptr = (getaddrinfo_ptr_t) GetProcAddress(hLibrary, + "getaddrinfo"); + 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 @@ -277,7 +280,7 @@ freeaddrinfo(struct addrinfo * res) */ if (haveNativeWindowsIPv6routines()) { - (*freeaddrinfo_ptr) (node, service, hintp, res); + (*freeaddrinfo_ptr) (res); return; } #endif @@ -310,7 +313,8 @@ gai_strerror(int errcode) } return hstrerror(hcode); -#else /* !HAVE_HSTRERROR */ + +#else /* !HAVE_HSTRERROR */ switch (errcode) { @@ -318,7 +322,31 @@ gai_strerror(int errcode) return "Unknown host"; case EAI_AGAIN: 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: return "Unknown server error"; } -- 2.11.0