struct hostent * tds_gethostbyaddr_r(const char *addr, int len, int type, struct hostent *result, char *buffer, int buflen, int *h_errnop) { #if defined(NETDB_REENTRANT) return gethostbyaddr(addr, len, type); #elif defined(HAVE_GETIPNODEBYADDR) struct hostent *he = getipnodebyaddr(addr, len, type, h_errnop); if (!he) return NULL; if (tds_copy_hostent(he, result, buffer, buflen)) { errno = ENOMEM; if (h_errnop) *h_errnop = NETDB_INTERNAL; freehostent(he); return NULL; } freehostent(he); return result; #elif defined(HAVE_FUNC_GETHOSTBYADDR_R_8) if (gethostbyaddr_r(addr, len, type, result, buffer, buflen, &result, h_errnop)) return NULL; return result; #elif defined(HAVE_FUNC_GETHOSTBYADDR_R_7) result = gethostbyaddr_r(addr, len, type, result, buffer, buflen, h_errnop); return result; #elif defined(HAVE_FUNC_GETHOSTBYADDR_R_5) struct hostent_data *data = (struct hostent_data *) buffer; memset(buffer, 0, buflen); if (gethostbyaddr_r(addr, len, type, result, data)) { *h_errnop = 0; result = NULL; } return result; #elif defined(TDS_NO_THREADSAFE) return gethostbyaddr(addr, len, type); #else #error gethostbyaddr_r style unknown #endif }
struct hostent * tds_gethostbyname_r(const char *servername, struct hostent *result, char *buffer, int buflen, int *h_errnop) { struct hostent *he = getipnodebyname(servername, AF_INET, 0, h_errnop); if (!he) return NULL; if (tds_copy_hostent(he, result, buffer, buflen)) { errno = ENOMEM; if (h_errnop) *h_errnop = NETDB_INTERNAL; freehostent(he); return NULL; } freehostent(he); return result; }
struct hostent * tds_gethostbyname_r(const char *servername, struct hostent *result, char *buffer, int buflen, int *h_errnop) { #if defined(NETDB_REENTRANT) return gethostbyname(servername); /* we have a better replacements */ #elif defined(HAVE_GETIPNODEBYNAME) struct hostent *he = getipnodebyname(servername, AF_INET, 0, h_errnop); if (!he) return NULL; if (tds_copy_hostent(he, result, buffer, buflen)) { errno = ENOMEM; if (h_errnop) *h_errnop = NETDB_INTERNAL; freehostent(he); return NULL; } freehostent(he); return result; #elif defined(HAVE_FUNC_GETHOSTBYNAME_R_6) if (gethostbyname_r(servername, result, buffer, buflen, &result, h_errnop)) return NULL; return result; #elif defined(HAVE_FUNC_GETHOSTBYNAME_R_5) result = gethostbyname_r(servername, result, buffer, buflen, h_errnop); return result; #elif defined(HAVE_FUNC_GETHOSTBYNAME_R_3) struct hostent_data *data = (struct hostent_data *) buffer; memset(buffer, 0, buflen); if (gethostbyname_r(servername, result, data)) { *h_errnop = 0; result = NULL; } return result; #else #error gethostbyname_r style unknown #endif }