1#define _GNU_SOURCE
2
3#include <netdb.h>
4#include <errno.h>
5#include <stdlib.h>
6
7struct hostent *gethostbyaddr(const void *a, socklen_t l, int af)
8{
9	static struct hostent *h;
10	size_t size = 63;
11	struct hostent *res;
12	int err;
13	do {
14		free(h);
15		h = malloc(size+=size+1);
16		if (!h) {
17			h_errno = NO_RECOVERY;
18			return 0;
19		}
20		err = gethostbyaddr_r(a, l, af, h,
21			(void *)(h+1), size-sizeof *h, &res, &h_errno);
22	} while (err == ERANGE);
23	return err ? 0 : h;
24}
25