mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 14:00:30 +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>
|
2016-04-28 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
* resolv/gethnamaddr.c: Remove SCSS keyword.
|
* resolv/gethnamaddr.c: Remove SCSS keyword.
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user