resolv: Remove _LIBC conditionals

This commit is contained in:
Florian Weimer 2016-04-28 11:01:01 +02:00
parent 1f32be054b
commit c99c925b8b
7 changed files with 13 additions and 140 deletions

View File

@ -1,3 +1,12 @@
2016-04-28 Florian Weimer <fweimer@redhat.com>
* resolv/inet_addr.c: Remove _LIBC conditionals.
* resolv/res_data.c: Likewise.
* resolv/res_init.c: Likewise.
* resolv/res_mkquery.c: Likewise.
* resolv/res_libc.c: Update comment.
* resolv/README: Update.
2016-04-28 Florian Weimer <fweimer@redhat.com> 2016-04-28 Florian Weimer <fweimer@redhat.com>
* resolv/gethnamaddr.c: Remove SCSS keyword. * resolv/gethnamaddr.c: Remove SCSS keyword.

View File

@ -149,8 +149,7 @@ src/lib/isc/
base64.c base64.c
Some of these files have been optimised a bit, and adaptations have Some of these files have been optimised a bit, and adaptations have
been made to make them fit in with the rest of glibc. The more been made to make them fit in with the rest of glibc.
non-obvious changes are wrapped in something like `#ifdef _LIBC'.
res_libc.c is home-brewn, although parts of it are taken from res_data.c. res_libc.c is home-brewn, although parts of it are taken from res_data.c.

View File

@ -72,13 +72,11 @@
#include <ctype.h> #include <ctype.h>
#ifdef _LIBC
# include <endian.h> # include <endian.h>
# include <stdint.h> # include <stdint.h>
# include <stdlib.h> # include <stdlib.h>
# include <limits.h> # include <limits.h>
# include <errno.h> # include <errno.h>
#endif
/* /*
* Ascii internet address interpretation routine. * Ascii internet address interpretation routine.
@ -106,9 +104,6 @@ __inet_aton(const char *cp, struct in_addr *addr)
{ {
static const in_addr_t max[4] = { 0xffffffff, 0xffffff, 0xffff, 0xff }; static const in_addr_t max[4] = { 0xffffffff, 0xffffff, 0xffff, 0xff };
in_addr_t val; in_addr_t val;
#ifndef _LIBC
int base;
#endif
char c; char c;
union iaddr { union iaddr {
uint8_t bytes[4]; uint8_t bytes[4];
@ -117,10 +112,8 @@ __inet_aton(const char *cp, struct in_addr *addr)
uint8_t *pp = res.bytes; uint8_t *pp = res.bytes;
int digit; int digit;
#ifdef _LIBC
int saved_errno = errno; int saved_errno = errno;
__set_errno (0); __set_errno (0);
#endif
res.word = 0; res.word = 0;
@ -133,7 +126,6 @@ __inet_aton(const char *cp, struct in_addr *addr)
*/ */
if (!isdigit(c)) if (!isdigit(c))
goto ret_0; goto ret_0;
#ifdef _LIBC
{ {
char *endp; char *endp;
unsigned long ul = strtoul (cp, (char **) &endp, 0); unsigned long ul = strtoul (cp, (char **) &endp, 0);
@ -146,33 +138,6 @@ __inet_aton(const char *cp, struct in_addr *addr)
cp = endp; cp = endp;
} }
c = *cp; c = *cp;
#else
val = 0; base = 10; digit = 0;
if (c == '0') {
c = *++cp;
if (c == 'x' || c == 'X')
base = 16, c = *++cp;
else {
base = 8;
digit = 1 ;
}
}
for (;;) {
if (isascii(c) && isdigit(c)) {
if (base == 8 && (c == '8' || c == '9'))
return (0);
val = (val * base) + (c - '0');
c = *++cp;
digit = 1;
} else if (base == 16 && isascii(c) && isxdigit(c)) {
val = (val << 4) |
(c + 10 - (islower(c) ? 'a' : 'A'));
c = *++cp;
digit = 1;
} else
break;
}
#endif
if (c == '.') { if (c == '.') {
/* /*
* Internet format: * Internet format:
@ -206,15 +171,11 @@ __inet_aton(const char *cp, struct in_addr *addr)
if (addr != NULL) if (addr != NULL)
addr->s_addr = res.word | htonl (val); addr->s_addr = res.word | htonl (val);
#ifdef _LIBC
__set_errno (saved_errno); __set_errno (saved_errno);
#endif
return (1); return (1);
ret_0: ret_0:
#ifdef _LIBC
__set_errno (saved_errno); __set_errno (saved_errno);
#endif
return (0); return (0);
} }
weak_alias (__inet_aton, inet_aton) weak_alias (__inet_aton, inet_aton)

View File

@ -65,67 +65,6 @@ const char *_res_sectioncodes[] attribute_hidden = {
#endif #endif
#ifndef __BIND_NOSTATIC #ifndef __BIND_NOSTATIC
#ifdef _LIBC
/* The definition has been moved to res_libc.c. */
#else
#undef _res
struct __res_state _res
# if defined(__BIND_RES_TEXT)
= { RES_TIMEOUT, } /* Motorola, et al. */
# endif
;
#endif
/* Proto. */
#ifndef _LIBC
int res_ourserver_p(const res_state, const struct sockaddr_in *);
void res_pquery(const res_state, const u_char *, int, FILE *);
#endif
#ifndef _LIBC
/* Moved to res_libc.c since res_init() should go into libc.so but the
rest of this file not. */
int
res_init(void) {
extern int __res_vinit(res_state, int);
/*
* These three fields used to be statically initialized. This made
* it hard to use this code in a shared library. It is necessary,
* now that we're doing dynamic initialization here, that we preserve
* the old semantics: if an application modifies one of these three
* fields of _res before res_init() is called, res_init() will not
* alter them. Of course, if an application is setting them to
* _zero_ before calling res_init(), hoping to override what used
* to be the static default, we can't detect it and unexpected results
* will follow. Zero for any of these fields would make no sense,
* so one can safely assume that the applications were already getting
* unexpected results.
*
* _res.options is tricky since some apps were known to diddle the bits
* before res_init() was first called. We can't replicate that semantic
* with dynamic initialization (they may have turned bits off that are
* set in RES_DEFAULT). Our solution is to declare such applications
* "broken". They could fool us by setting RES_INIT but none do (yet).
*/
if (!_res.retrans)
_res.retrans = RES_TIMEOUT;
if (!_res.retry)
_res.retry = 4;
if (!(_res.options & RES_INIT))
_res.options = RES_DEFAULT;
/*
* This one used to initialize implicitly to zero, so unless the app
* has set it to something in particular, we can randomize it now.
*/
if (!_res.id)
_res.id = res_randomid();
return (__res_vinit(&_res, 1));
}
#endif
void void
p_query(const u_char *msg) { p_query(const u_char *msg) {
fp_query(msg, stdout); fp_query(msg, stdout);
@ -215,23 +154,9 @@ res_send(const u_char *buf, int buflen, u_char *ans, int anssiz) {
return (res_nsend(&_res, buf, buflen, ans, anssiz)); return (res_nsend(&_res, buf, buflen, ans, anssiz));
} }
#ifndef _LIBC
int
res_sendsigned(const u_char *buf, int buflen, ns_tsig_key *key,
u_char *ans, int anssiz)
{
if (__res_maybe_init (&_res, 1) == -1) {
/* errno should have been set by res_init() in this case. */
return (-1);
}
return (res_nsendsigned(&_res, buf, buflen, key, ans, anssiz));
}
#endif
void void
res_close(void) { res_close(void) {
#ifdef _LIBC
/* /*
* Some stupid programs out there call res_close() before res_init(). * Some stupid programs out there call res_close() before res_init().
* Since _res._vcsock isn't explicitly initialized, these means that * Since _res._vcsock isn't explicitly initialized, these means that
@ -241,7 +166,6 @@ res_close(void) {
* early. */ * early. */
if ((_res.options & RES_INIT) == 0) if ((_res.options & RES_INIT) == 0)
return; return;
#endif
/* We don't free the name server addresses because we never /* We don't free the name server addresses because we never
did it and it would be done implicitly on shutdown. */ did it and it would be done implicitly on shutdown. */
__res_iclose(&_res, false); __res_iclose(&_res, false);

View File

@ -102,9 +102,7 @@ static u_int32_t net_mask (struct in_addr) __THROW;
# define isascii(c) (!(c & 0200)) # define isascii(c) (!(c & 0200))
#endif #endif
#ifdef _LIBC
unsigned long long int __res_initstamp attribute_hidden; unsigned long long int __res_initstamp attribute_hidden;
#endif
/* /*
* Resolver state default settings. * Resolver state default settings.
@ -123,9 +121,7 @@ res_ninit(res_state statp) {
return (__res_vinit(statp, 0)); return (__res_vinit(statp, 0));
} }
#ifdef _LIBC
libc_hidden_def (__res_ninit) libc_hidden_def (__res_ninit)
#endif
/* This function has to be reachable by res_data.c but not publically. */ /* This function has to be reachable by res_data.c but not publically. */
int int
@ -145,9 +141,7 @@ __res_vinit(res_state statp, int preinit) {
#ifndef RFC1535 #ifndef RFC1535
int dots; int dots;
#endif #endif
#ifdef _LIBC
statp->_u._ext.initstamp = __res_initstamp; statp->_u._ext.initstamp = __res_initstamp;
#endif
if (!preinit) { if (!preinit) {
statp->retrans = RES_TIMEOUT; statp->retrans = RES_TIMEOUT;
@ -283,7 +277,6 @@ __res_vinit(res_state statp, int preinit) {
statp->nsaddr_list[nserv].sin_port = statp->nsaddr_list[nserv].sin_port =
htons(NAMESERVER_PORT); htons(NAMESERVER_PORT);
nserv++; nserv++;
#ifdef _LIBC
} else { } else {
struct in6_addr a6; struct in6_addr a6;
char *el; char *el;
@ -332,7 +325,6 @@ __res_vinit(res_state statp, int preinit) {
nserv++; nserv++;
} }
} }
#endif
} }
continue; continue;
} }
@ -385,12 +377,10 @@ __res_vinit(res_state statp, int preinit) {
} }
} }
statp->nscount = nserv; statp->nscount = nserv;
#ifdef _LIBC
if (have_serv6) { if (have_serv6) {
/* We try IPv6 servers again. */ /* We try IPv6 servers again. */
statp->ipv6_unavail = false; statp->ipv6_unavail = false;
} }
#endif
#ifdef RESOLVSORT #ifdef RESOLVSORT
statp->nsort = nsort; statp->nsort = nsort;
#endif #endif
@ -554,9 +544,7 @@ u_int
res_randomid(void) { res_randomid(void) {
return 0xffff & __getpid(); return 0xffff & __getpid();
} }
#ifdef _LIBC
libc_hidden_def (__res_randomid) libc_hidden_def (__res_randomid)
#endif
/* /*
@ -594,11 +582,8 @@ res_nclose(res_state statp)
{ {
__res_iclose (statp, true); __res_iclose (statp, true);
} }
#ifdef _LIBC
libc_hidden_def (__res_nclose) libc_hidden_def (__res_nclose)
#endif
#ifdef _LIBC
# ifdef _LIBC_REENTRANT # ifdef _LIBC_REENTRANT
/* This is called when a thread is exiting to free resources held in _res. */ /* This is called when a thread is exiting to free resources held in _res. */
static void __attribute__ ((section ("__libc_thread_freeres_fn"))) static void __attribute__ ((section ("__libc_thread_freeres_fn")))
@ -616,4 +601,3 @@ res_thread_freeres (void)
text_set_element (__libc_thread_subfreeres, res_thread_freeres); text_set_element (__libc_thread_subfreeres, res_thread_freeres);
text_set_element (__libc_subfreeres, res_thread_freeres); text_set_element (__libc_subfreeres, res_thread_freeres);
# endif # endif
#endif

View File

@ -15,6 +15,9 @@
* SOFTWARE. * SOFTWARE.
*/ */
/* This file contains the definitions related to res_init which are
linked into libc instead of libresolv. */
#include <atomic.h> #include <atomic.h>
#include <limits.h> #include <limits.h>
#include <sys/types.h> #include <sys/types.h>
@ -23,11 +26,6 @@
#include <resolv.h> #include <resolv.h>
#include <libc-lock.h> #include <libc-lock.h>
/* The following bit is copied from res_data.c (where it is #ifdef'ed
out) since res_init() should go into libc.so but the rest of that
file should not. */
extern unsigned long long int __res_initstamp attribute_hidden; extern unsigned long long int __res_initstamp attribute_hidden;
/* We have atomic increment operations on 64-bit platforms. */ /* We have atomic increment operations on 64-bit platforms. */
#if __WORDSIZE == 64 #if __WORDSIZE == 64

View File

@ -77,13 +77,11 @@
/* Options. Leave them on. */ /* Options. Leave them on. */
/* #define DEBUG */ /* #define DEBUG */
#ifdef _LIBC
# include <hp-timing.h> # include <hp-timing.h>
# include <stdint.h> # include <stdint.h>
# if HP_TIMING_AVAIL # if HP_TIMING_AVAIL
# define RANDOM_BITS(Var) { uint64_t v64; HP_TIMING_NOW (v64); Var = v64; } # define RANDOM_BITS(Var) { uint64_t v64; HP_TIMING_NOW (v64); Var = v64; }
# endif # endif
#endif
/* /*
* Form all types of queries. * Form all types of queries.