summaryrefslogtreecommitdiff
path: root/libc/dns/include/resolv_static.h
blob: 83a435a7c932f8c9bb14f06872843c013ed68baf (plain)
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
33
34
#pragma once

#include <netdb.h>
#include <sys/cdefs.h>

/* this structure contains all the variables that were declared
 * 'static' in the original NetBSD resolver code.
 *
 * this caused vast amounts of crashes and memory corruptions
 * when the resolver was being used by multiple threads.
 *
 * (note: the OpenBSD/FreeBSD resolver has similar 'issues')
 */

#define	MAXALIASES	35
#define	MAXADDRS	35

__BEGIN_DECLS

struct res_static {
  char* h_addr_ptrs[MAXADDRS + 1];
  char* host_aliases[MAXALIASES];
  char hostbuf[8 * 1024];
  u_int32_t host_addr[16 / sizeof(u_int32_t)]; /* IPv4 or IPv6 */
  FILE* hostf;
  int stayopen;
  const char* servent_ptr;
  struct servent servent;
  struct hostent host;
};

struct res_static* __res_get_static(void);

__END_DECLS