blob: de79e4f3b66331c23654230afa28da79e85b0f61 [file] [log] [blame]
#define _GNU_SOURCE
#include <errno.h>
#include <netdb.h>
#include <stdlib.h>
struct hostent* gethostbyaddr(const void* a, socklen_t l, int af) {
static struct hostent* h;
size_t size = 63;
struct hostent* res;
int err;
do {
free(h);
h = malloc(size += size + 1);
if (!h) {
h_errno = NO_RECOVERY;
return 0;
}
err = gethostbyaddr_r(a, l, af, h, (void*)(h + 1), size - sizeof *h, &res, &h_errno);
} while (err == ERANGE);
return err ? 0 : h;
}