diff options
Diffstat (limited to 'src/port/getaddrinfo.c')
-rw-r--r-- | src/port/getaddrinfo.c | 59 |
1 files changed, 25 insertions, 34 deletions
diff --git a/src/port/getaddrinfo.c b/src/port/getaddrinfo.c index cc584a2209a..011437bb9b7 100644 --- a/src/port/getaddrinfo.c +++ b/src/port/getaddrinfo.c @@ -3,12 +3,16 @@ * getaddrinfo.c * Support getaddrinfo() on platforms that don't have it. * + * We also supply getnameinfo() here, assuming that the platform will have + * it if and only if it has getaddrinfo(). If this proves false on some + * platform, we'll need to split this file and provide a separate configure + * test for getnameinfo(). * - * Copyright (c) 2003, PostgreSQL Global Development Group * + * Copyright (c) 2003, PostgreSQL Global Development Group * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/port/getaddrinfo.c,v 1.9 2003/06/23 23:52:00 momjian Exp $ + * $Header: /cvsroot/pgsql/src/port/getaddrinfo.c,v 1.10 2003/07/23 23:30:41 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -22,9 +26,6 @@ #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> -#ifdef HAVE_UNIX_SOCKETS -#include <sys/un.h> -#endif #endif #include "getaddrinfo.h" @@ -124,8 +125,9 @@ getaddrinfo(const char *node, const char *service, if (service) sin.sin_port = htons((unsigned short) atoi(service)); -#if SALEN - sin.sin_len = sizeof(sin); + +#ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN + sin.sin_len = sizeof(sin); #endif ai = malloc(sizeof(*ai)); @@ -209,7 +211,7 @@ gai_strerror(int errcode) } /* - * Convert an address to a hostname. + * Convert an ipv4 address to a hostname. * * Bugs: - Only supports NI_NUMERICHOST and NI_NUMERICSERV * It will never resolv a hostname. @@ -217,11 +219,9 @@ gai_strerror(int errcode) */ int getnameinfo(const struct sockaddr *sa, int salen, - char *node, int nodelen, - char *service, int servicelen, int flags) + char *node, int nodelen, + char *service, int servicelen, int flags) { - int ret = -1; - /* Invalid arguments. */ if (sa == NULL || (node == NULL && service == NULL)) { @@ -242,41 +242,32 @@ getnameinfo(const struct sockaddr *sa, int salen, } #endif - if (service) + if (node) { + int ret = -1; + if (sa->sa_family == AF_INET) { - ret = snprintf(service, servicelen, "%d", - ntohs(((struct sockaddr_in *)sa)->sin_port)); - } -#ifdef HAVE_UNIX_SOCKETS - else if (sa->sa_family == AF_UNIX) - { - ret = snprintf(service, servicelen, "%s", - ((struct sockaddr_un *)sa)->sun_path); + char *p; + p = inet_ntoa(((struct sockaddr_in *)sa)->sin_addr); + ret = snprintf(node, nodelen, "%s", p); } -#endif - if (ret == -1 || ret > servicelen) + if (ret == -1 || ret > nodelen) { return EAI_MEMORY; } } - if (node) + if (service) { + int ret = -1; + if (sa->sa_family == AF_INET) { - char *p; - p = inet_ntoa(((struct sockaddr_in *)sa)->sin_addr); - ret = snprintf(node, nodelen, "%s", p); - } -#ifdef HAVE_UNIX_SOCKETS - else if (sa->sa_family == AF_UNIX) - { - ret = snprintf(node, nodelen, "%s", "localhost"); + ret = snprintf(service, servicelen, "%d", + ntohs(((struct sockaddr_in *)sa)->sin_port)); } -#endif - if (ret == -1 || ret > nodelen) + if (ret == -1 || ret > servicelen) { return EAI_MEMORY; } |