10a11,14
>  * Windows may or may not have these routines, so we handle Windows special
>  * by dynamically checking for their existance.  If they already exist, we
>  * use the Windows native routines, but if not, we use our own.
>  *
15c19
<  *	  $PostgreSQL: pgsql/src/port/getaddrinfo.c,v 1.17 2005/07/28 04:03:14 tgl Exp $
---
>  *	  $PostgreSQL: pgsql/src/port/getaddrinfo.c,v 1.16 2005/01/01 20:44:33 tgl Exp $
31a36,121
> 
> #ifdef WIN32
> 
> #define WIN32_LEAN_AND_MEAN
> /* Bring in windows.h for LoadLibrary, FreeLibrary, and GetProcAddress routines */
> #include <windows.h>
> 
> /* 
>  * The native routines may or may not exist on the Windows platform we are on,
>  * so we dynamically look up the routines, and call them via function pointers.
>  * Here we need to declare what the function pointers look like
>  */
> typedef
> int
> (__stdcall * getaddrinfo_ptr_t)(const char * nodename, const char * servname,
>      const struct addrinfo * hints, struct addrinfo ** res);
> 
> typedef
> void
> (__stdcall * freeaddrinfo_ptr_t)(struct addrinfo * ai);
> 
> typedef
> int
> (__stdcall * getnameinfo_ptr_t)(const struct sockaddr * sa, int salen,
>      char *  host, int hostlen, char * serv, int servlen, int flags);
> 
> /* static pointers to the native Windows IPv6 routines, so we only do the lookup once. */
> static getaddrinfo_ptr_t getaddrinfo_ptr = NULL;
> static freeaddrinfo_ptr_t freeaddrinfo_ptr = NULL;
> static getnameinfo_ptr_t getnameinfo_ptr = NULL;
> 
> static
> bool haveNativeWindowsIPv6routines(void)
> {
>     void * hLibrary  = NULL;
>     static bool  alreadyLookedForIpv6routines    = FALSE;
>    
>     if (alreadyLookedForIpv6routines)            
>         return (getaddrinfo_ptr != NULL);
> 
>     /* 
> 	 * For Windows XP and Windows 2003 (and longhorn/vista), the IPv6
>      * routines are present the WinSock 2 library (ws2_32.dll).  Try that first
> 	 */
> 
>     hLibrary = LoadLibraryA("ws2_32");
> 
> 	if (hLibrary == NULL || GetProcAddress(hLibrary, "getaddrinfo") == NULL)
> 	{
> 		/* Well, ws2_32 doesn't exist, or more likely doesn't have getaddrinfo. */
> 		if (hLibrary != NULL)
> 			FreeLibrary(hLibrary);
> 
> 		/* In Windows 2000, there was only the IPv6 Technology Preview        
> 		 * look in the IPv6 WinSock library (wship6.dll).
> 		 */
> 
> 		hLibrary = LoadLibraryA("wship6");
> 	}
> 
> 	/* If hLibrary is null, we couldn't find a dll that supports the functions */
>     if (hLibrary != NULL)
>     {
> 		/* 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");
> 
> 		/* If any one of the routines is missing, let's play it safe and ignore them all */
>         if (getaddrinfo_ptr == NULL || freeaddrinfo_ptr == NULL || getnameinfo_ptr == NULL)
>         {
>             FreeLibrary(hLibrary);
>             hLibrary = NULL;
> 			getaddrinfo_ptr = NULL;
> 			freeaddrinfo_ptr = NULL;
> 			getnameinfo_ptr = NULL;
>         }
>     }
>         
>     alreadyLookedForIpv6routines = TRUE;
>     return (getaddrinfo_ptr != NULL); 
> }
> #endif 
> 
> 
49a140,148
> #ifdef WIN32
> 	/* 
> 	 * If Windows has native IPv6 support, use the native Windows routine.
> 	 * Otherwise, fall through and use our own code.
> 	 */
> 	if (haveNativeWindowsIPv6routines())
> 		return (*getaddrinfo_ptr)(node,service,hintp,res);
> #endif
> 
162a262,272
> #ifdef WIN32
> 		/* 
> 		 * If Windows has native IPv6 support, use the native Windows routine.
> 		 * Otherwise, fall through and use our own code.
> 		 */
> 		if (haveNativeWindowsIPv6routines())
> 		{
> 			(*freeaddrinfo_ptr)(node,service,hintp,res);
> 			return;
> 		}
> #endif
218a329,338
> 
> #ifdef WIN32
> 	/* 
> 	 * If Windows has native IPv6 support, use the native Windows routine.
> 	 * Otherwise, fall through and use our own code.
> 	 */
> 	if (haveNativeWindowsIPv6routines())
> 		return (*getnameinfo_ptr)(sa,salen,node,nodelen,service,servicelen,flags);
> #endif
> 
