aboutsummaryrefslogtreecommitdiff
path: root/resolv
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2017-03-22 09:55:25 -0400
committerZack Weinberg <zackw@panix.com>2017-05-20 19:01:46 -0400
commit500b3a499fff61157db464a99f459c772d7eb6c0 (patch)
treee083962624bc0aeeacb478c310a2d759365d22df /resolv
parent1f655beb087a4ade30a0299d6f92b9916fbf7cc7 (diff)
downloadglibc-500b3a499fff61157db464a99f459c772d7eb6c0.tar
glibc-500b3a499fff61157db464a99f459c772d7eb6c0.tar.gz
glibc-500b3a499fff61157db464a99f459c772d7eb6c0.tar.bz2
glibc-500b3a499fff61157db464a99f459c772d7eb6c0.zip
Remove __need_list_t and __need_res_state.
These __need macros are only used internally, by nptl/descr.h. However, including all of resolv.h from descr.h causes build failures due to resolv.h's dozens of pseudo-struct-field macros, some of which collide with struct fields in NPTL internal data structures. Similarly, including all of list.h from descr.h produces an include cycle, atomic.h -> atomic-machine.h -> tls.h -> descr.h -> list.h -> atomic.h, and then list.h tries to use atomic.h macros that haven't been defined yet. So we do need mini-headers for these. In the list.h case I called it include/list_t.h since it isn't going to be installed. * resolv/resolv.h: Remove __need_res_state logic. Move definition of res_state and related constants to ... * resolv/bits/types/res_state.h: ...this new file. * resolv/Makefile: Install bits/types/res_state.h. * include/bits/types/res_state.h: New wrapper. * include/list.h: Remove __need_list_t logic. Move definition of list_t to ... * include/list_t.h: ...this new file. * nptl/descr.h: Include list_t.h and bits/types/res_state.h instead of list.h and resolv.h.
Diffstat (limited to 'resolv')
-rw-r--r--resolv/Makefile2
-rw-r--r--resolv/bits/types/res_state.h61
-rw-r--r--resolv/resolv.h92
3 files changed, 77 insertions, 78 deletions
diff --git a/resolv/Makefile b/resolv/Makefile
index d41fd4603d..70b6f4ffe8 100644
--- a/resolv/Makefile
+++ b/resolv/Makefile
@@ -22,7 +22,7 @@ subdir := resolv
include ../Makeconfig
-headers := resolv.h \
+headers := resolv.h bits/types/res_state.h \
netdb.h bits/netdb.h \
arpa/nameser.h arpa/nameser_compat.h \
sys/bitypes.h
diff --git a/resolv/bits/types/res_state.h b/resolv/bits/types/res_state.h
new file mode 100644
index 0000000000..cee4b6ddd0
--- /dev/null
+++ b/resolv/bits/types/res_state.h
@@ -0,0 +1,61 @@
+#ifndef __res_state_defined
+#define __res_state_defined 1
+
+#include <sys/types.h>
+#include <netinet/in.h>
+
+/* res_state: the global state used by the resolver stub. */
+#define MAXNS 3 /* max # name servers we'll track */
+#define MAXDFLSRCH 3 /* # default domain levels to try */
+#define MAXDNSRCH 6 /* max # domains in search path */
+#define MAXRESOLVSORT 10 /* number of net to sort on */
+
+struct __res_state {
+ int retrans; /* retransmition time interval */
+ int retry; /* number of times to retransmit */
+ unsigned long options; /* option flags - see below. */
+ int nscount; /* number of name servers */
+ struct sockaddr_in
+ nsaddr_list[MAXNS]; /* address of name server */
+ unsigned short id; /* current message id */
+ /* 2 byte hole here. */
+ char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */
+ char defdname[256]; /* default domain (deprecated) */
+ unsigned long pfcode; /* RES_PRF_ flags - see below. */
+ unsigned ndots:4; /* threshold for initial abs. query */
+ unsigned nsort:4; /* number of elements in sort_list[] */
+ unsigned ipv6_unavail:1; /* connecting to IPv6 server failed */
+ unsigned unused:23;
+ struct {
+ struct in_addr addr;
+ uint32_t mask;
+ } sort_list[MAXRESOLVSORT];
+ /* 4 byte hole here on 64-bit architectures. */
+ void * __glibc_unused_qhook;
+ void * __glibc_unused_rhook;
+ int res_h_errno; /* last one set for this context */
+ int _vcsock; /* PRIVATE: for res_send VC i/o */
+ unsigned int _flags; /* PRIVATE: see below */
+ /* 4 byte hole here on 64-bit architectures. */
+ union {
+ char pad[52]; /* On an i386 this means 512b total. */
+ struct {
+ uint16_t nscount;
+ uint16_t nsmap[MAXNS];
+ int nssocks[MAXNS];
+ uint16_t nscount6;
+ uint16_t nsinit;
+ struct sockaddr_in6 *nsaddrs[MAXNS];
+#ifdef _LIBC
+ unsigned long long int initstamp
+ __attribute__((packed));
+#else
+ unsigned int _initstamp[2];
+#endif
+ } _ext;
+ } _u;
+};
+
+typedef struct __res_state *res_state;
+
+#endif /* __res_state_defined */
diff --git a/resolv/resolv.h b/resolv/resolv.h
index 9fef8e9f24..1fb0ad459c 100644
--- a/resolv/resolv.h
+++ b/resolv/resolv.h
@@ -50,92 +50,30 @@
*/
#ifndef _RESOLV_H_
+#define _RESOLV_H_
-/* These headers are needed for types used in the `struct res_state'
- declaration. */
+#include <sys/cdefs.h>
+#include <sys/param.h>
#include <sys/types.h>
+#include <stdio.h>
#include <netinet/in.h>
-
-#ifndef __need_res_state
-# define _RESOLV_H_
-
-# include <sys/param.h>
-# include <sys/cdefs.h>
-# include <stdio.h>
-# include <arpa/nameser.h>
-#endif
-
-#ifndef __res_state_defined
-# define __res_state_defined
+#include <arpa/nameser.h>
+#include <bits/types/res_state.h>
/*
* Global defines and variables for resolver stub.
*/
-# define MAXNS 3 /* max # name servers we'll track */
-# define MAXDFLSRCH 3 /* # default domain levels to try */
-# define MAXDNSRCH 6 /* max # domains in search path */
-# define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */
-
-# define RES_TIMEOUT 5 /* min. seconds between retries */
-# define MAXRESOLVSORT 10 /* number of net to sort on */
-# define RES_MAXNDOTS 15 /* should reflect bit field size */
-# define RES_MAXRETRANS 30 /* only for resolv.conf/RES_OPTIONS */
-# define RES_MAXRETRY 5 /* only for resolv.conf/RES_OPTIONS */
-# define RES_DFLRETRY 2 /* Default #/tries. */
-# define RES_MAXTIME 65535 /* Infinity, in milliseconds. */
+#define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */
-struct __res_state {
- int retrans; /* retransmition time interval */
- int retry; /* number of times to retransmit */
- unsigned long options; /* option flags - see below. */
- int nscount; /* number of name servers */
- struct sockaddr_in
- nsaddr_list[MAXNS]; /* address of name server */
-# define nsaddr nsaddr_list[0] /* for backward compatibility */
- unsigned short id; /* current message id */
- /* 2 byte hole here. */
- char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */
- char defdname[256]; /* default domain (deprecated) */
- unsigned long pfcode; /* RES_PRF_ flags - see below. */
- unsigned ndots:4; /* threshold for initial abs. query */
- unsigned nsort:4; /* number of elements in sort_list[] */
- unsigned ipv6_unavail:1; /* connecting to IPv6 server failed */
- unsigned unused:23;
- struct {
- struct in_addr addr;
- uint32_t mask;
- } sort_list[MAXRESOLVSORT];
- /* 4 byte hole here on 64-bit architectures. */
- void * __glibc_unused_qhook;
- void * __glibc_unused_rhook;
- int res_h_errno; /* last one set for this context */
- int _vcsock; /* PRIVATE: for res_send VC i/o */
- unsigned int _flags; /* PRIVATE: see below */
- /* 4 byte hole here on 64-bit architectures. */
- union {
- char pad[52]; /* On an i386 this means 512b total. */
- struct {
- uint16_t nscount;
- uint16_t nsmap[MAXNS];
- int nssocks[MAXNS];
- uint16_t nscount6;
- uint16_t nsinit;
- struct sockaddr_in6 *nsaddrs[MAXNS];
-#ifdef _LIBC
- unsigned long long int initstamp
- __attribute__((packed));
-#else
- unsigned int _initstamp[2];
-#endif
- } _ext;
- } _u;
-};
+#define RES_TIMEOUT 5 /* min. seconds between retries */
+#define RES_MAXNDOTS 15 /* should reflect bit field size */
+#define RES_MAXRETRANS 30 /* only for resolv.conf/RES_OPTIONS */
+#define RES_MAXRETRY 5 /* only for resolv.conf/RES_OPTIONS */
+#define RES_DFLRETRY 2 /* Default #/tries. */
+#define RES_MAXTIME 65535 /* Infinity, in milliseconds. */
-typedef struct __res_state *res_state;
-# undef __need_res_state
-#endif
+#define nsaddr nsaddr_list[0] /* for backward compatibility */
-#ifdef _RESOLV_H_
/*
* Revision information. This is the release date in YYYYMMDD format.
* It can change every day so the right thing to do with it is use it
@@ -361,7 +299,7 @@ int res_nmkquery (res_state, int, const char *, int, int,
int res_nsend (res_state, const unsigned char *, int,
unsigned char *, int) __THROW;
void res_nclose (res_state) __THROW;
+
__END_DECLS
-#endif
#endif /* !_RESOLV_H_ */