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