#include	"gai_hdr.h"

/* include getnameinfo */
int
getnameinfo(const struct sockaddr *sa, socklen_t salen,
		    char *host, size_t hostlen,
			char *serv, size_t servlen, int flags)
{

	switch (sa->sa_family) {
#ifdef	IPv4
	case AF_INET: {
		struct sockaddr_in	*sain = (struct sockaddr_in *) sa;

		return(gn_ipv46(host, hostlen, serv, servlen,
						&sain->sin_addr, sizeof(struct in_addr),
						AF_INET, sain->sin_port, flags));
	}
#endif

#ifdef	IPv6
	case AF_INET6: {
		struct sockaddr_in6	*sain = (struct sockaddr_in6 *) sa;

		return(gn_ipv46(host, hostlen, serv, servlen,
						&sain->sin6_addr, sizeof(struct in6_addr),
						AF_INET6, sain->sin6_port, flags));
	}
#endif

#ifdef	UNIXdomain
	case AF_LOCAL: {
		struct sockaddr_un	*un = (struct sockaddr_un *) sa;

		if (hostlen > 0)
			snprintf(host, hostlen, "%s", "/local");
		if (servlen > 0)
			snprintf(serv, servlen, "%s", un->sun_path);
		return(0);
	}
#endif

	default:
		return(1);
	}
}
/* end getnameinfo */


syntax highlighted by Code2HTML, v. 0.9.1