master
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 res;
24}