Ejemplo n.º 1
0
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
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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
}