From 3cf595e562f955e399d80ea9d053e41d50469e6b Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Tue, 22 Aug 1995 22:47:57 +0000 Subject: Tue Aug 22 16:49:12 1995 Roland McGrath * inet/netdb.h: Moved to resolv. * inet/Makefile (headers): Remove netdb.h. * resolv/Makefile (headers): Add netdb.h. * resolv/gethnamaddr.c, resolv/inet_addr.c, resolv/netdb.h, resolv/res_send.c: Updated from BIND-4.9.3-BETA26. * hurd/thread-cancel.c: If SS->cancel_hook is not null, call it before resuming the thread. * hurd/hurd/signal.h (struct hurd_sigstate): New member `cancel_hook'. * hurd/Makefile: Removed dep on hurd/signal.h for RPC stub objects. Mon Aug 21 16:37:09 1995 Roland McGrath * sysdeps/i386/dl-machine.h (elf_machine_rel): Grok R_386_NONE relocs, and do nothing. Why the linker generates them we may never know. * sysdeps/mach/hurd/i386/intr-msg.h: New file. --- ChangeLog | 21 +++++ NEWS | 2 +- hurd/thread-cancel.c | 6 ++ inet/Makefile | 2 +- inet/netdb.h | 169 ------------------------------------- netdb.h | 2 +- resolv/Makefile | 2 +- resolv/gethnamaddr.c | 82 ++++++++++++------ resolv/inet_addr.c | 20 ++--- resolv/netdb.h | 170 ++++++++++++++++++++++++++++++++++++++ resolv/res_send.c | 11 ++- sysdeps/mach/hurd/i386/intr-msg.h | 47 +++++++++++ 12 files changed, 319 insertions(+), 215 deletions(-) delete mode 100644 inet/netdb.h create mode 100644 resolv/netdb.h create mode 100644 sysdeps/mach/hurd/i386/intr-msg.h diff --git a/ChangeLog b/ChangeLog index 37ed19f3db..a05ebf28e6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,29 @@ +Tue Aug 22 16:49:12 1995 Roland McGrath + + * inet/netdb.h: Moved to resolv. + * inet/Makefile (headers): Remove netdb.h. + * resolv/Makefile (headers): Add netdb.h. + * resolv/gethnamaddr.c, resolv/inet_addr.c, resolv/netdb.h, + resolv/res_send.c: Updated from BIND-4.9.3-BETA26. + + * hurd/thread-cancel.c: If SS->cancel_hook is not null, call it before + resuming the thread. + * hurd/hurd/signal.h (struct hurd_sigstate): New member `cancel_hook'. + + * hurd/Makefile: Removed dep on hurd/signal.h for RPC stub objects. + +Mon Aug 21 16:37:09 1995 Roland McGrath + + * sysdeps/i386/dl-machine.h (elf_machine_rel): Grok R_386_NONE + relocs, and do nothing. Why the linker generates them we may + never know. + Thu Aug 17 16:18:38 1995 Roland McGrath * sysdeps/mach/hurd/Makefile: Don't elide sunrpc and manual from `subdirs' variable. + * sysdeps/mach/hurd/i386/intr-msg.h: New file. * hurd/intr-msg.c: Use INTR_MSG_TRAP macro from machine-dependent "intr-msg.h" for special syscall code, instead of i386-specific asm. * hurd/hurdsig.c: Use INTR_MSG_BACK_OUT macro from diff --git a/NEWS b/NEWS index 915af45c6f..9d4c7d63ea 100644 --- a/NEWS +++ b/NEWS @@ -75,7 +75,7 @@ Version 1.10 * The new header file and suite of functions simplify programs that operate on directory trees. This code comes from 4.4 BSD. -* The resolver code has been updated from the BIND-4.9.3-BETA24 release. +* The resolver code has been updated from the BIND-4.9.3-BETA26 release. * The new function `malloc_find_object_address' finds the starting address of a malloc'd block, given any address within the block. This can be diff --git a/hurd/thread-cancel.c b/hurd/thread-cancel.c index db527c3935..7fb8cd23b4 100644 --- a/hurd/thread-cancel.c +++ b/hurd/thread-cancel.c @@ -62,6 +62,12 @@ hurd_thread_cancel (thread_t thread) (natural_t *) &state.basic, MACHINE_THREAD_STATE_COUNT); + if (ss->cancel_hook) + /* The code being cancelled has a special wakeup function. + Calling this should make the thread wake up and check the + cancellation flag. */ + (*ss->cancel_hook) (); + __thread_resume (thread); } diff --git a/inet/Makefile b/inet/Makefile index 069485b903..9389a22338 100644 --- a/inet/Makefile +++ b/inet/Makefile @@ -21,7 +21,7 @@ # subdir := inet -headers := netinet/in.h $(wildcard arpa/*.h protocols/*.h) netdb.h +headers := netinet/in.h $(wildcard arpa/*.h protocols/*.h) routines := ntohl ntohs htonl htons \ inet_lnaof inet_mkadr \ diff --git a/inet/netdb.h b/inet/netdb.h deleted file mode 100644 index a568e2d6a5..0000000000 --- a/inet/netdb.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * ++Copyright++ 1980, 1983, 1988, 1993 - * - - * Copyright (c) 1980, 1983, 1988, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - - * Portions Copyright (c) 1993 by Digital Equipment Corporation. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies, and that - * the name of Digital Equipment Corporation not be used in advertising or - * publicity pertaining to distribution of the document or software without - * specific, written prior permission. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT - * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - * - - * --Copyright-- - */ - -/* - * @(#)netdb.h 8.1 (Berkeley) 6/2/93 - * $Id$ - */ - -#ifndef _NETDB_H_ -#define _NETDB_H_ - -#include -#if (!defined(BSD)) || (BSD < 199306) -# include -#endif -#include - -#define _PATH_HEQUIV "/etc/hosts.equiv" -#define _PATH_HOSTS "/etc/hosts" -#define _PATH_NETWORKS "/etc/networks" -#define _PATH_PROTOCOLS "/etc/protocols" -#define _PATH_SERVICES "/etc/services" - -extern int h_errno; - -/* - * Structures returned by network data base library. All addresses are - * supplied in host order, and returned in network order (suitable for - * use in system calls). - */ -struct hostent { - char *h_name; /* official name of host */ - char **h_aliases; /* alias list */ - int h_addrtype; /* host address type */ - int h_length; /* length of address */ - char **h_addr_list; /* list of addresses from name server */ -#define h_addr h_addr_list[0] /* address, for backward compatiblity */ -}; - -/* - * Assumption here is that a network number - * fits in an unsigned long -- probably a poor one. - */ -struct netent { - char *n_name; /* official name of net */ - char **n_aliases; /* alias list */ - int n_addrtype; /* net address type */ - unsigned long n_net; /* network # */ -}; - -struct servent { - char *s_name; /* official service name */ - char **s_aliases; /* alias list */ - int s_port; /* port # */ - char *s_proto; /* protocol to use */ -}; - -struct protoent { - char *p_name; /* official protocol name */ - char **p_aliases; /* alias list */ - int p_proto; /* protocol # */ -}; - -/* - * Error return codes from gethostbyname() and gethostbyaddr() - * (left in extern int h_errno). - */ - -#define NETDB_INTERNAL -1 /* see errno */ -#define NETDB_SUCCESS 0 /* no problem */ -#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ -#define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */ -#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ -#define NO_DATA 4 /* Valid name, no data record of requested type */ -#define NO_ADDRESS NO_DATA /* no address, look for MX record */ - -__BEGIN_DECLS -void endhostent __P((void)); -void endnetent __P((void)); -void endprotoent __P((void)); -void endservent __P((void)); -struct hostent *gethostbyaddr __P((const char *, int, int)); -struct hostent *gethostbyname __P((const char *)); -struct hostent *gethostent __P((void)); -struct netent *getnetbyaddr __P((long, int)); /* u_long? */ -struct netent *getnetbyname __P((const char *)); -struct netent *getnetent __P((void)); -struct protoent *getprotobyname __P((const char *)); -struct protoent *getprotobynumber __P((int)); -struct protoent *getprotoent __P((void)); -struct servent *getservbyname __P((const char *, const char *)); -struct servent *getservbyport __P((int, const char *)); -struct servent *getservent __P((void)); -void herror __P((const char *)); -const char *hstrerror __P((int)); -void sethostent __P((int)); -/* void sethostfile __P((const char *)); */ -void setnetent __P((int)); -void setprotoent __P((int)); -void setservent __P((int)); -__END_DECLS - -/* This is nec'y to make this include file properly replace the sun version. */ -#ifdef __GNU_LIBRARY__ -#include -#else -#ifdef sun -struct rpcent { - char *r_name; /* name of server for this rpc program */ - char **r_aliases; /* alias list */ - int r_number; /* rpc program number */ -}; -struct rpcent *getrpcbyname(), *getrpcbynumber(), *getrpcent(); -#endif /* sun */ -#endif /* __GNU_LIBRARY__ */ - -#endif /* !_NETDB_H_ */ diff --git a/netdb.h b/netdb.h index e31569fe30..e2e1868cbb 100644 --- a/netdb.h +++ b/netdb.h @@ -1 +1 @@ -#include +#include diff --git a/resolv/Makefile b/resolv/Makefile index e07cfb0b15..f1a8701017 100644 --- a/resolv/Makefile +++ b/resolv/Makefile @@ -21,7 +21,7 @@ # subdir := resolv -headers := resolv.h arpa/nameser.h sys/bitypes.h +headers := resolv.h netdb.h arpa/nameser.h sys/bitypes.h distribute := ../conf/portability.h routines := gethnamaddr getnetbyaddr getnetbyname getnetent getnetnamadr \ diff --git a/resolv/gethnamaddr.c b/resolv/gethnamaddr.c index d3b68f7d95..87b4db1a6f 100644 --- a/resolv/gethnamaddr.c +++ b/resolv/gethnamaddr.c @@ -93,6 +93,7 @@ static const char AskedForGot[] = "gethostby*.getanswer: asked for \"%s\", got \"%s\""; static char *h_addr_ptrs[MAXADDRS + 1]; +static struct hostent *gethostbyname_ipv4 __P((const char *)); static struct hostent host; static char *host_aliases[MAXALIASES]; @@ -156,7 +157,9 @@ getanswer(answer, anslen, qname, qclass, qtype) int haveanswer, had_error; int toobig = 0; char tbuf[MAXDNAME+1]; + const char *tname; + tname = qname; host.h_name = NULL; eom = answer->buf + anslen; /* @@ -249,19 +252,36 @@ getanswer(answer, anslen, qname, qclass, qtype) buflen -= n; continue; } + if (qtype == T_PTR && type == T_CNAME) { + n = dn_expand(answer->buf, eom, cp, tbuf, sizeof tbuf); + if (n < 0) { + had_error++; + continue; + } + cp += n; + /* Get canonical name. */ + n = strlen(tbuf) + 1; /* for the \0 */ + if (n > buflen) { + had_error++; + continue; + } + strcpy(bp, tbuf); + tname = bp; + bp += n; + buflen -= n; + continue; + } if (type != qtype) { - /* CNAME->PTR should not cause a log message. */ - if (!(qtype == T_PTR && type == T_CNAME)) - syslog(LOG_NOTICE|LOG_AUTH, + syslog(LOG_NOTICE|LOG_AUTH, "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"", - qname, p_class(qclass), p_type(qtype), - p_type(type)); + qname, p_class(qclass), p_type(qtype), + p_type(type)); cp += n; continue; /* XXX - had_error++ ? */ } switch (type) { case T_PTR: - if (strcasecmp(qname, bp) != 0) { + if (strcasecmp(tname, bp) != 0) { syslog(LOG_NOTICE|LOG_AUTH, AskedForGot, qname, bp); cp += n; @@ -376,6 +396,36 @@ getanswer(answer, anslen, qname, qclass, qtype) struct hostent * gethostbyname(name) const char *name; +{ + struct hostent *hp; + +#if defined(AF_INET6) && defined(RES_TRY_INET6) + if (_res.options & RES_TRY_INET6) { + hp = gethostbyname2(name, AF_INET6); + if (hp) + return (hp); + } +#endif + return (gethostbyname2(name, AF_INET)); +} + +struct hostent * +gethostbyname2(name, af) + const char *name; + int af; +{ + switch (af) { + case AF_INET: + return (gethostbyname_ipv4(name)); + } + errno = EAFNOSUPPORT; + h_errno = NETDB_INTERNAL; + return (NULL); +} + +static struct hostent * +gethostbyname_ipv4(name) + const char *name; { querybuf buf; register const char *cp; @@ -727,23 +777,3 @@ dn_skipname(comp_dn, eom) return (__dn_skipname(comp_dn, eom)); } #endif /*old-style libc with yp junk in it*/ - -#ifdef ultrix -/* more icky libc packaging in ultrix */ -int -local_hostname_length(hostname) - const char *hostname; -{ - int len_host, len_domain; - - if (!*_res.defdname) - res_init(); - len_host = strlen(hostname); - len_domain = strlen(_res.defdname); - if (len_host > len_domain && - !strcasecmp(hostname + len_host - len_domain, _res.defdname) && - hostname[len_host - len_domain - 1] == '.') - return (len_host - len_domain - 1); - return (0); -} -#endif diff --git a/resolv/inet_addr.c b/resolv/inet_addr.c index 2a15067b07..01a38e6a00 100644 --- a/resolv/inet_addr.c +++ b/resolv/inet_addr.c @@ -66,10 +66,6 @@ static char rcsid[] = "$Id$"; /* these are compatibility routines, not needed on recent BSD releases */ -#ifndef NEED_INETADDR -int __inet_addr_unneeded__; -#else - /* * Ascii internet address interpretation routine. * The value returned is in network order. @@ -84,11 +80,6 @@ inet_addr(cp) return (val.s_addr); return (INADDR_NONE); } -#endif /*NEED_INETADDR*/ - -#ifndef NEED_INETATON -int __inet_aton_unneeded__; -#else /* * Check whether "cp" is a valid ascii representation @@ -113,8 +104,10 @@ inet_aton(cp, addr) /* * Collect number up to ``.''. * Values are specified as for C: - * 0x=hex, 0=octal, other=decimal. + * 0x=hex, 0=octal, isdigit=decimal. */ + if (!isdigit(c)) + return (0); val = 0; base = 10; if (c == '0') { c = *++cp; @@ -123,7 +116,7 @@ inet_aton(cp, addr) else base = 8; } - while (c != '\0') { + for (;;) { if (isascii(c) && isdigit(c)) { val = (val * base) + (c - '0'); c = *++cp; @@ -141,7 +134,7 @@ inet_aton(cp, addr) * a.b.c (with c treated as 16 bits) * a.b (with b treated as 24 bits) */ - if (pp >= parts + 3 || val > 0xff) + if (pp >= parts + 3) return (0); *pp++ = val; c = *++cp; @@ -151,7 +144,7 @@ inet_aton(cp, addr) /* * Check for trailing characters. */ - if (c && (!isascii(c) || (!isspace(c) && !ispunct(c)))) + if (c != '\0' && (!isascii(c) || !isspace(c))) return (0); /* * Concoct the address according to @@ -188,4 +181,3 @@ inet_aton(cp, addr) addr->s_addr = htonl(val); return (1); } -#endif /*NEED_INETATON*/ diff --git a/resolv/netdb.h b/resolv/netdb.h new file mode 100644 index 0000000000..822b621363 --- /dev/null +++ b/resolv/netdb.h @@ -0,0 +1,170 @@ +/* + * ++Copyright++ 1980, 1983, 1988, 1993 + * - + * Copyright (c) 1980, 1983, 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * - + * Portions Copyright (c) 1993 by Digital Equipment Corporation. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies, and that + * the name of Digital Equipment Corporation not be used in advertising or + * publicity pertaining to distribution of the document or software without + * specific, written prior permission. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT + * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + * - + * --Copyright-- + */ + +/* + * @(#)netdb.h 8.1 (Berkeley) 6/2/93 + * $Id$ + */ + +#ifndef _NETDB_H_ +#define _NETDB_H_ + +#include +#if (!defined(BSD)) || (BSD < 199306) +# include +#endif +#include + +#define _PATH_HEQUIV "/etc/hosts.equiv" +#define _PATH_HOSTS "/etc/hosts" +#define _PATH_NETWORKS "/etc/networks" +#define _PATH_PROTOCOLS "/etc/protocols" +#define _PATH_SERVICES "/etc/services" + +extern int h_errno; + +/* + * Structures returned by network data base library. All addresses are + * supplied in host order, and returned in network order (suitable for + * use in system calls). + */ +struct hostent { + char *h_name; /* official name of host */ + char **h_aliases; /* alias list */ + int h_addrtype; /* host address type */ + int h_length; /* length of address */ + char **h_addr_list; /* list of addresses from name server */ +#define h_addr h_addr_list[0] /* address, for backward compatiblity */ +}; + +/* + * Assumption here is that a network number + * fits in an unsigned long -- probably a poor one. + */ +struct netent { + char *n_name; /* official name of net */ + char **n_aliases; /* alias list */ + int n_addrtype; /* net address type */ + unsigned long n_net; /* network # */ +}; + +struct servent { + char *s_name; /* official service name */ + char **s_aliases; /* alias list */ + int s_port; /* port # */ + char *s_proto; /* protocol to use */ +}; + +struct protoent { + char *p_name; /* official protocol name */ + char **p_aliases; /* alias list */ + int p_proto; /* protocol # */ +}; + +/* + * Error return codes from gethostbyname() and gethostbyaddr() + * (left in extern int h_errno). + */ + +#define NETDB_INTERNAL -1 /* see errno */ +#define NETDB_SUCCESS 0 /* no problem */ +#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ +#define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */ +#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ +#define NO_DATA 4 /* Valid name, no data record of requested type */ +#define NO_ADDRESS NO_DATA /* no address, look for MX record */ + +__BEGIN_DECLS +void endhostent __P((void)); +void endnetent __P((void)); +void endprotoent __P((void)); +void endservent __P((void)); +struct hostent *gethostbyaddr __P((const char *, int, int)); +struct hostent *gethostbyname __P((const char *)); +struct hostent *gethostbyname2 __P((const char *, int)); +struct hostent *gethostent __P((void)); +struct netent *getnetbyaddr __P((long, int)); /* u_long? */ +struct netent *getnetbyname __P((const char *)); +struct netent *getnetent __P((void)); +struct protoent *getprotobyname __P((const char *)); +struct protoent *getprotobynumber __P((int)); +struct protoent *getprotoent __P((void)); +struct servent *getservbyname __P((const char *, const char *)); +struct servent *getservbyport __P((int, const char *)); +struct servent *getservent __P((void)); +void herror __P((const char *)); +const char *hstrerror __P((int)); +void sethostent __P((int)); +/* void sethostfile __P((const char *)); */ +void setnetent __P((int)); +void setprotoent __P((int)); +void setservent __P((int)); +__END_DECLS + +/* This is nec'y to make this include file properly replace the sun version. */ +#ifdef __GNU_LIBRARY__ +#include +#else +#ifdef sun +struct rpcent { + char *r_name; /* name of server for this rpc program */ + char **r_aliases; /* alias list */ + int r_number; /* rpc program number */ +}; +struct rpcent *getrpcbyname(), *getrpcbynumber(), *getrpcent(); +#endif /* sun */ +#endif /* __GNU_LIBRARY__ */ + +#endif /* !_NETDB_H_ */ diff --git a/resolv/res_send.c b/resolv/res_send.c index 4ee52b438b..f8e58f3e11 100644 --- a/resolv/res_send.c +++ b/resolv/res_send.c @@ -109,6 +109,13 @@ static int vc = 0; /* is the socket a virtual ciruit? */ #define FD_ZERO(p) bzero((char *)(p), sizeof(*(p))) #endif +/* XXX - this should be done in portability.h */ +#if (defined(BSD) && (BSD >= 199103)) || defined(linux) +# define CAN_RECONNECT 1 +#else +# define CAN_RECONNECT 0 +#endif + #ifndef DEBUG # define Dprint(cond, args) /*empty*/ # define DprintQ(cond, args, query, size) /*empty*/ @@ -484,7 +491,7 @@ res_send(buf, buflen, ans, anssiz) _res_close(); s = socket(PF_INET, SOCK_DGRAM, 0); if (s < 0) { -#if !defined(BSD) || (BSD < 199103) +#if !CAN_RECONNECT bad_dg_sock: #endif terrno = errno; @@ -538,7 +545,7 @@ res_send(buf, buflen, ans, anssiz) * for responses from more than one server. */ if (connected) { -#if defined(BSD) && (BSD >= 199103) +#if CAN_RECONNECT struct sockaddr_in no_addr; no_addr.sin_family = AF_INET; diff --git a/sysdeps/mach/hurd/i386/intr-msg.h b/sysdeps/mach/hurd/i386/intr-msg.h new file mode 100644 index 0000000000..353a6d2acd --- /dev/null +++ b/sysdeps/mach/hurd/i386/intr-msg.h @@ -0,0 +1,47 @@ +/* Machine-dependent details of interruptible RPC messaging. i386 version. +Copyright (C) 1995 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + + +#define INTR_MSG_TRAP(msg, option, send_size, rcv_size, rcv_name, timeout, notify) \ +({ \ + error_t err; \ + asm (".globl _hurd_intr_rpc_msg_do_trap\n" \ + ".globl _hurd_intr_rpc_msg_in_trap\n" \ + ".globl _hurd_intr_rpc_msg_cx_sp\n" \ + ".globl _hurd_intr_rpc_msg_sp_restored\n" \ + " movl %%esp, %%ecx\n" \ + " leal %1, %%esp\n" \ + "_hurd_intr_rpc_msg_cx_sp: movl $-25, %%eax\n" \ + "_hurd_intr_rpc_msg_do_trap: lcall $7, $0 # status in %0\n" \ + "_hurd_intr_rpc_msg_in_trap: movl %%ecx, %%esp\n" \ + "_hurd_intr_rpc_msg_sp_restored:" \ + : "=a" (err) : "m" ((&msg)[-1]) : "%ecx"); \ + err; \ +}) + + +static void inline +INTR_MSG_BACK_OUT (struct i386_thread_state *state) +{ + extern const void _hurd_intr_rpc_msg_cx_sp; + if (state->eip >= (natural_t) &_hurd_intr_rpc_msg_cx_sp) + state->uesp = state->ecx; + else + state->ecx = state->uesp; +} -- cgit v1.2.3