mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
resolv: Remove _LIBC conditionals
This commit is contained in:
parent
1f32be054b
commit
c99c925b8b
@ -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>
|
||||
|
||||
* resolv/gethnamaddr.c: Remove SCSS keyword.
|
||||
|
@ -149,8 +149,7 @@ src/lib/isc/
|
||||
base64.c
|
||||
|
||||
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
|
||||
non-obvious changes are wrapped in something like `#ifdef _LIBC'.
|
||||
been made to make them fit in with the rest of glibc.
|
||||
|
||||
res_libc.c is home-brewn, although parts of it are taken from res_data.c.
|
||||
|
||||
|
@ -72,13 +72,11 @@
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <endian.h>
|
||||
# include <stdint.h>
|
||||
# include <stdlib.h>
|
||||
# include <limits.h>
|
||||
# include <errno.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 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 };
|
||||
in_addr_t val;
|
||||
#ifndef _LIBC
|
||||
int base;
|
||||
#endif
|
||||
char c;
|
||||
union iaddr {
|
||||
uint8_t bytes[4];
|
||||
@ -117,10 +112,8 @@ __inet_aton(const char *cp, struct in_addr *addr)
|
||||
uint8_t *pp = res.bytes;
|
||||
int digit;
|
||||
|
||||
#ifdef _LIBC
|
||||
int saved_errno = errno;
|
||||
__set_errno (0);
|
||||
#endif
|
||||
|
||||
res.word = 0;
|
||||
|
||||
@ -133,7 +126,6 @@ __inet_aton(const char *cp, struct in_addr *addr)
|
||||
*/
|
||||
if (!isdigit(c))
|
||||
goto ret_0;
|
||||
#ifdef _LIBC
|
||||
{
|
||||
char *endp;
|
||||
unsigned long ul = strtoul (cp, (char **) &endp, 0);
|
||||
@ -146,33 +138,6 @@ __inet_aton(const char *cp, struct in_addr *addr)
|
||||
cp = endp;
|
||||
}
|
||||
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 == '.') {
|
||||
/*
|
||||
* Internet format:
|
||||
@ -206,15 +171,11 @@ __inet_aton(const char *cp, struct in_addr *addr)
|
||||
if (addr != NULL)
|
||||
addr->s_addr = res.word | htonl (val);
|
||||
|
||||
#ifdef _LIBC
|
||||
__set_errno (saved_errno);
|
||||
#endif
|
||||
return (1);
|
||||
|
||||
ret_0:
|
||||
#ifdef _LIBC
|
||||
__set_errno (saved_errno);
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
weak_alias (__inet_aton, inet_aton)
|
||||
|
@ -65,67 +65,6 @@ const char *_res_sectioncodes[] attribute_hidden = {
|
||||
#endif
|
||||
|
||||
#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
|
||||
p_query(const u_char *msg) {
|
||||
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));
|
||||
}
|
||||
|
||||
#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
|
||||
res_close(void) {
|
||||
#ifdef _LIBC
|
||||
/*
|
||||
* Some stupid programs out there call res_close() before res_init().
|
||||
* Since _res._vcsock isn't explicitly initialized, these means that
|
||||
@ -241,7 +166,6 @@ res_close(void) {
|
||||
* early. */
|
||||
if ((_res.options & RES_INIT) == 0)
|
||||
return;
|
||||
#endif
|
||||
/* We don't free the name server addresses because we never
|
||||
did it and it would be done implicitly on shutdown. */
|
||||
__res_iclose(&_res, false);
|
||||
|
@ -102,9 +102,7 @@ static u_int32_t net_mask (struct in_addr) __THROW;
|
||||
# define isascii(c) (!(c & 0200))
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
unsigned long long int __res_initstamp attribute_hidden;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Resolver state default settings.
|
||||
@ -123,9 +121,7 @@ res_ninit(res_state statp) {
|
||||
|
||||
return (__res_vinit(statp, 0));
|
||||
}
|
||||
#ifdef _LIBC
|
||||
libc_hidden_def (__res_ninit)
|
||||
#endif
|
||||
|
||||
/* This function has to be reachable by res_data.c but not publically. */
|
||||
int
|
||||
@ -145,9 +141,7 @@ __res_vinit(res_state statp, int preinit) {
|
||||
#ifndef RFC1535
|
||||
int dots;
|
||||
#endif
|
||||
#ifdef _LIBC
|
||||
statp->_u._ext.initstamp = __res_initstamp;
|
||||
#endif
|
||||
|
||||
if (!preinit) {
|
||||
statp->retrans = RES_TIMEOUT;
|
||||
@ -283,7 +277,6 @@ __res_vinit(res_state statp, int preinit) {
|
||||
statp->nsaddr_list[nserv].sin_port =
|
||||
htons(NAMESERVER_PORT);
|
||||
nserv++;
|
||||
#ifdef _LIBC
|
||||
} else {
|
||||
struct in6_addr a6;
|
||||
char *el;
|
||||
@ -332,7 +325,6 @@ __res_vinit(res_state statp, int preinit) {
|
||||
nserv++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@ -385,12 +377,10 @@ __res_vinit(res_state statp, int preinit) {
|
||||
}
|
||||
}
|
||||
statp->nscount = nserv;
|
||||
#ifdef _LIBC
|
||||
if (have_serv6) {
|
||||
/* We try IPv6 servers again. */
|
||||
statp->ipv6_unavail = false;
|
||||
}
|
||||
#endif
|
||||
#ifdef RESOLVSORT
|
||||
statp->nsort = nsort;
|
||||
#endif
|
||||
@ -554,9 +544,7 @@ u_int
|
||||
res_randomid(void) {
|
||||
return 0xffff & __getpid();
|
||||
}
|
||||
#ifdef _LIBC
|
||||
libc_hidden_def (__res_randomid)
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
@ -594,11 +582,8 @@ res_nclose(res_state statp)
|
||||
{
|
||||
__res_iclose (statp, true);
|
||||
}
|
||||
#ifdef _LIBC
|
||||
libc_hidden_def (__res_nclose)
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# ifdef _LIBC_REENTRANT
|
||||
/* This is called when a thread is exiting to free resources held in _res. */
|
||||
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_subfreeres, res_thread_freeres);
|
||||
# endif
|
||||
#endif
|
||||
|
@ -15,6 +15,9 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* This file contains the definitions related to res_init which are
|
||||
linked into libc instead of libresolv. */
|
||||
|
||||
#include <atomic.h>
|
||||
#include <limits.h>
|
||||
#include <sys/types.h>
|
||||
@ -23,11 +26,6 @@
|
||||
#include <resolv.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;
|
||||
/* We have atomic increment operations on 64-bit platforms. */
|
||||
#if __WORDSIZE == 64
|
||||
|
@ -77,13 +77,11 @@
|
||||
/* Options. Leave them on. */
|
||||
/* #define DEBUG */
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <hp-timing.h>
|
||||
# include <stdint.h>
|
||||
# if HP_TIMING_AVAIL
|
||||
# define RANDOM_BITS(Var) { uint64_t v64; HP_TIMING_NOW (v64); Var = v64; }
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Form all types of queries.
|
||||
|
Loading…
Reference in New Issue
Block a user