598e2241a9f808e8ecafb72e24d7d6959cb49a28
[musl] / src / network / gethostbyaddr.c
1 #define _GNU_SOURCE
2
3 #include <netdb.h>
4 #include <errno.h>
5 #include <stdlib.h>
6
7 struct 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 }