blob: 98a41e865835a4c70001dd64e13e997833501111 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#define _GNU_SOURCE
#include <netdb.h>
#include <errno.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 res;
}
#ifdef TEST
int
main(void) {
return 0;
}
#endif
|