List of known bugs (certainly very incomplete)
----------------------------------------------
-Time-stamp: <1997-05-12T02:39:19+0200 drepper>
+Time-stamp: <1997-05-21T21:25:40+0200 drepper>
This following list contains those bugs which I'm aware of. Please
make sure that bugs you report are not listed here. If you can fix one
Another source of information about bugs is the problem data base of the
GNU project. There is an easy to use WWW interface is available at
- http://pogo.gnu.ai.mit.edu:8080/cgi-bin/wwwgnats.pl
+ http://www-gnats.gnu.ai.mit.edu:8080/cgi-bin/wwwgnats.pl
I would appreciate it very much if you could verify the problem was not
reported before by looking though the database. To make the information
+1997-05-22 04:09 Ulrich Drepper <drepper@cygnus.com>
+
+ * sunrpc/clnt_perr.c (clnt_sperrno): Change type of variable i
+ to size_t to prevent warning.
+ * sunrpc/rpcinfo.c (get_inet_address): Use UNADDR_NONE and INADDR_ANY
+ instead of numeric values.
+ Various cleanups.
+ * sunrpc/xdr_mem.c: Use `const char *' instead of `const caddr_t'
+ for xdrmem_putbytes.
+ * sunrpc/xdr_rec.c: Likewise.
+ * sunrpc/xdr_stdio.c: Likewise.
+ * sunrpc/rpc/xdr.h: Likewise.
+
+ * sysdeps/unix/sysv/linux/arm/syscall.s: Pretty printing.
+ * sysdeps/unix/sysv/linux/arm/sysdep.h: Likewise.
+ * sysdeps/unix/sysv/linux/i386/sysdep.h: Likewise.
+
+1997-05-21 22:22 Philip Blundell <pjb27@cam.ac.uk>
+
+ * inet/Makefile (headers): Add netinet/ip6.h, netinet/icmp6.h.
+ * sysdeps/generic/netinet/ip6.h: New file (for IPv6 Advanced API).
+ * sysdeps/generic/netinet/icmp6.h: Likewise.
+ * sysdeps/unix/sysv/linux/netinet/in.h: Fix typo.
+ * sysdeps/stub/direntry.h (struct dirent): Add d_fileno (needed by
+ glob.c).
+ * sysdeps/standalone/arm/errnos.h: Add EPROTOTYPE, ESRCH.
+ * sysdeps/unix/arm/sysdep.h: Avoid warning about nested comments.
+ * sysdeps/stub/accept.c (accept): Make args match prototype.
+ * sysdeps/stub/bind.c (bind): Likewise.
+ * sysdeps/stub/connect.c (connect): Likewise.
+ * sysdeps/stub/getpeername.c (getpeername): Likewise.
+ * sysdeps/stub/getsockname.c (getsockname): Likewise.
+ * sysdeps/stub/recvfrom.c (recvfrom): Likewise.
+ * sysdeps/stub/send.c (send): Likewise.
+ * sysdeps/stub/ttyname_r.c (ttyname_r): Likewise.
+ * sysdeps/stub/readv.c (readv): Likewise.
+ * sysdeps/stub/writev.c (writev): Likewise.
+ * sysdeps/stub/sendto.c (sendto): Likewise.
+ * sysdeps/unix/sysv/linux/arm/profil-counter.h: New file.
+
+1997-05-18 12:46 Philip Blundell <pjb27@cam.ac.uk>
+
+ * sysdeps/unix/sysv/linux/socketbits.h: Add new macros CMSG_SPACE,
+ CMSG_LEN, CMSG_ALIGN (for IPv6 Advanced API).
+
+1997-05-21 13:51 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * sysdeps/unix/sysv/linux/shmat.c (shmat): Add cast to prevent warning.
+
+ * sunrpc/rpcsvc/rusers.x: Provide prototypes for implemented
+ functions, include <rpc/xdr.h>.
+
+ * string/strverscmp.c: Correct typos in comment.
+
+ * sunrpc/rpc/xdr.h: Add more `const'.
+ * sunrpc/xdr_stdio.c: Likewise.
+ * sunrpc/xdr_rec.c: Likewise.
+
1997-05-21 17:50 Ulrich Drepper <drepper@cygnus.com>
* elf/Makefile (dl-routines): Add dl-sysdepio.
headers := netinet/ether.h netinet/in.h netinet/if_ether.h \
netinet/tcp.h netinet/ip.h $(wildcard arpa/*.h protocols/*.h) \
- aliases.h
+ aliases.h netinet/ip6.h netinet/icmp6.h
distribute := netgroup.h
#include <ctype.h>
/* states: S_N: normal, S_I: comparing integral part, S_F: comparing
- Fractionnal parts, S_Z: idem but with leading Zeroes only */
+ fractionnal parts, S_Z: idem but with leading Zeroes only */
#define S_N 0x0
#define S_I 0x4
#define S_F 0x8
char *
clnt_sperrno (enum clnt_stat stat)
{
- int i;
+ size_t i;
for (i = 0; i < sizeof (rpc_errlist) / sizeof (struct rpc_errtab); i++)
{
/* put a long to " */
bool_t (*x_getbytes) __P ((XDR * __xdrs, caddr_t __addr, u_int __len));
/* get some bytes from " */
- bool_t (*x_putbytes) __P ((XDR * __xdrs, __const caddr_t __addr,
+ bool_t (*x_putbytes) __P ((XDR * __xdrs, __const char *__addr,
u_int __len));
/* put some bytes to " */
- u_int (*x_getpostn) __P ((XDR * __xdrs));
+ u_int (*x_getpostn) __P ((__const XDR * __xdrs));
/* returns bytes off from beginning */
bool_t (*x_setpostn) __P ((XDR * __xdrs, u_int pos));
/* lets you reposition the stream */
long *(*x_inline) __P ((XDR * __xdrs, int len));
/* buf quick ptr to buffered data */
- void (*x_destroy) __P ((XDR * __xdrs));
+ void (*x_destroy) __P ((__const XDR * __xdrs));
/* free privates of this xdr_stream */
}
*x_ops;
if (errflg || function == NONE)
{
usage ();
- return (1);
+ return 1;
}
switch (function)
if (portnum != 0)
{
usage ();
- return (1);
+ return 1;
}
pmapdump (argc - optind, argv + optind);
break;
if (portnum != 0)
{
usage ();
- return (1);
+ return 1;
}
brdcst (argc - optind, argv + optind);
break;
break;
}
- return (0);
+ return 0;
}
static void
to, &sock)) == NULL)
{
clnt_pcreateerror ("rpcinfo");
- printf (_ ("program %lu is not available\n"),
- prognum);
+ printf (_("program %lu is not available\n"), prognum);
exit (1);
}
to.tv_sec = 10;
to, &sock)) == NULL)
{
clnt_pcreateerror ("rpcinfo");
- printf (_ ("program %lu version %lu is not available\n"),
+ printf (_("program %lu version %lu is not available\n"),
prognum, MAX_VERS);
exit (1);
}
to, &sock)) == NULL)
{
clnt_pcreateerror ("rpcinfo");
- printf (_ ("program %lu version %lu is not available\n"),
+ printf (_("program %lu version %lu is not available\n"),
prognum, vers);
exit (1);
}
to, &sock)) == NULL)
{
clnt_pcreateerror ("rpcinfo");
- printf ("program %lu version %lu is not available\n",
+ printf (_("program %lu version %lu is not available\n"),
prognum, vers);
exit (1);
}
&sock, 0, 0)) == NULL)
{
clnt_pcreateerror ("rpcinfo");
- printf (_ ("program %lu is not available\n"),
- prognum);
+ printf (_("program %lu is not available\n"), prognum);
exit (1);
}
to.tv_sec = 10;
&sock, 0, 0)) == NULL)
{
clnt_pcreateerror ("rpcinfo");
- printf (_ ("program %lu version %lu is not available\n"),
+ printf (_("program %lu version %lu is not available\n"),
prognum, MAX_VERS);
exit (1);
}
&sock, 0, 0)) == NULL)
{
clnt_pcreateerror ("rpcinfo");
- printf (_ ("program %lu version %lu is not available\n"),
+ printf (_("program %lu version %lu is not available\n"),
prognum, vers);
exit (1);
}
0, 0)) == NULL)
{
clnt_pcreateerror ("rpcinfo");
- printf (_ ("program %lu version %lu is not available\n"),
+ printf (_("program %lu version %lu is not available\n"),
prognum, vers);
exit (1);
}
if (rpcerr.re_status != RPC_SUCCESS)
{
clnt_perror (client, "rpcinfo");
- printf (_ ("program %lu version %lu is not available\n"),
- prognum, vers);
- return (-1);
+ printf (_("program %lu version %lu is not available\n"), prognum, vers);
+ return -1;
}
else
{
- printf (_ ("program %lu version %lu ready and waiting\n"),
- prognum, vers);
- return (0);
+ printf (_("program %lu version %lu ready and waiting\n"), prognum, vers);
+ return 0;
}
}
if ((client = clnttcp_create (&server_addr, PMAPPROG,
PMAPVERS, &socket, 50, 500)) == NULL)
{
- clnt_pcreateerror (_ ("rpcinfo: can't contact portmapper"));
+ clnt_pcreateerror (_("rpcinfo: can't contact portmapper"));
exit (1);
}
if (clnt_call (client, PMAPPROC_DUMP, (xdrproc_t) xdr_void, NULL,
(xdrproc_t) xdr_pmaplist, (caddr_t) &head,
minutetimeout) != RPC_SUCCESS)
{
- fprintf (stderr, _ ("rpcinfo: can't contact portmapper: "));
+ fputs (_("rpcinfo: can't contact portmapper: "), stderr);
clnt_perror (client, "rpcinfo");
exit (1);
}
if (head == NULL)
{
- printf (_ ("No remote programs registered.\n"));
+ fputs (_("No remote programs registered.\n"), stdout);
}
else
{
- printf (_ (" program vers proto port\n"));
+ fputs (_(" program vers proto port\n"), stdout);
for (; head != NULL; head = head->pml_next)
{
printf ("%10ld%5ld",
hp = gethostbyaddr ((char *) &who->sin_addr, sizeof who->sin_addr,
AF_INET);
printf ("%s %s\n", inet_ntoa (who->sin_addr),
- (hp == NULL) ? _ ("(unknown)") : hp->h_name);
- return (FALSE);
+ (hp == NULL) ? _("(unknown)") : hp->h_name);
+ return FALSE;
}
static void
(resultproc_t) reply_proc);
if ((rpc_stat != RPC_SUCCESS) && (rpc_stat != RPC_TIMEDOUT))
{
- fprintf (stderr, _ ("rpcinfo: broadcast failed: %s\n"),
+ fprintf (stderr, _("rpcinfo: broadcast failed: %s\n"),
clnt_sperrno (rpc_stat));
exit (1);
}
}
if (getuid ())
{ /* This command allowed only to root */
- fprintf (stderr, "Sorry. You are not root\n");
+ fputs (_("Sorry. You are not root\n"), stderr);
exit (1);
}
prog_num = getprognum (argv[0]);
version_num = getvers (argv[1]);
if ((pmap_unset (prog_num, version_num)) == 0)
{
- fprintf (stderr, _ ("rpcinfo: Could not delete registration for prog %s version %s\n"),
+ fprintf (stderr, _("rpcinfo: Could not delete registration for prog %s version %s\n"),
argv[0], argv[1]);
exit (1);
}
static void
usage ()
{
- fprintf (stderr, _ ("Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"));
- fprintf (stderr, _ (" rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n"));
- fprintf (stderr, _ (" rpcinfo -p [ host ]\n"));
- fprintf (stderr, _ (" rpcinfo -b prognum versnum\n"));
- fprintf (stderr, _ (" rpcinfo -d prognum versnum\n"));
+ fputs (_("Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"),
+ stderr);
+ fputs (_(" rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n"),
+ stderr);
+ fputs (_(" rpcinfo -p [ host ]\n"), stderr);
+ fputs (_(" rpcinfo -b prognum versnum\n"), stderr);
+ fputs (_(" rpcinfo -d prognum versnum\n"), stderr);
}
static u_long
rpc = getrpcbyname (arg);
if (rpc == NULL)
{
- fprintf (stderr, _ ("rpcinfo: %s is unknown service\n"),
- arg);
+ fprintf (stderr, _("rpcinfo: %s is unknown service\n"), arg);
exit (1);
}
prognum = rpc->r_number;
prognum = (u_long) atoi (arg);
}
- return (prognum);
+ return prognum;
}
static u_long
register u_long vers;
vers = (int) atoi (arg);
- return (vers);
+ return vers;
}
static void
bzero ((char *) addr, sizeof *addr);
addr->sin_addr.s_addr = (u_long) inet_addr (host);
- if (addr->sin_addr.s_addr == -1 || addr->sin_addr.s_addr == 0)
+ if (addr->sin_addr.s_addr == INADDR_NONE
+ || addr->sin_addr.s_addr == INADDR_ANY)
{
if ((hp = gethostbyname (host)) == NULL)
{
- fprintf (stderr, _ ("rpcinfo: %s is unknown host\n"),
+ fprintf (stderr, _("rpcinfo: %s is unknown host\n"),
host);
exit (1);
}
%extern "C" {
%#endif
%
+%#include <rpc/xdr.h>
+%
%/*
% * The following structures are used by version 2 of the rusersd protocol.
% * They were not developed with rpcgen, so they do not appear as RPCL.
% int uta_cnt;
%};
%typedef struct utmparr utmparr;
-%int xdr_utmparr();
+%int xdr_utmparr(XDR *xdrs, struct utmparr *objp);
%
%struct utmpidle {
% struct ru_utmp ui_utmp;
% int uia_cnt;
%};
%
-%int xdr_utmpidlearr();
+%int xdr_utmpidlearr(XDR *xdrs, struct utmpidlearr *objp);
%
%#ifdef __cplusplus
%}
static bool_t xdrmem_getlong (XDR *, long *);
static bool_t xdrmem_putlong (XDR *, const long *);
static bool_t xdrmem_getbytes (XDR *, caddr_t, u_int);
-static bool_t xdrmem_putbytes (XDR *, const caddr_t, u_int);
+static bool_t xdrmem_putbytes (XDR *, const char *, u_int);
static u_int xdrmem_getpos (const XDR *);
static bool_t xdrmem_setpos (XDR *, u_int);
static long *xdrmem_inline (XDR *, int);
static bool_t
xdrmem_putbytes (xdrs, addr, len)
XDR *xdrs;
- const caddr_t addr;
+ const char *addr;
u_int len;
{
static bool_t xdrrec_getlong (XDR *, long *);
static bool_t xdrrec_putlong (XDR *, const long *);
static bool_t xdrrec_getbytes (XDR *, caddr_t, u_int);
-static bool_t xdrrec_putbytes (XDR *, const caddr_t, u_int);
-static u_int xdrrec_getpos (XDR *);
+static bool_t xdrrec_putbytes (XDR *, const char *, u_int);
+static u_int xdrrec_getpos (const XDR *);
static bool_t xdrrec_setpos (XDR *, u_int);
static long *xdrrec_inline (XDR *, int);
-static void xdrrec_destroy (XDR *);
+static void xdrrec_destroy (const XDR *);
static const struct xdr_ops xdrrec_ops =
{
static bool_t
xdrrec_putbytes (xdrs, addr, len)
XDR *xdrs;
- const caddr_t addr;
+ const char *addr;
u_int len;
{
RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
}
static u_int
-xdrrec_getpos (XDR *xdrs)
+xdrrec_getpos (const XDR *xdrs)
{
RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
long pos;
static void
xdrrec_destroy (xdrs)
- XDR *xdrs;
+ const XDR *xdrs;
{
RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
static bool_t xdrstdio_getlong (XDR *, long *);
static bool_t xdrstdio_putlong (XDR *, const long *);
static bool_t xdrstdio_getbytes (XDR *, caddr_t, u_int);
-static bool_t xdrstdio_putbytes (XDR *, const caddr_t, u_int);
-static u_int xdrstdio_getpos (XDR *);
+static bool_t xdrstdio_putbytes (XDR *, const char *, u_int);
+static u_int xdrstdio_getpos (const XDR *);
static bool_t xdrstdio_setpos (XDR *, u_int);
static long *xdrstdio_inline (XDR *, int);
-static void xdrstdio_destroy (XDR *);
+static void xdrstdio_destroy (const XDR *);
/*
* Ops vector for stdio type XDR
*/
static void
xdrstdio_destroy (xdrs)
- XDR *xdrs;
+ const XDR *xdrs;
{
(void) fflush ((FILE *) xdrs->x_private);
/* xx should we close the file ?? */
}
static bool_t
-xdrstdio_putbytes (XDR *xdrs, const caddr_t addr, u_int len)
+xdrstdio_putbytes (XDR *xdrs, const char *addr, u_int len)
{
if ((len != 0) && (fwrite (addr, (int) len, 1, (FILE *) xdrs->x_private) != 1))
return FALSE;
}
static u_int
-xdrstdio_getpos (XDR *xdrs)
+xdrstdio_getpos (const XDR *xdrs)
{
return (u_int) ftell ((FILE *) xdrs->x_private);
}
--- /dev/null
+/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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 General Public License as published by
+ the Free Software Foundation; either version 2, 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 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef _NETINET_ICMP6_H
+#define _NETINET_ICMP6_H 1
+
+#include <sys/types.h>
+
+#define ICMPV6_FILTER 1
+
+#define ICMPV6_FILTER_BLOCK 1
+#define ICMPV6_FILTER_PASS 2
+#define ICMPV6_FILTER_BLOCKOTHERS 3
+#define ICMPV6_FILTER_PASSONLY 4
+
+struct icmpv6_filter
+ {
+ u_int32_t data[8];
+ };
+
+struct icmpv6hdr
+ {
+ u_int8_t icmpv6_type; /* type field */
+ u_int8_t icmpv6_code; /* code field */
+ u_int16_t icmpv6_cksum; /* checksum field */
+ union
+ {
+ u_int32_t un_data32[1]; /* type-specific field */
+ u_int16_t un_data16[2]; /* type-specific field */
+ u_int8_t un_data8[4]; /* type-specific field */
+ } icmpv6_dataun;
+ };
+
+#define icmpv6_data32 icmpv6_dataun.un_data32
+#define icmpv6_data16 icmpv6_dataun.un_data16
+#define icmpv6_data8 icmpv6_dataun.un_data8
+#define icmpv6_pptr icmpv6_data32[0] /* parameter prob */
+#define icmpv6_mtu icmpv6_data32[0] /* packet too big */
+#define icmpv6_id icmpv6_data16[0] /* echo request/reply */
+#define icmpv6_seq icmpv6_data16[1] /* echo request/reply */
+#define icmpv6_maxdelay icmpv6_data16[0] /* mcast group membership */
+
+#define ICMPV6_DEST_UNREACH 1
+#define ICMPV6_PACKET_TOOBIG 2
+#define ICMPV6_TIME_EXCEEDED 3
+#define ICMPV6_PARAMETER_PROBLEM 4
+#define ICMPV6_INFOMSG_MASK 128 /* message is info if bit set */
+#define ICMPV6_ECHOREQUEST 128
+#define ICMPV6_ECHOREPLY 129
+#define ICMPV6_MGM_QUERY 130
+#define ICMPV6_MGM_REPORT 131
+#define ICMPV6_MGM_REDUCTION 132
+
+#define ICMPV6_DEST_UNREACH_NOROUTE 0
+#define ICMPV6_DEST_UNREACH_ADMIN 1 /* administratively prohibited */
+#define ICMPV6_DEST_UNREACH_NOTNEIGHBOR 2 /* not a neighbor (and must be) */
+#define ICMPV6_DEST_UNREACH_ADDR 3
+#define ICMPV6_DEST_UNREACH_NOPORT 4
+#define ICMPV6_TIME_EXCEED_HOPS 0 /* Hop Limit == 0 in transit */
+#define ICMPV6_TIME_EXCEED_REASSEMBLY 1 /* Reassembly time out */
+#define ICMPV6_PARAMPROB_HEADER 0 /* erroneous header field */
+#define ICMPV6_PARAMPROB_NEXTHEADER 1 /* unrecognized Next Header */
+#define ICMPV6_PARAMPROB_OPTION 2 /* unrecognized option */
+
+#if defined(__OPTIMIZE__)
+#include <asm/bitops.h>
+
+#define ICMPV6_FILTER_WILLPASS(type, filterp) \
+ (test_bit(type, filterp) == 0)
+
+#define ICMPV6_FILTER_WILLBLOCK(type, filterp) \
+ test_bit(type, filterp)
+
+#define ICMPV6_FILTER_SETPASS(type, filterp) \
+ clear_bit(type & 0x1f, &((filterp)->data[type >> 5]))
+
+#define ICMPV6_FILTER_SETBLOCK(type, filterp) \
+ set_bit(type & 0x1f, &((filterp)->data[type >> 5]))
+#else
+#define ICMPV6_FILTER_WILLPASS(type, filterp) \
+ ((((filterp)->data[(type) >> 5]) & (1 << ((type) & 31))) == 0)
+
+#define ICMPV6_FILTER_WILLBLOCK(type, filterp) \
+ ((((filterp)->data[(type) >> 5]) & (1 << ((type) & 31))) != 0)
+
+#define ICMPV6_FILTER_SETPASS(type, filterp) \
+ ((((filterp)->data[(type) >> 5]) &= ~(1 << ((type) & 31))))
+
+#define ICMPV6_FILTER_SETBLOCK(type, filterp) \
+ ((((filterp)->data[(type) >> 5]) |= (1 << ((type) & 31))))
+#endif
+
+#define ICMPV6_FILTER_SETPASSALL(filterp) \
+ memset(filterp, 0, sizeof(struct icmpv6_filter));
+
+#define ICMPV6_FILTER_SETBLOCKALL(filterp) \
+ memset(filterp, 0xFF, sizeof(struct icmpv6_filter));
+
+#define ND6_ROUTER_SOLICITATION 133
+#define ND6_ROUTER_ADVERTISEMENT 134
+#define ND6_NEIGHBOR_SOLICITATION 135
+#define ND6_NEIGHBOR_ADVERTISEMENT 136
+#define ND6_REDIRECT 137
+
+enum nd6_option
+ {
+ ND6_OPT_SOURCE_LINKADDR=1,
+ ND6_OPT_TARGET_LINKADDR=2,
+ ND6_OPT_PREFIX_INFORMATION=3,
+ ND6_OPT_REDIRECTED_HEADER=4,
+ ND6_OPT_MTU=5,
+ ND6_OPT_ENDOFLIST=256
+ };
+
+struct nd6_router_solicit /* router solicitation */
+ {
+ struct icmpv6hdr rsol_hdr;
+ };
+
+#define rsol_type rsol_hdr.icmpv6_type
+#define rsol_code rsol_hdr.icmpv6_code
+#define rsol_cksum rsol_hdr.icmpv6_cksum
+#define rsol_reserved rsol_hdr.icmpv6_data32[0]
+
+struct nd6_router_advert
+ {
+ struct icmpv6hdr radv_hdr;
+ u_int32_t radv_reachable; /* reachable time */
+ u_int32_t radv_retransmit; /* reachable retransmit time */
+ };
+
+#define radv_type radv_hdr.icmpv6_type
+#define radv_code radv_hdr.icmpv6_code
+#define radv_cksum radv_hdr.icmpv6_cksum
+#define radv_maxhoplimit radv_hdr.icmpv6_data8[0]
+#define radv_m_o_res radv_hdr.icmpv6_data8[1]
+#define ND6_RADV_M_BIT 0x80
+#define ND6_RADV_O_BIT 0x40
+#define radv_router_lifetime radv_hdr.icmpv6_data16[1]
+
+struct nd6_nsolicitation /* neighbor solicitation */
+ {
+ struct icmpv6hdr nsol6_hdr;
+ struct in6_addr nsol6_target;
+ };
+
+struct nd6_nadvertisement /* neighbor advertisement */
+ {
+ struct icmpv6hdr nadv6_hdr;
+ struct in6_addr nadv6_target;
+ };
+
+#define nadv6_flags nadv6_hdr.icmpv6_data32[0]
+#define ND6_NADVERFLAG_ISROUTER 0x80
+#define ND6_NADVERFLAG_SOLICITED 0x40
+#define ND6_NADVERFLAG_OVERRIDE 0x20
+
+struct nd6_redirect /* redirect */
+ {
+ struct icmpv6hdr redirect_hdr;
+ struct in6_addr redirect_target;
+ struct in6_addr redirect_destination;
+ };
+
+struct nd6_opt_prefix_info /* prefix information */
+ {
+ u_int8_t opt_type;
+ u_int8_t opt_length;
+ u_int8_t opt_prefix_length;
+ u_int8_t opt_l_a_res;
+ u_int32_t opt_valid_life;
+ u_int32_t opt_preferred_life;
+ u_int32_t opt_reserved2;
+ struct in6_addr opt_prefix;
+ };
+
+#define ND6_OPT_PI_L_BIT 0x80
+#define ND6_OPT_PI_A_BIT 0x40
+
+struct nd6_opt_mtu /* MTU option */
+ {
+ u_int8_t opt_type;
+ u_int8_t opt_length;
+ u_int16_t opt_reserved;
+ u_int32_t opt_mtu;
+ };
+
+#endif /* _NETINET6_ICMPV6_H */
--- /dev/null
+/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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 General Public License as published by
+ the Free Software Foundation; either version 2, 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 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef _NETINET_IP6_H
+#define _NETINET_IP6_H 1
+
+#include <netinet/in.h>
+#include <endian.h>
+
+struct ipv6hdr {
+#if (__BYTE_ORDER == __LITTLE_ENDIAN)
+ u_int8_t ipv6_version:4;
+ u_int8_t ipv6_priority:4; /* going away? */
+ u_int32_t ipv6_flowid:24;
+#elif (__BYTE_ORDER == __BIG_ENDIAN)
+ u_int32_t ipv6_flowid:24;
+ u_int8_t ipv6_priority:4; /* going away? */
+ u_int8_t ipv6_version:4;
+#else
+#error Unknown endianness
+#endif
+ u_int16_t ipv6_len;
+ u_int8_t ipv6_nextheader;
+ u_int8_t ipv6_hoplimit;
+ struct in6_addr ipv6_src;
+ struct in6_addr ipv6_dst;
+};
+
+#endif /* _NETINET_IP6_H */
#define EILSEQ 16
#define ENOEXEC 17
#define ENOENT 18
+#define EPROTOTYPE 19
+#define ESRCH 20
#endif
#define __set_errno(val) errno = (val)
int
accept (fd, addr, addr_len)
int fd;
- struct sockaddr *addr;
+ __SOCKADDR_ARG addr;
size_t *addr_len;
{
__set_errno (ENOSYS);
int
bind (fd, addr, len)
int fd;
- const struct sockaddr *addr;
+ __CONST_SOCKADDR_ARG addr;
size_t len;
{
__set_errno (ENOSYS);
int
connect (fd, addr, len)
int fd;
- const struct sockaddr *addr;
+ __CONST_SOCKADDR_ARG addr;
size_t len;
{
__set_errno (ENOSYS);
struct dirent
{
char d_name[1]; /* Variable length. */
+ int d_fileno;
};
int
getpeername (fd, addr, len)
int fd;
- struct sockaddr *addr;
+ __SOCKADDR_ARG addr;
size_t *len;
{
__set_errno (ENOSYS);
int
getsockname (fd, addr, len)
int fd;
- struct sockaddr *addr;
+ __SOCKADDR_ARG addr;
size_t *len;
{
__set_errno (ENOSYS);
__readv (fd, vector, count)
int fd;
const struct iovec *vector;
- size_t count;
+ int count;
{
__set_errno (ENOSYS);
return -1;
void *buf;
size_t n;
int flags;
- struct sockaddr *addr;
+ __SOCKADDR_ARG addr;
size_t *addr_len;
{
__set_errno (ENOSYS);
int
send (fd, buf, n, flags)
int fd;
- void *buf;
+ __const __ptr_t buf;
size_t n;
int flags;
{
int
sendto (fd, buf, n, flags, addr, addr_len)
int fd;
- void *buf;
+ __const __ptr_t buf;
size_t n;
int flags;
- const struct sockaddr *addr;
+ __CONST_SOCKADDR_ARG addr;
size_t addr_len;
{
__set_errno (ENOSYS);
ttyname_r (fd, buf, buflen)
int fd;
char *buf;
- int buflen;
+ size_t buflen;
{
__set_errno (ENOSYS);
return -1;
__writev (fd, vector, count)
int fd;
const struct iovec *vector;
- size_t count;
+ int count;
{
__set_errno (ENOSYS);
return -1;
#include <sysdeps/unix/sysdep.h>
#include <sysdeps/arm/sysdep.h>
-/* Some definitions to allow the assembler in sysdeps/unix/*.S to build
+/* Some definitions to allow the assembler in sysdeps/unix/ to build
without needing ARM-specific versions of all the files. */
#define ret RETINSTR(mov, pc, r14)
--- /dev/null
+/* Low-level statistical profiling support function. Linux/ARM version.
+ Copyright (C) 1996, 1997 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <sigcontext.h>
+
+void
+profil_counter (int signo, struct sigcontext sc)
+{
+ profil_count ((void *) sc.eip);
+}
-/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997 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
/* Normally encoding the system call number in the instruction is
good. But we pay the price here. */
-
+
sub sp, sp, $0xc @ get 3 words on the stack
orr r0, r0, $0xef000000 @ make up a SWI instruction
- orr r0, r0, $SWI_BASE
+ orr r0, r0, $SWI_BASE
str r0, [sp]
ldr r0, _reti
str r0, [sp, $4]
RETINSTR(mov, pc, r14)
_reti: .word 0xe51ff004 @ ldr pc, [pc, $4]
-
+
PSEUDO_END (syscall)
/* Copyright (C) 1992, 93, 95, 96, 97 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
-ARM changes by Philip Blundell, <pjb27@cam.ac.uk>, May 1997.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
+ ARM changes by Philip Blundell, <pjb27@cam.ac.uk>, May 1997.
-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 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.
+ 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. */
+ 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#ifndef _LINUX_ARM_SYSDEP_H
#define _LINUX_ARM_SYSDEP_H 1
#ifndef PIC
#define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
#else
-#error Aiee
+#error Aiee
#endif /* PIC */
#undef DO_CALL
#define DO_CALL(args, syscall_name) \
- swi SYS_ify (syscall_name);
+ swi SYS_ify (syscall_name);
#endif /* ASSEMBLER */
-/* Copyright (C) 1992, 93, 95, 96 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
-
-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. */
+/* Copyright (C) 1992, 93, 95, 96, 97 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#ifndef _LINUX_I386_SYSDEP_H
#define _LINUX_I386_SYSDEP_H 1
(((u_int32_t *)(a))[2] == 0) && (ntohl(((u_int32_t *)(a))[3]) > 1))
-/* Bind socket to a priviledged IP port. */
+/* Bind socket to a privileged IP port. */
extern int bindresvport __P ((int __sockfd, struct sockaddr_in *__sin));
int retval;
unsigned long raddr;
- retval = __ipc (IPCOP_shmat, shmid, shmflg, (int) &raddr, shmaddr);
+ retval = __ipc (IPCOP_shmat, shmid, shmflg, (int) &raddr, (void *) shmaddr);
return ((unsigned long int) retval > -(unsigned long int) SHMLBA
? (void *) retval : (void *) raddr);
}
#endif
#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
#define CMSG_FIRSTHDR(mhdr) \
- ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \
+ ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \
? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL)
-
+#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
+ & ~(sizeof (size_t) - 1))
+#define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+ + CMSG_ALIGN (sizeof (struct cmsghdr)))
+#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
#ifndef _EXTERN_INLINE
# define _EXTERN_INLINE extern __inline