Update. cvs/libc-ud-970520
authorUlrich Drepper <drepper@redhat.com>
Wed, 21 May 1997 01:48:59 +0000 (01:48 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 21 May 1997 01:48:59 +0000 (01:48 +0000)
1997-05-21 02:49  Ulrich Drepper  <drepper@cygnus.com>

* gnu-versions.h (_GNU_OBSTACK_INTERFACE_VERSION): Set to 2 since
interface was changed with addition of _obstack_memory_used.
Suggested by Ian Taylor <ian@cygnus.com>.

* malloc/obstack.c: Include <config.h>.  Include <stdlib.h> only
if __GNU_LIBRARY__ or HAVE_STDLIB_H is defined.
Reported by Ian Taylor <ian@cygnus.com>.

* dirent/Makefile (routines): Add versionsort.
* dirent/dirent.h: Add prototype for versionsort.
* dirent/versionsort.c: New file.
* manual/filesys.texi: Add documentation for versionsort.
* manual/string.texi: Add documentation for strverscmp.
* string/Makefile (routines): Add strverscmp.
(tests): Add tst-svc.
* string/string.h: Add prototype for strverscmp.
* string/strverscmp.c: New file.
* string/tst-svc.c: New file.  Test for strverscmp.
* string/tst-svc.input: New file.  Input data for tst-svc.
* string/tst-svc.expect: New file.  Expected out from tst-svc.

* math/Makefile (calls): Add s_signbit.

* po/sv.po: Update.

* resolv/nss_dns/dns-host.c: Add casts to prevent warnings.
* sunrpc/pmap_rmt.c: Likewise.

* string/basename.c: Don't use ISO C definition style.
Include <config.h> is HAVE_CONFIG_H is defined.

* sunrpc/proto.h: Add `const' wherever possible.
* sunrpc/rpc_cout.c: Likewise.
* sunrpc/rpc_svcout.c: Likewise.
* sunrpc/xdr_mem.c: Likewise.
* sunrpc/xdr_rec.c: Likewise.
* sunrpc/xdr_stdio.c: Likewise.
* sunrpc/rpc_parse.c: Delete comma from end of enum definition.
* sunrpc/xdr.c: Little code cleanups.
* sunrpc/xdr_flaot.c: Likewise.
Patches by Matthew Wilcox <matthew.wilcox@chbs.mhs.ciba.com>.

* sysdeps/i386/fpu/__math.h (__finite): Fix typo.

* sysdeps/unix/sysv/linux/shmdt.c: Add cast to prevent warning.

* time/europe: Update from tzdata1997f.
* time/zic.c: Update from tzcode1997e.

1997-05-20 19:20  Miguel de Icaza <miguel@athena.nuclecu.unam.mx>

* sysdeps/sparc/setjmp.S: Flush windows.
Bug found by Richard Henderson.

1997-05-19 12:54  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* misc/efgcvt_r.c (fcvt_r, ecvt_r): Rewritten as to fit the specs.

1997-05-19 18:41  Thorsten Kukuk  <kukuk@uni-paderborn.de>

* nis/nss_nisplus/nisplus-spwd.c (_nss_nisplus_parse_spent): Use
atol instead of atoi.

1997-05-18 00:22  Philip Blundell <pjb27@cam.ac.uk>

* inet/Makefile (routines): Add if_index.
* sysdeps/unix/sysv/linux/if_index.c: New file.
* sysdeps/stub/if_index.c: New file.
* sysdeps/unix/sysv/linux/net/if.h: Add prototypes for routines in
if_index.c (required by IPv6 basic API).
* sysdeps/unix/sysv/linux/netinet/in.h: Add struct ipv6_pktinfo.

1997-05-17 23:29  Philip Blundell  <pjb27@cam.ac.uk>

* sysdeps/unix/sysv/linux/netinet/in.h: Update IPv6 definitions
for new advanced API draft.

1997-05-13 21:33  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* stdio-common/printf_fp.c: Only use the field width for deciding
on padding when printing special values.
* stdio-common/printf_fphex.c: Likewise.

1997-05-15 13:14  Miles Bader  <miles@gnu.ai.mit.edu>

Changes by Thomas Bushnell <thomas@gnu.ai.mit.edu>:
* hurd/hurdauth.c (_S_msg_add_auth): Implement correctly.

1997-05-12 14:50  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

* hurd/hurdsig.c (_hurdsig_init): Double size of sigthread stack;
msg_add_auth was overflowing it.

1997-05-12 21:20  Richard Henderson  <rth@tamu.edu>

* elf/dl-lookup.c (_dl_lookup_symbol_skip): Call _dl_signal_error
when we can't find the symbol.

1997-05-12 16:54  Ulrich Drepper  <drepper@cygnus.com>

* posix/regex.c: Fix handling of 32-bit Windog environments.
Patch by Arnold Robbins <arnold@skeeve.atl.ga.us>.

1997-05-10 23:26  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* sysdeps/unix/sysv/linux/m68k/syscalls.list: Add cacheflush.

1997-05-10 11:40  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* elf/ldd.bash.in: Remove spurious quote character from version
message.

1997-05-10 08:49  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* locale/programs/locale.c (write_charmaps): Don't get stuck in a
loop if the file ends in a long line without newline.
* locale/programs/charmap.c (charmap_read): Likewise.

1997-05-12 03:47  Ulrich Drepper  <drepper@cygnus.com>

* sunrpc/rpc/xdr.h: Include more headers to be self-contained.
* sunrpc/rpc/svc_auth.h: Likewise.
* sunrpc/rpc/svc.h: Likewise.
* sunrpc/rpc/rpc_msg.h: Likewise.
* sunrpc/rpc/pmap_rmt.h: Likewise.
* sunrpc/rpc/pmap_clnt.h: Likewise.
* sunrpc/rpc/clnt.h: Likewise.
* sunrpc/rpc/auth_unix.h: Likewise.
* sysdeps/generic/rpc/auth.h: Likewise.
Patches by Michael Deutschmann <ldeutsch@mail.netshop.net>.

1997-05-11 15:29  Philip Blundell  <pjb27@cam.ac.uk>

* sysdeps/stub/sigaction.c (__sigaction): Correct typo.
* sysdeps/standalone/arm/errnos.h: New file.
* sysdeps/stub/sys/param.h: Add dummy definition of MAXSYMLINKS.
* sysdeps/unix/arm/fork.S: New file.
* sysdeps/unix/sysv/linux/arm/sysdep.h: New file.
* sysdeps/stub/tempname.c (__stdio_gen_tempname): Add missing
`streamptr' argument.
* sysdeps/stub/vdprintf.c: Remove second copy of file (!), include
<stdarg.h> to get va_list defined, return 0 not NULL.
* sysdeps/unix/sysv/linux/statfsbuf.h: Include <gnu/types.h>.
* sysdeps/unix/sysv/linux/arm/syscall.S: New file.
* sysdeps/stub/direntry.h (struct dirent): Add missing ';'.
* sysdeps/stub/seekdir.c (seekdir): Likewise.
* sysdeps/stub/dirfd.c (dirfd): Argument dirp is DIR*, not FILE*.
* sysdeps/standalone/dirstream.h: Define struct __dirstream
not DIR; <dirent.h> provides typedef.
* sysdeps/unix/sysv/linux/arm/clone.S: New file.
* sysdeps/unix/sysv/linux/arm/socket.S: New file.
* sysdeps/stub/sysconf.c (__sysconf): Fix typos.

1997-05-01 06:35  Geoff Keating  <geoffk@ozemail.com.au>

* sysdeps/powerpc/Dist: New file.
* sysdeps/powerpc/Makefile: New file.
* sysdeps/powerpc/fclrexcpt.c: New file.
* sysdeps/powerpc/fegetenv.c: New file.
* sysdeps/powerpc/fegetround.c: New file.
* sysdeps/powerpc/feholdexcpt.c: New file.
* sysdeps/powerpc/fenvbits.h: New file.
* sysdeps/powerpc/fenv_const.c: New file.
* sysdeps/powerpc/fenv_libc.h: New file.
* sysdeps/powerpc/fesetenv.c: New file.
* sysdeps/powerpc/fesetround.c: New file.
* sysdeps/powerpc/feupdateenv.c: New file.
* sysdeps/powerpc/fgetexcptflg.c: New file.
* sysdeps/powerpc/fraiseexcpt.c: New file.
* sysdeps/powerpc/fsetexcptflg.c: New file.
* sysdeps/powerpc/ftestexcept.c: New file.
* sysdeps/powerpc/mathbits.h: New file.

* sysdeps/powerpc/dl-machine.h: Wrap in #ifndef dl_machine_h;
define elf_machine_lookup_noexec_p, elf_machine_lookup_noplt_p,
ELF_MACHINE_RELOC_NOPLT; consequent changes to elf_machine_rela.

* sysdeps/powerpc/__math.h: Remove definition for hypot and __sgn.

* sysdep/powerpc/fpu_control.h: Correct IEEE default mode.

* sysdeps/unix/sysv/linux/powerpc/sysdep.h: Don't use .text, but
instead .section ".text".

1997-04-25 05:06  Geoff Keating  <geoffk@ozemail.com.au>

* sysdeps/powerpc/__longjmp.S: Use symbolic register numbering.
* sysdeps/powerpc/bsd-_setjmp.S: Likewise.
* sysdeps/powerpc/bsd-setjmp.S: Likewise.
* sysdeps/powerpc/setjmp.S: Likewise.

* sysdeps/unix/sysv/linux/clone.S: Likewise.
* sysdeps/unix/sysv/linux/socket.S: Likewise.
* sysdeps/unix/sysv/linux/syscall.S: Likewise.

1997-04-20 04:37  Geoff Keating  <geoffk@ozemail.com.au>

* sysdeps/powerpc/strchr.s: New file.
* sysdeps/powerpc/strcmp.s: New (ugly) file.
* sysdeps/powerpc/memset.s: New file.
* string/tester.c: Include prototype and _GNU_SOURCE to make
standalone compilation possible. Give strcmp a better
test. Give memset a better test.

1997-04-05 06:34  Geoff Keating  <geoffk@ozemail.com.au>

* sysdeps/powerpc/strlen.s: Fixed bugs (how did it ever pass its
tests before?). Changed to symbolic register numbering as an
experiment.
* sysdeps/powerpc/ffs.c: Don't include bstring.h, it doesn't
exist.
* sysdeps/rs6000/ffs.c: Likewise.

1997-05-12 02:28  Ulrich Drepper  <drepper@cygnus.com>

* time/sys/time.h: Make second argument of setitimer const.
Patch by Michael Deutschmann <ldeutsch@mail.netshop.net>.
* sysdeps/stub/setitimer.c: Likewise.
* sysdeps/mach/hurd/setitimer.c: Likewise.

116 files changed:
.cvsignore
BUGS
ChangeLog
FAQ
dirent/Makefile
dirent/dirent.h
dirent/versionsort.c [new file with mode: 0644]
elf/dl-lookup.c
elf/ldd.bash.in
gnu-versions.h
hurd/hurdauth.c
hurd/hurdsig.c
inet/Makefile
locale/programs/charmap.c
locale/programs/locale.c
malloc/obstack.c
manual/filesys.texi
manual/string.texi
manual/texinfo.tex
math/Makefile
math/fenv.h
misc/efgcvt_r.c
nis/nss_nisplus/nisplus-spwd.c
po/sv.po
posix/regex.c
resolv/nss_dns/dns-host.c
stdio-common/printf_fp.c
stdio-common/printf_fphex.c
string/Makefile
string/basename.c
string/string.h
string/strverscmp.c [new file with mode: 0644]
string/tester.c
string/tst-strlen.c
string/tst-svc.c [new file with mode: 0644]
string/tst-svc.expect [new file with mode: 0644]
string/tst-svc.input [new file with mode: 0644]
sunrpc/authuxprot.c
sunrpc/pmap_rmt.c
sunrpc/proto.h
sunrpc/rpc/auth_unix.h
sunrpc/rpc/clnt.h
sunrpc/rpc/pmap_clnt.h
sunrpc/rpc/pmap_rmt.h
sunrpc/rpc/rpc_msg.h
sunrpc/rpc/xdr.h
sunrpc/rpc_cout.c
sunrpc/rpc_parse.h
sunrpc/rpc_svcout.c
sunrpc/xdr.c
sunrpc/xdr_float.c
sunrpc/xdr_mem.c
sunrpc/xdr_rec.c
sunrpc/xdr_stdio.c
sysdeps/generic/rpc/auth.h
sysdeps/i386/fpu/__math.h
sysdeps/mach/hurd/setitimer.c
sysdeps/powerpc/Dist [new file with mode: 0644]
sysdeps/powerpc/Makefile [new file with mode: 0644]
sysdeps/powerpc/__longjmp.S
sysdeps/powerpc/__math.h
sysdeps/powerpc/bsd-_setjmp.S
sysdeps/powerpc/bsd-setjmp.S
sysdeps/powerpc/dl-machine.h
sysdeps/powerpc/fclrexcpt.c [new file with mode: 0644]
sysdeps/powerpc/fegetenv.c [new file with mode: 0644]
sysdeps/powerpc/fegetround.c [new file with mode: 0644]
sysdeps/powerpc/feholdexcpt.c [new file with mode: 0644]
sysdeps/powerpc/fenv_const.c [new file with mode: 0644]
sysdeps/powerpc/fenv_libc.h [new file with mode: 0644]
sysdeps/powerpc/fenvbits.h [new file with mode: 0644]
sysdeps/powerpc/fesetenv.c [new file with mode: 0644]
sysdeps/powerpc/fesetround.c [new file with mode: 0644]
sysdeps/powerpc/feupdateenv.c [new file with mode: 0644]
sysdeps/powerpc/ffs.c
sysdeps/powerpc/fgetexcptflg.c [new file with mode: 0644]
sysdeps/powerpc/fpu_control.h
sysdeps/powerpc/fraiseexcpt.c [new file with mode: 0644]
sysdeps/powerpc/fsetexcptflg.c [new file with mode: 0644]
sysdeps/powerpc/ftestexcept.c [new file with mode: 0644]
sysdeps/powerpc/mathbits.h [new file with mode: 0644]
sysdeps/powerpc/setjmp.S
sysdeps/powerpc/strlen.s
sysdeps/rs6000/ffs.c
sysdeps/sparc/setjmp.S
sysdeps/standalone/arm/errnos.h [new file with mode: 0644]
sysdeps/standalone/dirstream.h
sysdeps/stub/direntry.h
sysdeps/stub/dirfd.c
sysdeps/stub/if_index.c [new file with mode: 0644]
sysdeps/stub/seekdir.c
sysdeps/stub/setitimer.c
sysdeps/stub/sigaction.c
sysdeps/stub/sys/param.h
sysdeps/stub/sysconf.c
sysdeps/stub/tempname.c
sysdeps/stub/vdprintf.c
sysdeps/unix/arm/fork.S [new file with mode: 0644]
sysdeps/unix/arm/sysdep.h
sysdeps/unix/sysv/linux/arm/clone.S [new file with mode: 0644]
sysdeps/unix/sysv/linux/arm/socket.S [new file with mode: 0644]
sysdeps/unix/sysv/linux/arm/syscall.S [new file with mode: 0644]
sysdeps/unix/sysv/linux/arm/sysdep.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/if_index.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/m68k/syscalls.list
sysdeps/unix/sysv/linux/net/if.h
sysdeps/unix/sysv/linux/netinet/in.h
sysdeps/unix/sysv/linux/powerpc/clone.S
sysdeps/unix/sysv/linux/powerpc/socket.S
sysdeps/unix/sysv/linux/powerpc/syscall.S
sysdeps/unix/sysv/linux/powerpc/sysdep.h
sysdeps/unix/sysv/linux/shmdt.c
sysdeps/unix/sysv/linux/statfsbuf.h
time/europe
time/sys/time.h
time/zic.c

index 519db6b9c3f14cfcee23908fd3db0d934c6f68d1..13789389892f839c76dcc95df1dd4e5209eac82e 100644 (file)
@@ -21,3 +21,5 @@ crypt
 linuxthreads
 localedata
 secure_rpc
+
+aio
diff --git a/BUGS b/BUGS
index 174d7ccc7ec30c52fdc1f9b0df1c6a19110c421a..ac2066293b40aa9abe2ef0c56bf5de184beda8d3 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -1,7 +1,7 @@
            List of known bugs (certainly very incomplete)
            ----------------------------------------------
 
-Time-stamp: <1997-03-22T04:31:41+0100 drepper>
+Time-stamp: <1997-05-12T02:39:19+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
@@ -29,8 +29,7 @@ Severity: [  *] to [***]
 
 [ **]  There are problems with signal handling when using LinuxThreads.
 
-[ **]  The `cbrtl' function is inaccurate.  The algorithm used for `double'
-       and `float' is not usable for `long double'.
+[ **]  The `cbrtl' function for ix86 does not work in the moment.
 
 [ **]  Not really a bug, but it could lead to such:
        The RPC code is ugly ugly ugly.  It's more or less verbatim taken
index 794d891b442a772443b4d8d6217d591a2886d99c..5ef2a6099d308df1bad6353e6da745d296ca033a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,225 @@
+1997-05-21 02:49  Ulrich Drepper  <drepper@cygnus.com>
+
+       * gnu-versions.h (_GNU_OBSTACK_INTERFACE_VERSION): Set to 2 since
+       interface was changed with addition of _obstack_memory_used.
+       Suggested by Ian Taylor <ian@cygnus.com>.
+
+       * malloc/obstack.c: Include <config.h>.  Include <stdlib.h> only
+       if __GNU_LIBRARY__ or HAVE_STDLIB_H is defined.
+       Reported by Ian Taylor <ian@cygnus.com>.
+
+       * dirent/Makefile (routines): Add versionsort.
+       * dirent/dirent.h: Add prototype for versionsort.
+       * dirent/versionsort.c: New file.
+       * manual/filesys.texi: Add documentation for versionsort.
+       * manual/string.texi: Add documentation for strverscmp.
+       * string/Makefile (routines): Add strverscmp.
+       (tests): Add tst-svc.
+       * string/string.h: Add prototype for strverscmp.
+       * string/strverscmp.c: New file.
+       * string/tst-svc.c: New file.  Test for strverscmp.
+       * string/tst-svc.input: New file.  Input data for tst-svc.
+       * string/tst-svc.expect: New file.  Expected out from tst-svc.
+
+       * math/Makefile (calls): Add s_signbit.
+
+       * po/sv.po: Update.
+
+       * resolv/nss_dns/dns-host.c: Add casts to prevent warnings.
+       * sunrpc/pmap_rmt.c: Likewise.
+
+       * string/basename.c: Don't use ISO C definition style.
+       Include <config.h> is HAVE_CONFIG_H is defined.
+
+       * sunrpc/proto.h: Add `const' wherever possible.
+       * sunrpc/rpc_cout.c: Likewise.
+       * sunrpc/rpc_svcout.c: Likewise.
+       * sunrpc/xdr_mem.c: Likewise.
+       * sunrpc/xdr_rec.c: Likewise.
+       * sunrpc/xdr_stdio.c: Likewise.
+       * sunrpc/rpc_parse.c: Delete comma from end of enum definition.
+       * sunrpc/xdr.c: Little code cleanups.
+       * sunrpc/xdr_flaot.c: Likewise.
+       Patches by Matthew Wilcox <matthew.wilcox@chbs.mhs.ciba.com>.
+
+       * sysdeps/i386/fpu/__math.h (__finite): Fix typo.
+
+       * sysdeps/unix/sysv/linux/shmdt.c: Add cast to prevent warning.
+
+       * time/europe: Update from tzdata1997f.
+       * time/zic.c: Update from tzcode1997e.
+
+1997-05-20 19:20  Miguel de Icaza <miguel@athena.nuclecu.unam.mx>
+
+       * sysdeps/sparc/setjmp.S: Flush windows.
+       Bug found by Richard Henderson.
+
+1997-05-19 12:54  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * misc/efgcvt_r.c (fcvt_r, ecvt_r): Rewritten as to fit the specs.
+
+1997-05-19 18:41  Thorsten Kukuk  <kukuk@uni-paderborn.de>
+
+       * nis/nss_nisplus/nisplus-spwd.c (_nss_nisplus_parse_spent): Use
+       atol instead of atoi.
+
+1997-05-18 00:22  Philip Blundell <pjb27@cam.ac.uk>
+
+       * inet/Makefile (routines): Add if_index.
+       * sysdeps/unix/sysv/linux/if_index.c: New file.
+       * sysdeps/stub/if_index.c: New file.
+       * sysdeps/unix/sysv/linux/net/if.h: Add prototypes for routines in
+       if_index.c (required by IPv6 basic API).
+       * sysdeps/unix/sysv/linux/netinet/in.h: Add struct ipv6_pktinfo.
+
+1997-05-17 23:29  Philip Blundell  <pjb27@cam.ac.uk>
+
+       * sysdeps/unix/sysv/linux/netinet/in.h: Update IPv6 definitions
+       for new advanced API draft.
+
+1997-05-13 21:33  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * stdio-common/printf_fp.c: Only use the field width for deciding
+       on padding when printing special values.
+       * stdio-common/printf_fphex.c: Likewise.
+
+1997-05-15 13:14  Miles Bader  <miles@gnu.ai.mit.edu>
+
+       Changes by Thomas Bushnell <thomas@gnu.ai.mit.edu>:
+       * hurd/hurdauth.c (_S_msg_add_auth): Implement correctly.
+
+1997-05-12 14:50  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
+
+       * hurd/hurdsig.c (_hurdsig_init): Double size of sigthread stack;
+       msg_add_auth was overflowing it.
+
+1997-05-12 21:20  Richard Henderson  <rth@tamu.edu>
+
+       * elf/dl-lookup.c (_dl_lookup_symbol_skip): Call _dl_signal_error
+       when we can't find the symbol.
+
+1997-05-12 16:54  Ulrich Drepper  <drepper@cygnus.com>
+
+       * posix/regex.c: Fix handling of 32-bit Windog environments.
+       Patch by Arnold Robbins <arnold@skeeve.atl.ga.us>.
+
+1997-05-10 23:26  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/unix/sysv/linux/m68k/syscalls.list: Add cacheflush.
+
+1997-05-10 11:40  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * elf/ldd.bash.in: Remove spurious quote character from version
+       message.
+
+1997-05-10 08:49  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * locale/programs/locale.c (write_charmaps): Don't get stuck in a
+       loop if the file ends in a long line without newline.
+       * locale/programs/charmap.c (charmap_read): Likewise.
+
+1997-05-12 03:47  Ulrich Drepper  <drepper@cygnus.com>
+
+       * sunrpc/rpc/xdr.h: Include more headers to be self-contained.
+       * sunrpc/rpc/svc_auth.h: Likewise.
+       * sunrpc/rpc/svc.h: Likewise.
+       * sunrpc/rpc/rpc_msg.h: Likewise.
+       * sunrpc/rpc/pmap_rmt.h: Likewise.
+       * sunrpc/rpc/pmap_clnt.h: Likewise.
+       * sunrpc/rpc/clnt.h: Likewise.
+       * sunrpc/rpc/auth_unix.h: Likewise.
+       * sysdeps/generic/rpc/auth.h: Likewise.
+       Patches by Michael Deutschmann <ldeutsch@mail.netshop.net>.
+
+1997-05-11 15:29  Philip Blundell  <pjb27@cam.ac.uk>
+
+       * sysdeps/stub/sigaction.c (__sigaction): Correct typo.
+       * sysdeps/standalone/arm/errnos.h: New file.
+       * sysdeps/stub/sys/param.h: Add dummy definition of MAXSYMLINKS.
+       * sysdeps/unix/arm/fork.S: New file.
+       * sysdeps/unix/sysv/linux/arm/sysdep.h: New file.
+       * sysdeps/stub/tempname.c (__stdio_gen_tempname): Add missing
+       `streamptr' argument.
+       * sysdeps/stub/vdprintf.c: Remove second copy of file (!), include
+       <stdarg.h> to get va_list defined, return 0 not NULL.
+       * sysdeps/unix/sysv/linux/statfsbuf.h: Include <gnu/types.h>.
+       * sysdeps/unix/sysv/linux/arm/syscall.S: New file.
+       * sysdeps/stub/direntry.h (struct dirent): Add missing ';'.
+       * sysdeps/stub/seekdir.c (seekdir): Likewise.
+       * sysdeps/stub/dirfd.c (dirfd): Argument dirp is DIR*, not FILE*.
+       * sysdeps/standalone/dirstream.h: Define struct __dirstream
+       not DIR; <dirent.h> provides typedef.
+       * sysdeps/unix/sysv/linux/arm/clone.S: New file.
+       * sysdeps/unix/sysv/linux/arm/socket.S: New file.
+       * sysdeps/stub/sysconf.c (__sysconf): Fix typos.
+
+1997-05-01 06:35  Geoff Keating  <geoffk@ozemail.com.au>
+
+       * sysdeps/powerpc/Dist: New file.
+       * sysdeps/powerpc/Makefile: New file.
+       * sysdeps/powerpc/fclrexcpt.c: New file.
+       * sysdeps/powerpc/fegetenv.c: New file.
+       * sysdeps/powerpc/fegetround.c: New file.
+       * sysdeps/powerpc/feholdexcpt.c: New file.
+       * sysdeps/powerpc/fenvbits.h: New file.
+       * sysdeps/powerpc/fenv_const.c: New file.
+       * sysdeps/powerpc/fenv_libc.h: New file.
+       * sysdeps/powerpc/fesetenv.c: New file.
+       * sysdeps/powerpc/fesetround.c: New file.
+       * sysdeps/powerpc/feupdateenv.c: New file.
+       * sysdeps/powerpc/fgetexcptflg.c: New file.
+       * sysdeps/powerpc/fraiseexcpt.c: New file.
+       * sysdeps/powerpc/fsetexcptflg.c: New file.
+       * sysdeps/powerpc/ftestexcept.c: New file.
+       * sysdeps/powerpc/mathbits.h: New file.
+
+       * sysdeps/powerpc/dl-machine.h: Wrap in #ifndef dl_machine_h;
+       define elf_machine_lookup_noexec_p, elf_machine_lookup_noplt_p,
+       ELF_MACHINE_RELOC_NOPLT; consequent changes to elf_machine_rela.
+
+       * sysdeps/powerpc/__math.h: Remove definition for hypot and __sgn.
+
+       * sysdep/powerpc/fpu_control.h: Correct IEEE default mode.
+
+       * sysdeps/unix/sysv/linux/powerpc/sysdep.h: Don't use .text, but
+       instead .section ".text".
+
+1997-04-25 05:06  Geoff Keating  <geoffk@ozemail.com.au>
+
+       * sysdeps/powerpc/__longjmp.S: Use symbolic register numbering.
+       * sysdeps/powerpc/bsd-_setjmp.S: Likewise.
+       * sysdeps/powerpc/bsd-setjmp.S: Likewise.
+       * sysdeps/powerpc/setjmp.S: Likewise.
+
+       * sysdeps/unix/sysv/linux/clone.S: Likewise.
+       * sysdeps/unix/sysv/linux/socket.S: Likewise.
+       * sysdeps/unix/sysv/linux/syscall.S: Likewise.
+
+1997-04-20 04:37  Geoff Keating  <geoffk@ozemail.com.au>
+
+       * sysdeps/powerpc/strchr.s: New file.
+       * sysdeps/powerpc/strcmp.s: New (ugly) file.
+       * sysdeps/powerpc/memset.s: New file.
+       * string/tester.c: Include prototype and _GNU_SOURCE to make
+       standalone compilation possible. Give strcmp a better
+       test. Give memset a better test.
+
+1997-04-05 06:34  Geoff Keating  <geoffk@ozemail.com.au>
+
+       * sysdeps/powerpc/strlen.s: Fixed bugs (how did it ever pass its
+       tests before?). Changed to symbolic register numbering as an
+       experiment.
+       * sysdeps/powerpc/ffs.c: Don't include bstring.h, it doesn't
+       exist.
+       * sysdeps/rs6000/ffs.c: Likewise.
+
+1997-05-12 02:28  Ulrich Drepper  <drepper@cygnus.com>
+
+       * time/sys/time.h: Make second argument of setitimer const.
+       Patch by Michael Deutschmann <ldeutsch@mail.netshop.net>.
+       * sysdeps/stub/setitimer.c: Likewise.
+       * sysdeps/mach/hurd/setitimer.c: Likewise.
+
 1997-05-10 11:46  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>
 
        * nis/rpcsvc/nis_callback.x: New, from tirpcsrc-2.3.
diff --git a/FAQ b/FAQ
index 16f6157f33bfc177596b923944e7a71bdede511d..77bcaa658cfd0bf72feb3bf60c5732dc582a8870 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -183,7 +183,12 @@ Library.
   slow.
 
 * plenty of time (approx 1h for i?86-linux on i586@133 or 2.5h on
-  i486@66 or 4.5h on i486@33).  For Hurd systems times are much higher.
+  i486@66 or 4.5h on i486@33), both for shared and static only).
+  For Hurd systems times are much higher.
+
+  For Atari Falcon (Motorola 68030 @ 16 Mhz, 14 Mb memory) James Troup
+  <J.J.Troup@comp.brad.ac.uk> reports for a full build (shared, static,
+  and profiled) a compile time of 45h34m.
 
   If you have some more measurements let me know.
 
@@ -578,6 +583,10 @@ something like this:
 
 GROUP ( libc.so.6 ld.so.1 libc.a )
 
+or in ix86/Linux and alpha/Linux:
+
+GROUP ( libc.so.6 ld-linux.so.2 libc.a )
+
 
 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
 [Q18]  ``The prototypes for `connect', `accept', `getsockopt',
@@ -699,7 +708,7 @@ Answers were given by:
 {DMT} David Mosberger-Tang, <davidm@AZStarNet.com>
 {RM} Roland McGrath, <roland@gnu.ai.mit.edu>
 {HJL} H.J. Lu, <hjl@gnu.ai.mit.edu>
-{AJ} Andreas Jaeger, <aj@arthur.pfalz.de>
+{AJ} Andreas Jaeger, <aj@arthur.rhein-neckar.de>
 {EY} Eric Youngdale, <eric@andante.jic.com>
 \f
 Local Variables:
index 8741faf7690ae6fc607518ce89b7768c6d6b7eb3..4b64498d285e7f3f792a3ee65e69cf375adac44c 100644 (file)
@@ -23,7 +23,7 @@ subdir                := dirent
 
 headers                := dirent.h direntry.h
 routines       := opendir closedir readdir readdir_r rewinddir \
-                  seekdir telldir scandir alphasort \
+                  seekdir telldir scandir alphasort versionsort \
                   getdents dirfd
 distribute := dirstream.h
 
index 3d187e1096eb23fd5afc93f791f7a570504d8319..9caf272aa1d2a644c712a1f2cd7db5cd2fd44f3c 100644 (file)
@@ -175,6 +175,10 @@ extern int scandir __P ((__const char *__dir,
 /* Function to compare two `struct dirent's alphabetically.  */
 extern int alphasort __P ((__const __ptr_t, __const __ptr_t));
 
+# ifdef __USE_GNU
+/* Function to compare two `struct dirent's by name & version.  */
+extern int versionsort __P ((__const __ptr_t, __const __ptr_t));
+#endif
 
 /* Read directory entries from FD into BUF, reading at most NBYTES.
    Reading starts at offset *BASEP, and *BASEP is updated with the new
diff --git a/dirent/versionsort.c b/dirent/versionsort.c
new file mode 100644 (file)
index 0000000..182680b
--- /dev/null
@@ -0,0 +1,27 @@
+/* Copyright (C) 1992, 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 <dirent.h>
+#include <string.h>
+
+int
+versionsort (const void *a, const void *b)
+{
+  return strverscmp ((*(const struct dirent **) a)->d_name,
+                (*(const struct dirent **) b)->d_name);
+}
index f85aa373c2e04c25cc6ae1284d38ac2654b99304..63a525edaaedfa95be10b83feed150a56f81598d 100644 (file)
@@ -332,6 +332,18 @@ _dl_lookup_versioned_symbol_skip (const char *undef_name,
                     reference_name, version, skip_map, 0))
        break;
 
+  if (current_value.s == NULL &&
+      (*ref == NULL || ELFW(ST_BIND) ((*ref)->st_info) != STB_WEAK))
+    {
+      /* We could find no value for a strong reference.  */
+      static const char msg[] = "undefined symbol: ";
+      const size_t len = strlen (undef_name);
+      char buf[sizeof msg + len];
+      memcpy (buf, msg, sizeof msg - 1);
+      memcpy (&buf[sizeof msg - 1], undef_name, len + 1);
+      _dl_signal_error (0, reference_name, buf);
+    }
+
   *ref = current_value.s;
   return current_value.a;
 }
index 492d3ba452eed62fa7b6a93f48e9210fa75c5608..c433a72679c66178eae8772a87a88e972a90a479 100644 (file)
@@ -35,7 +35,7 @@ bind_now=
 while test $# -gt 0; do
   case "$1" in
   --v | --ve | --ver | --vers | --versi | --versio | --version)
-    echo '"ldd (GNU libc) @VERSION@'
+    echo 'ldd (GNU libc) @VERSION@'
     echo $"Copyright (C) 1996, 1997 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
index f27e34fc29b305854e2a26e0253fb392188c9606..7085895a0a1cad3519be0ff453ea446a1896e5dd 100644 (file)
@@ -44,7 +44,7 @@
    remember, if any of these versions change, the libc.so major version
    number must change too (so avoid it)!  */
 
-#define _GNU_OBSTACK_INTERFACE_VERSION 1 /* vs malloc/obstack.c */
+#define _GNU_OBSTACK_INTERFACE_VERSION 2 /* vs malloc/obstack.c */
 #define _GNU_REGEX_INTERFACE_VERSION   1 /* vs posix/regex.c */
 #define _GNU_GLOB_INTERFACE_VERSION    1 /* vs posix/glob.c */
 #define _GNU_GETOPT_INTERFACE_VERSION  2 /* vs posix/getopt.c and
index c60b8d8326a90884ef324ab8cc2aea2cbf265323..64c9db4582dd16650db6c046114e296e5d49fe7a 100644 (file)
@@ -37,17 +37,124 @@ _S_msg_add_auth (mach_port_t me,
 {
   error_t err;
   auth_t newauth;
+  uid_t *genuids, *gengids, *auxuids, *auxgids;
+  mach_msg_type_number_t ngenuids, ngengids, nauxuids, nauxgids;
+  uid_t *newgenuids, *newgengids, *newauxuids, *newauxgids;
+  mach_msg_type_number_t nnewgenuids, nnewgengids, nnewauxuids, nnewauxgids;
+
+  /* Create a list of ids and store it in NEWLISTP, length NEWLISTLEN.
+     Keep all the ids in EXIST (len NEXIST), adding in those from NEW
+     (len NNEW) which are not already there.  */
+  error_t make_list (uid_t **newlistp, mach_msg_type_number_t *newlistlen,
+                    uid_t *exist, mach_msg_type_number_t nexist,
+                    uid_t *new, mach_msg_type_number_t nnew)
+    {
+      error_t urp;
+      int i, j, k;
+      vm_size_t offset;
+
+      urp = vm_allocate (mach_task_self (), (vm_address_t *) newlistp,
+                        nexist + nnew * sizeof (uid_t), 1);
+      if (urp)
+       return urp;
+
+      j = 0;
+      for (i = 0; i < nexist; i++)
+       (*newlistp)[j++] = exist[i];
+
+      for (i = 0; i < nnew; i++)
+       {
+         for (k = 0; k < nexist; k++)
+           if (exist[k] == new[i])
+             break;
+         if (k < nexist)
+           continue;
+
+         (*newlistp)[j++] = new[i];
+       }
+
+      offset = (round_page (nexist + nnew * sizeof (uid_t))
+               - round_page (j * sizeof (uid_t)));
+      if (offset)
+       vm_deallocate (mach_task_self (),
+                      (vm_address_t) (*newlistp
+                                      + (nexist + nnew * sizeof (uid_t))),
+                      offset);
+      *newlistlen = j;
+      return 0;
+    }
+
+  /* Find out what ids ADDAUTH refers to */
 
-  if (err = __USEPORT (AUTH,
-                      __auth_makeauth (port,
-                                       &addauth, MACH_MSG_TYPE_MOVE_SEND, 1,
-                                       NULL, 0,
-                                       NULL, 0,
-                                       NULL, 0,
-                                       NULL, 0,
-                                       &newauth)))
+  genuids = gengids = auxuids = auxgids = 0;
+  ngenuids = ngengids = nauxuids = nauxgids = 0;
+  err = __auth_getids (addauth,
+                      &genuids, &ngenuids,
+                      &auxuids, &nauxuids,
+                      &gengids, &ngengids,
+                      &auxgids, &nauxgids);
+  if (err)
     return err;
 
+  /* OR in these ids to what we already have, creating a new list. */
+
+  HURD_CRITICAL_BEGIN;
+  __mutex_lock (&_hurd_id.lock);
+  _hurd_check_ids ();
+
+#define MAKE(genaux,uidgid)                                                \
+  make_list (&new ## genaux ## uidgid ## s,                                \
+            &nnew ## genaux ## uidgid ## s,                                \
+            _hurd_id.genaux.uidgid ## s,                                   \
+            _hurd_id.genaux.n ## uidgid ## s,                              \
+            genaux ## uidgid ## s,                                         \
+            n ## genaux ## uidgid ## s)
+
+  err = MAKE (gen, uid);
+  if (!err)
+    MAKE (aux, uid);
+  if (!err)
+    MAKE (gen, gid);
+  if (!err)
+    MAKE (aux, gid);
+#undef MAKE
+
+  __mutex_unlock (&_hurd_id.lock);
+  HURD_CRITICAL_END;
+
+
+  /* Create the new auth port */
+
+  if (!err)
+    err = __USEPORT (AUTH,
+                    __auth_makeauth (port,
+                                     &addauth, MACH_MSG_TYPE_MOVE_SEND, 1,
+                                     newgenuids, nnewgenuids,
+                                     newauxuids, nnewauxuids,
+                                     newgengids, nnewgengids,
+                                     newauxgids, nnewauxgids,
+                                     &newauth));
+
+#define freeup(array, len) \
+  if (array) \
+    vm_deallocate (mach_task_self (), (vm_address_t) array, \
+                  len * sizeof (uid_t));
+
+  freeup (genuids, ngenuids);
+  freeup (auxuids, nauxuids);
+  freeup (gengids, ngengids);
+  freeup (auxgids, nauxgids);
+  freeup (newgenuids, nnewgenuids);
+  freeup (newauxuids, nnewauxuids);
+  freeup (newgengids, nnewgengids);
+  freeup (newauxgids, nnewauxgids);
+#undef freeup
+
+  if (err)
+    return err;
+
+  /* And install it. */
+
   err = __setauth (newauth);
   __mach_port_deallocate (__mach_task_self (), newauth);
   if (err)
index 592dc12e66799c2cd9b07b258ced77609d47f194..f50daa2f8f1b75e8462b37ea4e8e340dd2a074d3 100644 (file)
@@ -1194,7 +1194,7 @@ _hurdsig_init (void)
   err = __thread_create (__mach_task_self (), &_hurd_msgport_thread);
   assert_perror (err);
 
-  stacksize = __vm_page_size * 4; /* Small stack for signal thread.  */
+  stacksize = __vm_page_size * 8; /* Small stack for signal thread.  */
   err = __mach_setup_thread (__mach_task_self (), _hurd_msgport_thread,
                             _hurd_msgport_receive,
                             (vm_address_t *) &__hurd_sigthread_stack_base,
index 02e10335f4dda178e5a7f5ede0c281440c73bdd1..fbd658a7bf6083d435f178c0ea180b5628d2204b 100644 (file)
@@ -44,7 +44,7 @@ routines := ntohl ntohs htonl htons           \
            rcmd rexec ruserpass \
            getnetgrent_r getnetgrent \
            getaliasent_r getaliasent getaliasname getaliasname_r \
-           in6_addr getnameinfo
+           in6_addr getnameinfo if_index
 
 # No warnings about losing BSD code.
 CFLAGS-rcmd.c = -w
index 359b913c1f0bcf793037410da7680ef6f57ce02f..416615a1b9813810d70ad553679f2eaa9336bd63 100644 (file)
@@ -114,9 +114,9 @@ charmap_read (const char *filename)
                        if (fscanf (fp, " <code_set_name> %as", &name) == 1)
                          break;
 
-                       do
-                         fgets (junk, sizeof junk, fp);
-                       while (strchr (junk, '\n') == NULL);
+                       while (fgets (junk, sizeof junk, fp) != NULL
+                              && strchr (junk, '\n') == NULL)
+                         continue;
                      }
 
                    fclose (fp);
index 28ad94403fc40c2c54148efeb4ed9422449ac65f..52ae56a81998646ad8d90b27895546f753f57aab 100644 (file)
@@ -504,9 +504,9 @@ write_charmaps (void)
                    if (fscanf (fp, " <code_set_name> %as", &name) == 1)
                      break;
 
-                   do
-                     fgets (junk, sizeof junk, fp);
-                   while (strchr (junk, '\n') == NULL);
+                   while (fgets (junk, sizeof junk, fp) != NULL
+                          && strchr (junk, '\n') == NULL)
+                     continue;
                  }
 
                fclose (fp);
index 1e36c4a0a5c2dbd8cc6436de8c7bb07664e47fe8..731762f5a98d06beb0911546cad3224bac884edc 100644 (file)
@@ -1,5 +1,5 @@
 /* obstack.c - subroutines used implicitly by object stack macros
-   Copyright (C) 1988,89,90,91,92,93,94,96 Free Software Foundation, Inc.
+   Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
 
    This file is part of the GNU C Library.  Its master source is NOT part of
    the C library, however.  The master source lives in /gd/gnu/lib.
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include "obstack.h"
 
 /* NOTE BEFORE MODIFYING THIS FILE: This version number must be
@@ -85,7 +89,7 @@ void (*obstack_alloc_failed_handler) () = print_and_abort;
 #endif
 
 /* Exit value used when `print_and_abort' is used.  */
-#if defined (__STDC__) && __STDC__
+#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
 #include <stdlib.h>
 #endif
 #ifndef EXIT_FAILURE
index afe072c594ef2fcc506f62146b3f5e234b5e0c7a..5ddd8a20a7ed240e5cd50e89531430d7ecb40f42 100644 (file)
@@ -455,8 +455,8 @@ value are selected.
 Finally the entries in the @var{namelist} are sorted using the user
 supplied function @var{cmp}.  The arguments of the @var{cmp} function
 are of type @code{struct dirent **}.  I.e., one cannot directly use the
-@code{strcmp} or @code{strcoll} function; see the function
-@code{alphasort} below.
+@code{strcmp} or @code{strcoll} function; see the functions
+@code{alphasort} and @code{versionsort} below.
 
 The return value of the function gives the number of entries placed in
 @var{namelist}.  If it is @code{-1} an error occurred and the global
@@ -465,7 +465,7 @@ variable @code{errno} contains more information on the error.
 
 As said above the fourth argument to the @code{scandir} function must be
 a pointer to a sorting function.  For the convenience of the programmer
-the GNU C library contains an implementation of a function which is very
+the GNU C library contains implementations of functions which are very
 helpful for this purpose.
 
 @deftypefun int alphasort (const void *@var{a}, const void *@var{b})
@@ -478,6 +478,11 @@ Return value of is less than, equal to, or greater than zero depending
 on the order of the two entries @var{a} and @var{b}.
 @end deftypefun
 
+@deftypefun int versionsort (const void *@var{a}, const void *@var{b})
+The @code{versionsort} function is like @code{alphasort}, excepted that it
+uses the @code{strverscmp} function internally.
+@end deftypefun
+
 @node Simple Directory Lister Mark II
 @subsection Simple Program to List a Directory, Mark II
 
index 8f09ac9728f73f8e3f535643f4416be10be1ccdd..e358b2015f4f2f227b975efe0e114ad541c28e9e 100644 (file)
@@ -608,6 +608,56 @@ strncmp ("hello, world", "hello, stupid world!!!", 5)
     @result{} 0    /* @r{The initial 5 characters are the same.} */
 @end smallexample
 
+@comment string.h
+@comment GNU
+@deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2})
+The @code{strverscmp} function compares the string @var{s1} against
+@var{s2}, considering them as holding indices/version numbers.  Return
+value follows the same conventions as found in the @code{strverscmp}
+function.  In fact, if @var{s1} and @var{s2} contain no digits,
+@code{strverscmp} behaves like @code{strcmp}.
+
+Basically, we compare strings normaly (character by character), until
+we find a digit in each string - then we enter a special comparison
+mode, where each sequence of digit is taken as a whole.  If we reach the
+end of these two parts without noticing a difference, we return to the
+standard comparison mode.  There are two types of numeric parts:
+"integral" and "fractionnal" (these laters begins with a '0'). The types
+of the numeric parts affect the way we sort them:
+
+@itemize @bullet
+@item
+integral/integral: we compare values as you would expect.
+
+@item
+fractionnal/integral: the fractionnal part is less than the integral one.
+Again, no surprise.
+
+@item
+fractionnal/fractionnal: the things become a bit more complex.
+if the common prefix contains only leading zeroes, the longest part is less
+than the other one; else the comparison behaves normaly.
+@end itemize
+
+@smallexample
+strverscmp ("no digit", "no digit")
+    @result{} 0    /* @r{same behaviour as strverscmp.} */
+strverscmp ("item#99", "item#100")
+    @result{} <0   /* @r{same prefix, but 99 < 100.} */
+strverscmp ("alpha1", "alpha001")
+    @result{} >0   /* @r{fractionnal part inferior to integral one.} */
+strverscmp ("part1_f012", "part1_f01")
+    @result{} >0   /* @r{two fractionnal parts.} */
+strverscmp ("foo.009", "foo.0")
+    @result{} <0   /* @r{idem, but with leading zeroes only.} */
+@end smallexample
+
+This function is especially usefull when dealing with filename sorting,
+because filenames frequently hold indices/version numbers.
+
+@code{strverscmp} is a GNU extension.
+@end deftypefun
+
 @comment string.h
 @comment BSD
 @deftypefun int bcmp (const void *@var{a1}, const void *@var{a2}, size_t @var{size})
index 72050b8e22c85cfd03890c1ca75f589d0d431ea6..6bae66900ab43cb9c138e2f9059fc91db9bf4f0c 100644 (file)
@@ -1,5 +1,5 @@
 %% TeX macros to handle Texinfo files.
-%% $Id: texinfo.tex,v 2.198 1997/05/07 15:16:03 drepper Exp $
+%% $Id: texinfo.tex,v 2.199 1997/05/20 11:11:48 drepper Exp $
 
 %  Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
 %                94, 95, 96, 97 Free Software Foundation, Inc.
@@ -36,7 +36,7 @@
 
 % This automatically updates the version number based on RCS.
 \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-\deftexinfoversion$Revision: 2.198 $
+\deftexinfoversion$Revision: 2.199 $
 \message{Loading texinfo package [Version \texinfoversion]:}
 
 % If in a .fmt file, print the version number
@@ -1271,8 +1271,6 @@ where each line of input produces a line of output.}
 \def\ctrl #1{{\tt \rawbackslash \hat}#1}
 
 \let\file=\samp
-\let\url=\samp % perhaps include a hypertex \special eventually
-\def\email#1{$\langle${\tt #1}$\rangle$}
 
 % @code is a modification of @t,
 % which makes spaces the same size as normal in the surrounding text.
@@ -1325,7 +1323,7 @@ where each line of input produces a line of output.}
 
 \def\realdash{-}
 \def\codedash{-\discretionary{}{}{}}
-\def\codeunder{\normalunderscore\discretionary{}{}{}}
+\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
 \def\codex #1{\tclose{#1}\endgroup}
 
 %\let\exp=\tclose  %Was temporary
@@ -1339,6 +1337,12 @@ where each line of input produces a line of output.}
 \else{\tclose{\ttsl\look}}\fi
 \else{\tclose{\ttsl\look}}\fi}
 
+% @url, @email.  Quotes do not seem necessary.
+\let\url=\code % perhaps include a hypertex \special eventually
+% rms does not like the angle brackets --karl, 17may97.
+%\def\email#1{$\langle${\tt #1}$\rangle$}
+\let\email=\code
+
 % Check if we are currently using a typewriter font.  Since all the
 % Computer Modern typewriter fonts have zero interword stretch (and
 % shrink), and it is reasonable to expect all typewriter fonts to have
@@ -3417,8 +3421,8 @@ width0pt\relax} \fi
 \let\.=\ptexdot
 \let\*=\ptexstar
 \let\dots=\ptexdots
-\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}
-\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}
+\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
 \def\@{@}%
 \let\bullet=\ptexbullet
 \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
index 839e44135430de07ccb39a79c89a31885b480720..87b47ab1b62e1d8bf654c3821d4549c279efb3b0 100644 (file)
@@ -67,7 +67,8 @@ distribute += $(long-m-yes:=.c)
 # These functions are in libc instead of libm because __printf_fp
 # calls them, so any program using printf will need them linked in,
 # and we don't want to have to link every program with -lm.
-calls = s_isinf s_isnan s_finite s_copysign s_modf s_scalbn s_frexp s_ldexp
+calls = s_isinf s_isnan s_finite s_copysign s_modf s_scalbn s_frexp s_ldexp \
+       s_signbit
 routines = $(calls) $(calls:=f) $(long-c-$(long-double-fcts))
 long-c-yes = $(calls:=l)
 distribute += $(long-c-yes:=.c)
index c065d662e0d0f99d521f55ba8a8a985177d87328..e4dff29a2e069cc66d75735fb99c8a1db0cbc188 100644 (file)
@@ -71,7 +71,7 @@ extern void fegetexceptflag __P ((fexcept_t *__flagp, int __excepts));
 /* Raise the supported exceptions represented by EXCEPTS.  */
 extern void feraiseexcept __P ((int __excepts));
 
-/* Set complete status for exceptions inidicated by EXCEPTS according to
+/* Set complete status for exceptions indicated by EXCEPTS according to
    the representation in the object pointed to by FLAGP.  */
 extern void fesetexceptflag __P ((__const fexcept_t *__flagp, int __excepts));
 
index e6030c8543a8948428190db3568ee61a42e8dc36..69caef01d71250d0624afcb3e94281a98655a6c4 100644 (file)
@@ -37,6 +37,7 @@
 #define FLOOR APPEND(floor, FLOAT_NAME_EXT)
 #define FABS APPEND(fabs, FLOAT_NAME_EXT)
 #define LOG10 APPEND(log10, FLOAT_NAME_EXT)
+#define EXP APPEND(exp, FLOAT_NAME_EXT)
 
 
 int
@@ -54,9 +55,12 @@ APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len)
       return -1;
     }
 
-  *sign = value < 0.0;
-  if (*sign)
-    value = - value;
+  if (isfinite (value))
+    {
+      *sign = signbit (value) != 0;
+      if (*sign)
+       value = -value;
+    }
 
   n = snprintf (buf, len, "%.*" FLOAT_FMT_FLAG "f", ndigit, value);
   if (n < 0)
@@ -66,16 +70,29 @@ APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len)
   while (i < n && isdigit (buf[i]))
     ++i;
   *decpt = i;
-  do
-    ++i;
-  while (! isdigit (buf[i]));
-  memmove (&buf[i - *decpt], buf, n - (i - *decpt));
+
+  if (i == 0)
+    {
+      /* Value is Inf or NaN.  */
+      *sign = 0;
+      return 0;
+    }
+
+  if (i < n)
+    {
+      do
+       ++i;
+      while (i < n && !isdigit (buf[i]));
+      memmove (&buf[*decpt], &buf[i], n - i);
+      buf[n - (i - *decpt)] = 0;
+    }
 
   return 0;
 }
 
 #define weak_extern2(name) weak_extern (name)
 weak_extern2 (FLOOR) weak_extern2 (LOG10) weak_extern2 (FABS)
+weak_extern2 (EXP)
 
 int
 APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, buf, len)
@@ -84,24 +101,55 @@ APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, buf, len)
      char *buf;
      size_t len;
 {
-  FLOAT_TYPE (*log10_function) (FLOAT_TYPE) = &LOG10;
+  int exponent = 0;
 
-  if (log10_function)
-    {
-      /* Use the reasonable code if -lm is included.  */
-      ndigit -= (int) FLOOR (LOG10 (FABS (value)));
-      if (ndigit < 0)
-       ndigit = 0;
-    }
-  else
+  if (isfinite (value) && value != 0.0)
     {
-      /* Slow code that doesn't require -lm functions.  */
-      FLOAT_TYPE d;
-      for (d = value < 0.0 ? - value : value;
-          ndigit > 0 && d >= 10.0;
-          d *= 0.1)
-       --ndigit;
+      FLOAT_TYPE (*log10_function) (FLOAT_TYPE) = &LOG10;
+
+      if (log10_function)
+       {
+         /* Use the reasonable code if -lm is included.  */
+         FLOAT_TYPE dexponent;
+         dexponent = FLOOR (LOG10 (FABS (value)));
+         value *= EXP (dexponent * -M_LN10);
+         exponent = (int) dexponent;
+       }
+      else
+       {
+         /* Slow code that doesn't require -lm functions.  */
+         FLOAT_TYPE d;
+         if (value < 0.0)
+           d = -value;
+         else
+           d = value;
+         if (d < 1.0)
+           {
+             do
+               {
+                 d *= 10.0;
+                 exponent--;
+               }
+             while (d < 1.0);
+           }
+         else if (d >= 10.0)
+           {
+             do
+               {
+                 d *= 0.1;
+                 exponent++;
+               }
+             while (d >= 10.0);
+           }
+         if (value < 0.0)
+           value = -d;
+         else
+           value = d;
+       }
     }
 
-  return APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len);
+  if (APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit - 1, decpt, sign, buf, len))
+    return -1;
+  *decpt += exponent;
+  return 0;
 }
index 3400e28da7fbb64812dc888adf92f72279425b39..d426d28684e639bed9a73d0a0d403d1182074ea2 100644 (file)
@@ -90,47 +90,47 @@ _nss_nisplus_parse_spent (nis_result *result, struct spwd *sp,
   if (cp == NULL)
     return 0;
   *cp++ = '\0';
-  sp->sp_lstchg = atoi (line);
+  sp->sp_lstchg = atol (line);
 
   line = cp;
   cp = strchr (line, ':');
   if (cp == NULL)
     return 0;
   *cp++ = '\0';
-  sp->sp_min = atoi(line);
+  sp->sp_min = atol(line);
 
   line = cp;
   cp = strchr (line, ':');
   if (cp == NULL)
     return 0;
   *cp++ = '\0';
-  sp->sp_max = atoi(line);
+  sp->sp_max = atol(line);
 
   line = cp;
   cp = strchr (line, ':');
   if (cp == NULL)
     return 0;
   *cp++ = '\0';
-  sp->sp_warn = atoi(line);
+  sp->sp_warn = atol(line);
 
   line = cp;
   cp = strchr (line, ':');
   if (cp == NULL)
     return 0;
   *cp++ = '\0';
-  sp->sp_inact = atoi(line);
+  sp->sp_inact = atol(line);
 
   line = cp;
   cp = strchr (line, ':');
   if (cp == NULL)
     return 0;
   *cp++ = '\0';
-  sp->sp_expire = atoi(line);
+  sp->sp_expire = atol(line);
 
   line = cp;
   if (line == NULL)
     return 0;
-  sp->sp_flag = atoi(line);
+  sp->sp_flag = atol(line);
 
   return 1;
 }
index bd573d2d4a968f7c18d69b679b6949d35194ed48..8b296021f593b12389a20c574094efa22f9c59a8 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,12 +1,12 @@
 # GNU libc message catalog for swedish
-# Copyright (C) 1996 Free Software Foundation, Inc.
+# Copyright Â© 1996 Free Software Foundation, Inc.
 # Jan Djärv <Jan.Djarv@mbox200.swipnet.se>, 1996.
 # $Revision$
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: libc 1.99\n"
-"POT-Creation-Date: 1996-12-03 13:50+0100\n"
+"Project-Id-Version: libc 2.0.3\n"
+"POT-Creation-Date: 1997-03-30 19:08+0200\n"
 "PO-Revision-Date: $Date$\n"
 "Last-Translator: Jan Djärv <Jan.Djarv@mbox200.swipnet.se>\n"
 "Language-Team: Swedish <sv@li.org>\n"
@@ -34,31 +34,31 @@ msgstr "       rpcinfo [ -n portnr ] -t v
 msgid "   program vers proto   port\n"
 msgstr "   program vers proto   port\n"
 
-#: time/zic.c:424
+#: time/zic.c:419
 #, c-format
 msgid " (rule from \"%s\", line %d)"
 msgstr " (regel frÃ¥n \"%s\", rad %d)"
 
-#: locale/programs/ld-collate.c:360 locale/programs/ld-ctype.c:1234
+#: locale/programs/ld-collate.c:363 locale/programs/ld-ctype.c:1242
 msgid " done\n"
 msgstr " klar\n"
 
-#: time/zic.c:421
+#: time/zic.c:416
 #, c-format
 msgid "\"%s\", line %d: %s"
 msgstr "\"%s\", rad %d: %s"
 
-#: time/zic.c:945
+#: time/zic.c:943
 #, c-format
 msgid "\"Zone %s\" line and -l option are mutually exclusive"
 msgstr "\"Zone %s\"-rad och flaggan -l Ã¤r Ã¶msesidigt uteslutande"
 
-#: time/zic.c:953
+#: time/zic.c:951
 #, c-format
 msgid "\"Zone %s\" line and -p option are mutually exclusive"
 msgstr "\"Zone %s\"-rad och flaggan -p Ã¤r Ã¶msesidigt uteslutande"
 
-#: time/zic.c:758
+#: time/zic.c:754
 #, c-format
 msgid "%s in ruleless zone"
 msgstr "%s i zon utan regel"
@@ -78,7 +78,7 @@ msgstr "%s%s%s:%u: %s%sOv
 msgid "%s%sUnknown signal %d\n"
 msgstr "%s%sOkänd signal %d\n"
 
-#: time/zic.c:2139
+#: time/zic.c:2172
 #, c-format
 msgid "%s: %d did not sign extend correctly\n"
 msgstr "%s: %d teckenexpanderades inte korrekt\n"
@@ -88,137 +88,142 @@ msgstr "%s: %d teckenexpanderades inte korrekt\n"
 msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n"
 msgstr "%s: <mb_cur_max> mÃ¥ste vara större Ã¤n <mb_cur_min>\n"
 
-#: time/zic.c:1430
+#: time/zic.c:1443
 #, c-format
 msgid "%s: Can't create %s: %s\n"
 msgstr "%s: Kan inte skapa %s: %s\n"
 
-#: time/zic.c:2118
+#: time/zic.c:2150
 #, c-format
 msgid "%s: Can't create directory %s: %s\n"
 msgstr "%s: Kan inte skapa katalog %s: %s\n"
 
-#: time/zic.c:612
+#: time/zic.c:608
 #, c-format
 msgid "%s: Can't link from %s to %s: %s\n"
 msgstr "%s: Kan inte länka frÃ¥n %s till %s: %s\n"
 
-#: time/zic.c:783
+#: time/zic.c:780
 #, c-format
 msgid "%s: Can't open %s: %s\n"
 msgstr "%s: Kan inte Ã¶ppna %s: %s\n"
 
-#: time/zic.c:851
+#: time/zic.c:1433
+#, c-format
+msgid "%s: Can't remove %s: %s\n"
+msgstr "%s: Kan inte ta bort %s: %s\n"
+
+#: time/zic.c:849
 #, c-format
 msgid "%s: Error closing %s: %s\n"
 msgstr "%s: Fel vid stängning av %s: %s\n"
 
-#: time/zic.c:845
+#: time/zic.c:842
 #, c-format
 msgid "%s: Error reading %s\n"
 msgstr "%s: Fel vid läsning frÃ¥n %s\n"
 
-#: time/zic.c:1494
+#: time/zic.c:1507
 #, c-format
 msgid "%s: Error writing %s\n"
 msgstr "%s: Fel vid skrivning till %s\n"
 
-#: time/zdump.c:258
+#: time/zdump.c:266
 #, c-format
 msgid "%s: Error writing standard output "
 msgstr "%s: Fel vid skrivning till standard ut "
 
-#: time/zic.c:830
+#: time/zic.c:827
 #, c-format
 msgid "%s: Leap line in non leap seconds file %s\n"
 msgstr "%s: \"Leap\"-rad i fil %s som inte Ã¤r skottsekundsfil\n"
 
-#: time/zic.c:362
+#: time/zic.c:357
 #, c-format
 msgid "%s: Memory exhausted: %s\n"
 msgstr "%s: Minnet slut: %s\n"
 
-#: time/zic.c:527
+#: time/zic.c:522
 #, c-format
 msgid "%s: More than one -L option specified\n"
 msgstr "%s: Flaggan -L given mer Ã¤n en gÃ¥ng\n"
 
-#: time/zic.c:487
+#: time/zic.c:482
 #, c-format
 msgid "%s: More than one -d option specified\n"
-msgstr "%s: Flagga -d given mer Ã¤n en gÃ¥ng\n"
+msgstr "%s: Flaggan -d given mer Ã¤n en gÃ¥ng\n"
 
-#: time/zic.c:497
+#: time/zic.c:492
 #, c-format
 msgid "%s: More than one -l option specified\n"
 msgstr "%s: Flaggan -l given mer Ã¤n en gÃ¥ng\n"
 
-#: time/zic.c:507
+#: time/zic.c:502
 #, c-format
 msgid "%s: More than one -p option specified\n"
 msgstr "%s: Flaggan -p given mer Ã¤n en gÃ¥ng\n"
 
-#: time/zic.c:517
+#: time/zic.c:512
 #, c-format
 msgid "%s: More than one -y option specified\n"
 msgstr "%s: Flaggan -y given mer Ã¤n en gÃ¥ng\n"
 
-#: time/zic.c:1845
+#: time/zic.c:1872
 #, c-format
 msgid "%s: command was '%s', result was %d\n"
 msgstr "%s: kommandot var \"%s\", resultatet blev %d\n"
 
-#: locale/programs/charmap.c:593 locale/programs/locfile.c:878
+#: locale/programs/charmap.c:593 locale/programs/locfile.c:900
 #, c-format
 msgid "%s: error in state machine"
 msgstr "%s: fel i tillstÃ¥ndsmaskin"
 
-#: posix/getopt.c:687
+#: posix/getopt.c:783
 #, c-format
 msgid "%s: illegal option -- %c\n"
 msgstr "%s: otillÃ¥ten flagga -- %c\n"
 
-#: posix/getopt.c:690
+#: posix/getopt.c:786
 #, c-format
 msgid "%s: invalid option -- %c\n"
 msgstr "%s: ogiltig flagga -- %c\n"
 
-#: posix/getopt.c:611
+#: posix/getopt.c:707
 #, c-format
 msgid "%s: option `%c%s' doesn't allow an argument\n"
 msgstr "%s: flaggan \"%c%s\" tar inget argument\n"
 
-#: posix/getopt.c:582
+#: posix/getopt.c:678
 #, c-format
 msgid "%s: option `%s' is ambiguous\n"
 msgstr "%s: flaggan \"%s\" Ã¤r tvetydig\n"
 
-#: posix/getopt.c:628 posix/getopt.c:801
+#: posix/getopt.c:724 posix/getopt.c:897
 #, c-format
 msgid "%s: option `%s' requires an argument\n"
 msgstr "%s: flaggan \"%s\" behöver ett argument\n"
 
-#: posix/getopt.c:606
+#: posix/getopt.c:702
 #, c-format
 msgid "%s: option `--%s' doesn't allow an argument\n"
 msgstr "%s: flaggan \"--%s\" tar inget argument\n"
 
-#: posix/getopt.c:786
+#: posix/getopt.c:881
 #, c-format
 msgid "%s: option `-W %s' doesn't allow an argument\n"
 msgstr "%s: flaggan \"-W %s\" tar inget argument\n"
 
-#: posix/getopt.c:767
+#: posix/getopt.c:863
 #, c-format
 msgid "%s: option `-W %s' is ambiguous\n"
 msgstr "%s: flaggan \"-W %s\" Ã¤r tvetydig\n"
 
-#: posix/getopt.c:721 posix/getopt.c:850
+#: posix/getopt.c:816 posix/getopt.c:946
 #, c-format
 msgid "%s: option requires an argument -- %c\n"
 msgstr "%s: flaggan behöver ett argument -- %c\n"
 
-#: time/zic.c:837 time/zic.c:1248 time/zic.c:1268
+#: time/zic.c:834 time/zic.c:1246 time/zic.c:1266
 #, c-format
 msgid "%s: panic: Invalid l_value %d\n"
 msgstr "%s: panik: ogiltigt l_value %d\n"
@@ -228,17 +233,17 @@ msgstr "%s: panik: ogiltigt l_value %d\n"
 msgid "%s: premature end of file"
 msgstr "%s: för tidigt filslut"
 
-#: posix/getopt.c:661
+#: posix/getopt.c:757
 #, c-format
 msgid "%s: unrecognized option `%c%s'\n"
 msgstr "%s: okänd flagga \"%c%s\"\n"
 
-#: posix/getopt.c:657
+#: posix/getopt.c:753
 #, c-format
 msgid "%s: unrecognized option `--%s'\n"
 msgstr "%s: okänd flagga \"--%s\"\n"
 
-#: time/zic.c:446
+#: time/zic.c:441
 #, c-format
 msgid ""
 "%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d "
@@ -249,7 +254,7 @@ msgstr ""
 "katalog ]\n"
 "\t[ -L skottsekunder ] [ -y Ã¥rkontrollprogram ] [ filnamn ... ]\n"
 
-#: time/zdump.c:165
+#: time/zdump.c:174
 #, c-format
 msgid "%s: usage is %s [ -v ] [ -c cutoff ] zonename ...\n"
 msgstr "%s: användning Ã¤r %s [ -v ] [ -c gräns ] zonnamn ...\n"
@@ -263,7 +268,7 @@ msgstr "(ok
 msgid "(unknown)"
 msgstr "(okänt)"
 
-#: catgets/gencat.c:253
+#: catgets/gencat.c:254
 msgid "*standard input*"
 msgstr "*standard in*"
 
@@ -271,21 +276,21 @@ msgstr "*standard in*"
 msgid ".lib section in a.out corrupted"
 msgstr ".lib-sektion i a.out korrupt"
 
-#: inet/rcmd.c:358
+#: inet/rcmd.c:363
 msgid ".rhosts fstat failed"
 msgstr "misslyckades ta status (fstat) pÃ¥ .rhosts"
 
-#: inet/rcmd.c:354
+#: inet/rcmd.c:359
 msgid ".rhosts lstat failed"
 msgstr "misslyckades ta status (lstat) pÃ¥ .rhosts"
 
-#: inet/rcmd.c:356
+#: inet/rcmd.c:361
 msgid ".rhosts not regular file"
 msgstr ".rhosts Ã¤r inte en normal fil"
 
-#: inet/rcmd.c:362
+#: inet/rcmd.c:367
 msgid ".rhosts writeable by other than owner"
-msgstr ".rhosts kan skrivas av andra Ã¤n Ã¤garen"
+msgstr ".rhosts Ã¤r skrivbar för andra Ã¤n Ã¤garen"
 
 #: sunrpc/clnt_perr.c:112 sunrpc/clnt_perr.c:133
 #, c-format
@@ -296,12 +301,12 @@ msgstr "; undre version = %lu, 
 msgid "; why = "
 msgstr "; varför = "
 
-#: locale/programs/ld-ctype.c:326
+#: locale/programs/ld-ctype.c:331
 #, c-format
 msgid "<SP> character must not be in class `%s'"
 msgstr "<SP>-tecknet fÃ¥r inte vara i klass \"%s\""
 
-#: locale/programs/ld-ctype.c:317
+#: locale/programs/ld-ctype.c:321
 #, c-format
 msgid "<SP> character not in class `%s'"
 msgstr "<SP>-tecknet Ã¤r inte i klass \"%s\""
@@ -313,6 +318,10 @@ msgstr "<SP>-tecknet 
 msgid "?"
 msgstr "?"
 
+#: sysdeps/unix/sysv/linux/siglist.h:27
+msgid "Aborted"
+msgstr "Avbruten (SIGABRT)"
+
 #: stdio-common/../sysdeps/gnu/errlist.c:762
 msgid "Accessing a corrupted shared library"
 msgstr "Öppnar ett korrupt delat bibliotek"
@@ -320,7 +329,7 @@ msgstr "
 #. TRANS The requested socket address is already in use.  @xref{Socket Addresses}.
 #: stdio-common/../sysdeps/gnu/errlist.c:354
 msgid "Address already in use"
-msgstr "Adressen används redan"
+msgstr "Adressen upptagen"
 
 #. TRANS The address family specified for a socket is not supported; it is
 #. TRANS inconsistent with the protocol being used on the socket.  @xref{Sockets}.
@@ -332,6 +341,8 @@ msgstr "Adressfamiljen st
 msgid "Advertise error"
 msgstr "Annonseringsfel"
 
+#: stdio-common/../sysdeps/unix/siglist.c:43
+#: sysdeps/unix/sysv/linux/siglist.h:33
 msgid "Alarm clock"
 msgstr "Alarmklocka"
 
@@ -377,6 +388,11 @@ msgstr "Felaktigt format p
 msgid "Bad message"
 msgstr "Felaktigt meddelande"
 
+#: stdio-common/../sysdeps/unix/siglist.c:41
+#: sysdeps/unix/sysv/linux/siglist.h:56
+msgid "Bad system call"
+msgstr "Felaktigt systemanrop"
+
 #. TRANS A file that isn't a block special file was given in a situation that
 #. TRANS requires one.  For example, trying to mount an ordinary file as a file
 #. TRANS system in Unix gives this error.
@@ -384,7 +400,7 @@ msgstr "Felaktigt meddelande"
 msgid "Block device required"
 msgstr "Blockspecialfil krävs"
 
-#: sunrpc/pmap_rmt.c:337
+#: sunrpc/pmap_rmt.c:338
 msgid "Broadcast select problem"
 msgstr "Problem med \"select\" i utsändning"
 
@@ -394,32 +410,37 @@ msgstr "Problem med \"select\" i uts
 #. TRANS or blocked.  Thus, your program will never actually see @code{EPIPE}
 #. TRANS unless it has handled or blocked @code{SIGPIPE}.
 #: stdio-common/../sysdeps/gnu/errlist.c:222
+#: stdio-common/../sysdeps/unix/siglist.c:42
+#: sysdeps/unix/sysv/linux/siglist.h:32
 msgid "Broken pipe"
 msgstr "Brutet rör"
 
+#: stdio-common/../sysdeps/unix/siglist.c:39
+#: sysdeps/unix/sysv/linux/siglist.h:30
 msgid "Bus error"
 msgstr "Bussfel"
 
+#: sysdeps/unix/sysv/linux/siglist.h:43
 msgid "CPU time limit exceeded"
-msgstr "begränsning av CPU-tid Ã¶verskriden"
+msgstr "Begränsning av CPU-tid Ã¶verskriden"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:758
 msgid "Can not access a needed shared library"
 msgstr "Kan inte komma Ã¥t ett nödvändigt delat bibliotek"
 
-#: nis/ypclnt.c:637
+#: nis/ypclnt.c:695
 msgid "Can't bind to server which serves this domain"
 msgstr "Kan inte ansluta till betjänt som betjänar denna domän"
 
-#: nis/ypclnt.c:649
+#: nis/ypclnt.c:707
 msgid "Can't communicate with portmapper"
 msgstr "Kan inte kommunicera med portmapper"
 
-#: nis/ypclnt.c:651
+#: nis/ypclnt.c:709
 msgid "Can't communicate with ypbind"
 msgstr "Kan inte kommunicera med ypbind"
 
-#: nis/ypclnt.c:653
+#: nis/ypclnt.c:711
 msgid "Can't communicate with ypserv"
 msgstr "Kan inte kommunicera med ypserv"
 
@@ -444,7 +465,7 @@ msgstr "Kan inte skapa uttag (socket) f
 msgid "Cannot exec a shared library directly"
 msgstr "Kan inte köra ett delat bibliotek direkt"
 
-#: sunrpc/pmap_rmt.c:349
+#: sunrpc/pmap_rmt.c:350
 msgid "Cannot receive reply to broadcast"
 msgstr "Kan inte ta emot svar pÃ¥ utsändning"
 
@@ -463,14 +484,16 @@ msgstr "Kan inte skicka uts
 
 #: sunrpc/pmap_rmt.c:261
 msgid "Cannot set socket option SO_BROADCAST"
-msgstr "Kan inte sätta uttagsflaggan (socket) SO_BROADCAST"
+msgstr "Kan inte sätta uttagsflaggan (socket option) SO_BROADCAST"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:658
 msgid "Channel number out of range"
 msgstr "Kanalnummer utanför giltigt intervall"
 
+#: stdio-common/../sysdeps/unix/siglist.c:49
+#: sysdeps/unix/sysv/linux/siglist.h:39
 msgid "Child exited"
-msgstr "Barnet avslutade"
+msgstr "Barnstatus Ã¤ndrad"
 
 #: sunrpc/clnt_perr.c:286
 msgid "Client credential too weak"
@@ -485,11 +508,11 @@ msgstr "Kommunikationsfel vid s
 msgid "Computer bought the farm"
 msgstr "Datorn packade ihop"
 
-#: locale/programs/ld-ctype.c:1197
+#: locale/programs/ld-ctype.c:1204
 msgid "Computing table size for character classes might take a while..."
 msgstr "Att beräkna tabellstorlek för teckenklasser kan ta ett tag..."
 
-#: locale/programs/ld-collate.c:327
+#: locale/programs/ld-collate.c:329
 msgid "Computing table size for collation information might take a while..."
 msgstr ""
 "Att beräkna tabellstorlek för kollationeringsinformation kan ta ett tag..."
@@ -513,23 +536,29 @@ msgstr "F
 msgid "Connection timed out"
 msgstr "Förbindelsens tid tog slut"
 
+#: stdio-common/../sysdeps/unix/siglist.c:48
+#: sysdeps/unix/sysv/linux/siglist.h:38
 msgid "Continued"
-msgstr "Fortsätter"
+msgstr "Ã…terupptagen"
 
 #: catgets/gencat.c:169 db/makedb.c:120 locale/programs/locale.c:187
-#: locale/programs/localedef.c:177
+#: locale/programs/localedef.c:180
 #, c-format
 msgid ""
 "Copyright (C) %s Free Software Foundation, Inc.\n"
 "This is free software; see the source for copying conditions.  There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
 msgstr ""
-"Copyright (C) %s Free Software Foundation, Inc.\n"
+"Copyright Â© %s Free Software Foundation, Inc.\n"
 "Detta Ã¤r fri programvara; se källkoden för kopieringsvillkor.  Det finns\n"
 "INGEN garanti; inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR NÃ…GOT SPECIELLT\n"
 "ÄNDAMÃ…L.\n"
 
-#: nis/ypclnt.c:663
+#: stdio-common/../sysdeps/unix/siglist.c:53
+msgid "Cputime limit exceeded"
+msgstr "Begränsning av CPU-tid Ã¶verskriden"
+
+#: nis/ypclnt.c:721
 msgid "Database is busy"
 msgstr "Databasen Ã¤r upptagen"
 
@@ -571,10 +600,15 @@ msgstr "Katalog inte tom"
 msgid "Disc quota exceeded"
 msgstr "Diskkvot Ã¶verskriden"
 
-#: nis/ypclnt.c:709
+#: nis/ypclnt.c:767
 msgid "Domain not bound"
 msgstr "Domän inte bunden"
 
+#: stdio-common/../sysdeps/unix/siglist.c:36
+#: sysdeps/unix/sysv/linux/siglist.h:53
+msgid "EMT trap"
+msgstr "Emulatorfälla"
+
 #: sunrpc/clnt_perr.c:254
 #, c-format
 msgid "Error %d"
@@ -598,7 +632,7 @@ msgstr "V
 msgid "Exec format error"
 msgstr "Formatfel pÃ¥ körbar fil"
 
-#: locale/programs/localedef.c:213
+#: locale/programs/localedef.c:216
 msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'"
 msgstr "FATALT: systemet definierar inte \"_POSIX2_LOCALEDEF\""
 
@@ -627,6 +661,7 @@ msgstr "Fill
 msgid "File name too long"
 msgstr "Filnamn för lÃ¥ngt"
 
+#: sysdeps/unix/sysv/linux/siglist.h:44
 msgid "File size limit exceeded"
 msgstr "Begränsning av filstorlek Ã¶verskriden"
 
@@ -635,8 +670,14 @@ msgstr "Begr
 msgid "File too large"
 msgstr "Fil för stor"
 
+#: stdio-common/../sysdeps/unix/siglist.c:54
+msgid "Filesize limit exceeded"
+msgstr "Begränsning av filstorlek Ã¶verskriden"
+
+#: stdio-common/../sysdeps/unix/siglist.c:37
+#: sysdeps/unix/sysv/linux/siglist.h:28
 msgid "Floating point exception"
-msgstr "Flyttalsberäkningsfel"
+msgstr "Aritmetiskt fel"
 
 #. TRANS Function not implemented.  Some functions have commands or options defined
 #. TRANS that might not be supported in all implementations, and this is the kind
@@ -650,8 +691,10 @@ msgstr "Funktion inte implementerad"
 msgid "Gratuitous error"
 msgstr "Omotiverat fel"
 
+#: stdio-common/../sysdeps/unix/siglist.c:30
+#: sysdeps/unix/sysv/linux/siglist.h:22
 msgid "Hangup"
-msgstr "Lägg pÃ¥"
+msgstr "Avringd"
 
 #. TRANS The remote host for a requested network connection is down.
 #: stdio-common/../sysdeps/gnu/errlist.c:457
@@ -662,19 +705,27 @@ msgstr "V
 msgid "Host name lookup failure"
 msgstr "Uppslagning av värdnamn misslyckades"
 
+#: stdio-common/../sysdeps/unix/siglist.c:52
+#: sysdeps/unix/sysv/linux/siglist.h:42
 msgid "I/O possible"
 msgstr "I/O möjligt"
 
+#: stdio-common/../sysdeps/unix/siglist.c:35
 msgid "IOT trap"
-msgstr "IOT fälla"
+msgstr "IOT-fälla"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:614
 msgid "Identifier removed"
 msgstr "Identifierare borttagen"
 
+#: sysdeps/unix/sysv/linux/siglist.h:25
 msgid "Illegal Instruction"
 msgstr "OtillÃ¥ten instruktion"
 
+#: stdio-common/../sysdeps/unix/siglist.c:33
+msgid "Illegal instruction"
+msgstr "OtillÃ¥ten instruktion"
+
 #. TRANS Invalid seek operation (such as on a pipe).
 #: stdio-common/../sysdeps/gnu/errlist.c:201
 msgid "Illegal seek"
@@ -705,23 +756,29 @@ msgstr "Ol
 msgid "Inappropriate operation for background process"
 msgstr "Operation för bakgrundsprocess olämplig"
 
+#: sysdeps/unix/sysv/linux/siglist.h:62
+msgid "Information request"
+msgstr "Informationsbegäran"
+
 #. TRANS Input/output error; usually used for physical read or write errors.
 #: stdio-common/../sysdeps/gnu/errlist.c:40
 msgid "Input/output error"
 msgstr "In/ut-fel"
 
-#: nis/ypclnt.c:643
+#: nis/ypclnt.c:701
 msgid "Internal NIS error"
 msgstr "Internt NIS-fel"
 
-#: nis/ypclnt.c:707
+#: nis/ypclnt.c:765
 msgid "Internal ypbind error"
 msgstr "Internt ypbind-fel"
 
+#: stdio-common/../sysdeps/unix/siglist.c:31
+#: sysdeps/unix/sysv/linux/siglist.h:23
 msgid "Interrupt"
-msgstr "Avbrutet"
+msgstr "Avbruten (SIGINT)"
 
-#. TRANS Interrupted function call; an asynchronous signal occured and prevented
+#. TRANS Interrupted function call; an asynchronous signal occurred and prevented
 #. TRANS completion of the call.  When this happens, you should try the call
 #. TRANS again.
 #. TRANS
@@ -742,11 +799,11 @@ msgstr "Avbrutet systemanrop borde omstartas"
 msgid "Invalid argument"
 msgstr "Ogiltigt argument"
 
-#: posix/regex.c:946
+#: posix/regex.c:960
 msgid "Invalid back reference"
 msgstr "Ogiltig bakÃ¥treferens"
 
-#: posix/regex.c:944
+#: posix/regex.c:958
 msgid "Invalid character class name"
 msgstr "Ogiltigt teckenklassnamn"
 
@@ -758,13 +815,13 @@ msgstr "Ogiltiga klientreferenser"
 msgid "Invalid client verifier"
 msgstr "Ogiltig klientverifierare"
 
-#: posix/regex.c:943
+#: posix/regex.c:957
 msgid "Invalid collation character"
 msgstr "Ogiltigt kollationeringstecken"
 
-#: posix/regex.c:950
+#: posix/regex.c:964
 msgid "Invalid content of \\{\\}"
-msgstr "Ogiltig användning av \\{\\}"
+msgstr "Ogiltigt innehÃ¥ll i \\{\\}"
 
 #. TRANS An attempt to make an improper link across file systems was detected.
 #. TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but
@@ -781,17 +838,17 @@ msgstr "Ogiltig v
 #. TRANS or an incomplete sequence of bytes or the given wide character is invalid.
 #: stdio-common/../sysdeps/gnu/errlist.c:567
 msgid "Invalid or incomplete multibyte or wide character"
-msgstr "Ogiltig eller inte komplett flerbyte eller brett tecken"
+msgstr "Ogiltig eller inte komplett flerbyte- eller brett tecken"
 
-#: posix/regex.c:953
+#: posix/regex.c:967
 msgid "Invalid preceding regular expression"
 msgstr "Ogiltigt föregÃ¥ende reguljärt uttryck"
 
-#: posix/regex.c:951
+#: posix/regex.c:965
 msgid "Invalid range end"
 msgstr "Ogiltigt intervallslut"
 
-#: posix/regex.c:942
+#: posix/regex.c:956
 msgid "Invalid regular expression"
 msgstr "Ogiltigt reguljärt uttryck"
 
@@ -821,6 +878,8 @@ msgstr "
 msgid "Is a named type file"
 msgstr "Är en namngiven filtyp"
 
+#: stdio-common/../sysdeps/unix/siglist.c:38
+#: sysdeps/unix/sysv/linux/siglist.h:29
 msgid "Killed"
 msgstr "Dödad"
 
@@ -846,13 +905,13 @@ msgstr "L
 
 #: stdio-common/../sysdeps/gnu/errlist.c:674
 msgid "Link number out of range"
-msgstr "Länktal utanför giltigt omrÃ¥de"
+msgstr "Länkantal utanför giltigt omrÃ¥de"
 
-#: nis/ypclnt.c:655
+#: nis/ypclnt.c:713
 msgid "Local domain name not set"
 msgstr "Lokalt domännamn inte satt"
 
-#: nis/ypclnt.c:645
+#: nis/ypclnt.c:703
 msgid "Local resource allocation failure"
 msgstr "Allokeringsfel för lokal resurs"
 
@@ -860,7 +919,7 @@ msgstr "Allokeringsfel f
 msgid "Machine is not on the network"
 msgstr "Maskinen finns inte pÃ¥ nätverket"
 
-#: posix/regex.c:952
+#: posix/regex.c:966
 msgid "Memory exhausted"
 msgstr "Minnet slut"
 
@@ -874,11 +933,11 @@ msgstr "Meddelandet f
 msgid "Multihop attempted"
 msgstr "Flerhopp försöktes"
 
-#: nis/ypclnt.c:659
+#: nis/ypclnt.c:717
 msgid "NIS client/server version mismatch - can't supply service"
-msgstr "NIS klient/betjänt versionsskillnad - kan inte betjäna"
+msgstr "NIS versionsskillnad klient/betjänt - kan inte betjäna"
 
-#: nis/ypclnt.c:657
+#: nis/ypclnt.c:715
 msgid "NIS map data base is bad"
 msgstr "NIS tabelldatabas Ã¤r felaktig"
 
@@ -939,7 +998,7 @@ msgstr "Inga barnprocesser"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:622
 msgid "No data available"
-msgstr "Data otillgängligt"
+msgstr "Inga data tillgängliga"
 
 #. TRANS No locks available.  This is used by the file locking facilities; see
 #. TRANS @ref{File Locks}.  This error is never generated by the GNU system, but
@@ -949,7 +1008,7 @@ msgstr "Data otillg
 msgid "No locks available"
 msgstr "Inga lÃ¥s tillgängliga"
 
-#: posix/regex.c:941
+#: posix/regex.c:955
 msgid "No match"
 msgstr "Ingen träff"
 
@@ -957,11 +1016,11 @@ msgstr "Ingen tr
 msgid "No message of desired type"
 msgstr "Inget meddelande av Ã¶nskad typ"
 
-#: nis/ypclnt.c:647
+#: nis/ypclnt.c:705
 msgid "No more records in map database"
 msgstr "Inga fler poster i tabelldatabasen"
 
-#: posix/regex.c:5204
+#: posix/regex.c:5324
 msgid "No previous regular expression"
 msgstr "Inget föregÃ¥ende reguljärt uttryck"
 
@@ -987,11 +1046,11 @@ msgstr "Enheten 
 msgid "No such file or directory"
 msgstr "Filen eller katalogen finns inte"
 
-#: nis/ypclnt.c:641
+#: nis/ypclnt.c:699
 msgid "No such key in map"
 msgstr "Ingen sÃ¥dan nyckel i tabellen"
 
-#: nis/ypclnt.c:639
+#: nis/ypclnt.c:697
 msgid "No such map in server's domain"
 msgstr "Ingen sÃ¥dan tabell i betjäntens domän"
 
@@ -1029,7 +1088,7 @@ msgstr "Numeriskt resultat 
 msgid "Object is remote"
 msgstr "Är ett fjärrobjekt"
 
-#: time/zic.c:1939
+#: time/zic.c:1966
 msgid "Odd number of quotation marks"
 msgstr "Ojämnt antal citationstecken"
 
@@ -1091,19 +1150,22 @@ msgid "Package not installed"
 msgstr "Paketet Ã¤r inte installerat"
 
 #. TRANS Permission denied; the file permissions do not allow the attempted operation.
-#: nis/ypclnt.c:661 stdio-common/../sysdeps/gnu/errlist.c:96
+#: nis/ypclnt.c:719 stdio-common/../sysdeps/gnu/errlist.c:96
 msgid "Permission denied"
 msgstr "Ã…tkomst nekas"
 
+#: sysdeps/unix/sysv/linux/siglist.h:64
 msgid "Power failure"
-msgstr "Spänningsfall"
+msgstr "Strömavbrott"
 
-#: posix/regex.c:954
+#: posix/regex.c:968
 msgid "Premature end of regular expression"
 msgstr "För tidigt slut pÃ¥ reguljärt uttryck"
 
+#: stdio-common/../sysdeps/unix/siglist.c:56
+#: sysdeps/unix/sysv/linux/siglist.h:46
 msgid "Profiling timer expired"
-msgstr "Profileringstiden tog slut"
+msgstr "Profileringsklocka"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:678
 msgid "Protocol driver not attached"
@@ -1136,8 +1198,10 @@ msgstr "Protokollet st
 msgid "Protocol wrong type for socket"
 msgstr "Fel protokolltyp för uttag (socket)"
 
+#: stdio-common/../sysdeps/unix/siglist.c:32
+#: sysdeps/unix/sysv/linux/siglist.h:24
 msgid "Quit"
-msgstr "Sluta"
+msgstr "Lämnad"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:742
 msgid "RFS specific error"
@@ -1148,7 +1212,7 @@ msgstr "RFS-specifikt fel"
 msgid "RPC bad procedure for program"
 msgstr "RPC dÃ¥lig procedur för program"
 
-#: nis/ypclnt.c:635
+#: nis/ypclnt.c:693
 msgid "RPC failure on NIS operation"
 msgstr "RPC-fel vid NIS-operation"
 
@@ -1214,7 +1278,7 @@ msgstr "RPC: Programmet otillg
 
 #: sunrpc/clnt_perr.c:183
 msgid "RPC: Program/version mismatch"
-msgstr "RPC: Program/version-inkompabilitet"
+msgstr "RPC: Program/version-inkompatibilitet"
 
 #: sunrpc/clnt_perr.c:189
 msgid "RPC: Remote system error"
@@ -1257,7 +1321,7 @@ msgstr "RTLD_NEXT anv
 msgid "Read-only file system"
 msgstr "Filsystemet endast läsbart"
 
-#: posix/regex.c:955
+#: posix/regex.c:969
 msgid "Regular expression too big"
 msgstr "Reguljärt uttryck för stort"
 
@@ -1274,11 +1338,13 @@ msgid "Remove password or make file unreadable by others."
 msgstr "Ta bort lösenord eller gör filen oläsbar för andra"
 
 #: catgets/gencat.c:224 db/makedb.c:227 locale/programs/locale.c:257
-#: locale/programs/localedef.c:408
-msgid "Report bugs to <bug-glibc@prep.ai.mit.edu>.\n"
-msgstr "Rapportera fel till <bug-glibc@prep.ai.mit.edu>.\n"
+#: locale/programs/localedef.c:412
+msgid "Report bugs using the `glibcbug' script to <bugs@gnu.ai.mit.edu>.\n"
+msgstr ""
+"Rapportera fel med programmet \"glibcbug\" till <bug-glibc@prep.ai.mit.edu>.\n"
+"Rapportera fel pÃ¥ Ã¶versättningen till <sv@li.org>.\n"
 
-#: nis/ypclnt.c:633
+#: nis/ypclnt.c:691
 msgid "Request arguments bad"
 msgstr "Argument för förfrÃ¥gan felaktiga"
 
@@ -1288,7 +1354,7 @@ msgstr "Resolver-fel 0 (inget fel)"
 
 #: resolv/herror.c:117
 msgid "Resolver internal error"
-msgstr "Internt fel i namnlösare"
+msgstr "Internt fel i namnlösare (resolver)"
 
 #. TRANS Deadlock avoided; allocating a system resource would have resulted in a
 #. TRANS deadlock situation.  The system does not guarantee that it will notice
@@ -1298,6 +1364,10 @@ msgstr "Internt fel i namnl
 msgid "Resource deadlock avoided"
 msgstr "Resursdödläge undveks"
 
+#: stdio-common/../sysdeps/unix/siglist.c:58
+msgid "Resource lost"
+msgstr "Förlorad resurs"
+
 #. TRANS Resource temporarily unavailable; the call might work if you try again
 #. TRANS later.  The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
 #. TRANS they are always the same in the GNU C library.
@@ -1331,8 +1401,10 @@ msgstr "Resursd
 msgid "Resource temporarily unavailable"
 msgstr "Resursen tillfälligt otillgänglig"
 
+#: stdio-common/../sysdeps/unix/siglist.c:40
+#: sysdeps/unix/sysv/linux/siglist.h:31
 msgid "Segmentation fault"
-msgstr "Minnessegmentsfel"
+msgstr "Segmenteringsfel"
 
 #: sunrpc/clnt_perr.c:280
 msgid "Server rejected credential"
@@ -1342,6 +1414,10 @@ msgstr "Betj
 msgid "Server rejected verifier"
 msgstr "Betjänt förkastade verifierare"
 
+#: stdio-common/../sysdeps/unix/siglist.c:29
+msgid "Signal 0"
+msgstr "Signal 0"
+
 #. TRANS A file that isn't a socket was specified when a socket is required.
 #: stdio-common/../sysdeps/gnu/errlist.c:299
 msgid "Socket operation on non-socket"
@@ -1361,6 +1437,10 @@ msgstr "Mjukvara orsakade f
 msgid "Srmount error"
 msgstr "Srmount-fel"
 
+#: sysdeps/unix/sysv/linux/siglist.h:59
+msgid "Stack fault"
+msgstr "Stackfel"
+
 #. TRANS Stale NFS file handle.  This indicates an internal confusion in the NFS
 #. TRANS system which is due to file system rearrangements on the server host.
 #. TRANS Repairing this condition usually requires unmounting and remounting
@@ -1369,17 +1449,25 @@ msgstr "Srmount-fel"
 msgid "Stale NFS file handle"
 msgstr "Förlegad NFS-filhandtag"
 
+#: stdio-common/../sysdeps/unix/siglist.c:47
+#: sysdeps/unix/sysv/linux/siglist.h:37
 msgid "Stopped"
 msgstr "Stoppad"
 
+#: stdio-common/../sysdeps/unix/siglist.c:46
+#: sysdeps/unix/sysv/linux/siglist.h:36
 msgid "Stopped (signal)"
 msgstr "Stoppad (signal)"
 
+#: stdio-common/../sysdeps/unix/siglist.c:50
+#: sysdeps/unix/sysv/linux/siglist.h:40
 msgid "Stopped (tty input)"
-msgstr "Stoppad (tty-läsning)"
+msgstr "Stoppad (terminalläsning)"
 
+#: stdio-common/../sysdeps/unix/siglist.c:51
+#: sysdeps/unix/sysv/linux/siglist.h:41
 msgid "Stopped (tty output)"
-msgstr "Stoppad (tty-skrivning)"
+msgstr "Stoppad (terminalskrivning)"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:778
 msgid "Streams pipe error"
@@ -1389,17 +1477,19 @@ msgstr "Streams-r
 msgid "Structure needs cleaning"
 msgstr "Strukturen behöver städas"
 
-#: nis/ypclnt.c:631 nis/ypclnt.c:705 posix/regex.c:940
+#: nis/ypclnt.c:689 nis/ypclnt.c:763 posix/regex.c:954
 #: stdio-common/../sysdeps/gnu/errlist.c:7
 msgid "Success"
 msgstr "Lyckat"
 
-#: nis/ypclnt.c:711
+#: nis/ypclnt.c:769
 msgid "System resource allocation failure"
 msgstr "Allokeringsfel för systemresurs"
 
+#: stdio-common/../sysdeps/unix/siglist.c:44
+#: sysdeps/unix/sysv/linux/siglist.h:34
 msgid "Terminated"
-msgstr "Terminerad"
+msgstr "Avslutad"
 
 #. TRANS An attempt to execute a file that is currently open for writing, or
 #. TRANS write to a file that is currently being executed.  Often using a
@@ -1412,7 +1502,7 @@ msgstr "Kodfil upptagen"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:650
 msgid "Timer expired"
-msgstr "Tidtagning avslutad"
+msgstr "Klockan ringde"
 
 #. TRANS Too many levels of symbolic links were encountered in looking up a file name.
 #. TRANS This often indicates a cycle of symbolic links.
@@ -1463,12 +1553,17 @@ msgstr "F
 msgid "Too many users"
 msgstr "För mÃ¥nga användare"
 
+#: stdio-common/../sysdeps/unix/siglist.c:34
+msgid "Trace/BPT trap"
+msgstr "SpÃ¥rning/BPT-fälla"
+
+#: sysdeps/unix/sysv/linux/siglist.h:26
 msgid "Trace/breakpoint trap"
-msgstr "SpÃ¥rning/brytpunktsfälla"
+msgstr "SpÃ¥rningsfälla"
 
-#: posix/regex.c:945
+#: posix/regex.c:959
 msgid "Trailing backslash"
-msgstr "Felplacerat omvänt snedstreck"
+msgstr "Avslutande omvänt snedstreck"
 
 #. TRANS In the GNU system, opening a file returns this error when the file is
 #. TRANS translated by a program and the translator program dies while starting
@@ -1492,12 +1587,12 @@ msgid "Transport endpoint is not connected"
 msgstr "Transportslutpunkten Ã¤r inte förbunden"
 
 #: catgets/gencat.c:208 db/makedb.c:209 locale/programs/locale.c:241
-#: locale/programs/localedef.c:389
+#: locale/programs/localedef.c:393
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Försök med \"%s --help\" för mer information\n"
 
-#: inet/rcmd.c:136
+#: inet/rcmd.c:137
 #, c-format
 msgid "Trying %s...\n"
 msgstr "Provar %s...\n"
@@ -1507,7 +1602,7 @@ msgstr "Provar %s...\n"
 msgid "Unknown .netrc keyword %s"
 msgstr "Okänt .netrc-nyckelord %s"
 
-#: nis/ypclnt.c:665
+#: nis/ypclnt.c:723
 msgid "Unknown NIS error code"
 msgstr "Okänd NIS-felkod"
 
@@ -1522,38 +1617,38 @@ msgstr "Ok
 
 #: resolv/herror.c:120
 msgid "Unknown resolver error"
-msgstr "Okänt fel hos namnlösare"
+msgstr "Okänt fel hos namnlösare (resolver)"
 
 #: resolv/herror.c:76
 msgid "Unknown server error"
-msgstr "Okänt fel hos tjänsteställe"
+msgstr "Okänt fel hos betjänt"
 
 #: string/strsignal.c:41
 #, c-format
 msgid "Unknown signal %d"
 msgstr "Okänd signal %d"
 
-#: misc/error.c:95
+#: misc/error.c:100
 msgid "Unknown system error"
 msgstr "Okänt systemfel"
 
-#: nis/ypclnt.c:713
+#: nis/ypclnt.c:771
 msgid "Unknown ypbind error"
 msgstr "Okänt ypbind-fel"
 
-#: posix/regex.c:948
+#: posix/regex.c:962
 msgid "Unmatched ( or \\("
 msgstr "Obalanserade ( eller \\("
 
-#: posix/regex.c:956
+#: posix/regex.c:970
 msgid "Unmatched ) or \\)"
 msgstr "Obalanserade ) eller \\)"
 
-#: posix/regex.c:947
+#: posix/regex.c:961
 msgid "Unmatched [ or [^"
 msgstr "Obalanserade [ eller [^"
 
-#: posix/regex.c:949
+#: posix/regex.c:963
 msgid "Unmatched \\{"
 msgstr "Obalanserad \\{"
 
@@ -1562,6 +1657,8 @@ msgstr "Obalanserad \\{"
 msgid "Unrecognized variable `%s'"
 msgstr "Okänd variabel \"%s\""
 
+#: stdio-common/../sysdeps/unix/siglist.c:45
+#: sysdeps/unix/sysv/linux/siglist.h:35
 msgid "Urgent I/O condition"
 msgstr "Viktigt I/O-tillstÃ¥nd"
 
@@ -1619,7 +1716,7 @@ msgstr ""
 "  -V, --version       visa versionsinformation och avsluta\n"
 "Om INFIL Ã¤r -, läs indata frÃ¥n standard in\n"
 
-#: locale/programs/localedef.c:393
+#: locale/programs/localedef.c:397
 #, c-format
 msgid ""
 "Usage: %s [OPTION]... name\n"
@@ -1638,8 +1735,7 @@ msgid ""
 "                       locale files  : %s\n"
 msgstr ""
 "Användning: %s [FLAGGA]... namn\n"
-"Obligatoriska argument till lÃ¥nga flaggor Ã¤r obligatoriska Ã¤ven för de "
-"korta.\n"
+"Obligatoriska argument till lÃ¥nga flaggor Ã¤r obligatoriska Ã¤ven för de korta.\n"
 "  -c, --force               skapa resultatfil Ã¤ven om varningar gavs\n"
 "  -h, --help                visa denna hjälptext och avsluta\n"
 "  -f, --charmap=FIL         symboliska teckennamn definieras i FIL\n"
@@ -1651,7 +1747,7 @@ msgstr ""
 "      --posix               följ POSIX strikt\n"
 "\n"
 "Systemets katalog för teckenuppsättningar: %s\n"
-"                      meddelandekataloger: %s\n"
+"                               lokalfiler: %s\n"
 
 #: locale/programs/locale.c:245
 #, c-format
@@ -1688,9 +1784,13 @@ msgstr "Anv
 msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"
 msgstr "Användning: rpcinfo [ -n portnr ] -u värd prognr [ versnr ]\n"
 
+#: stdio-common/../sysdeps/unix/siglist.c:59
+#: sysdeps/unix/sysv/linux/siglist.h:48
 msgid "User defined signal 1"
 msgstr "Användarsignal 1"
 
+#: stdio-common/../sysdeps/unix/siglist.c:60
+#: sysdeps/unix/sysv/linux/siglist.h:49
 msgid "User defined signal 2"
 msgstr "Användarsignal 2"
 
@@ -1698,36 +1798,40 @@ msgstr "Anv
 msgid "Value too large for defined data type"
 msgstr "Värdet för stort för definierad datatyp"
 
+#: stdio-common/../sysdeps/unix/siglist.c:55
+#: sysdeps/unix/sysv/linux/siglist.h:45
 msgid "Virtual timer expired"
-msgstr "Virtuell tidtagare löpte ut"
+msgstr "Alarmklocka - virtuell tid"
 
-#: time/zic.c:1844
+#: time/zic.c:1871
 msgid "Wild result from command execution"
 msgstr "Vilt resultat frÃ¥n kommandokörning"
 
+#: stdio-common/../sysdeps/unix/siglist.c:57
+#: sysdeps/unix/sysv/linux/siglist.h:47
 msgid "Window changed"
-msgstr "Fönstret Ã¤ndrades"
+msgstr "Ändrat fönster"
 
 #: catgets/gencat.c:174 db/makedb.c:125 locale/programs/locale.c:192
-#: locale/programs/localedef.c:182
+#: locale/programs/localedef.c:185
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Skriven av %s.\n"
 
-#: nis/ypclnt.c:146
+#: nis/ypclnt.c:142
 msgid "YPBINDPROC_DOMAIN: Internal error\n"
 msgstr "YPBINDPROC_DOMAIN: Internt fel\n"
 
-#: nis/ypclnt.c:150
+#: nis/ypclnt.c:146
 #, c-format
 msgid "YPBINDPROC_DOMAIN: No server for domain %s\n"
 msgstr "YPBINDPROC_DOMAIN: Ingen betjänt för domän %s\n"
 
-#: nis/ypclnt.c:154
+#: nis/ypclnt.c:150
 msgid "YPBINDPROC_DOMAIN: Resource allocation failure\n"
-msgstr "YPBINDPROC_DOMAIN: Allokeringsfel för resurs\n"
+msgstr "YPBINDPROC_DOMAIN: Resursallokeringsfel\n"
 
-#: nis/ypclnt.c:158
+#: nis/ypclnt.c:154
 msgid "YPBINDPROC_DOMAIN: Unknown error\n"
 msgstr "YPBINDPROC_DOMAIN: Okänt fel\n"
 
@@ -1736,31 +1840,31 @@ msgstr "YPBINDPROC_DOMAIN: Ok
 msgid "You really blew it this time"
 msgstr "Du strulade till det den här gÃ¥ngen"
 
-#: time/zic.c:1050
+#: time/zic.c:1048
 msgid "Zone continuation line end time is not after end time of previous line"
 msgstr ""
 "Zon-fortsättningsradens sluttid Ã¤r inte efter sluttiden pÃ¥ föregÃ¥ende rad"
 
-#: locale/programs/charmap.c:397 locale/programs/locfile.c:341
+#: locale/programs/charmap.c:397 locale/programs/locfile.c:363
 #, c-format
 msgid "`%1$s' definition does not end with `END %1$s'"
 msgstr "\"%1$s\" definition slutar ej med \"END %1$s\""
 
-#: locale/programs/ld-monetary.c:358 locale/programs/ld-numeric.c:190
+#: locale/programs/ld-monetary.c:359 locale/programs/ld-numeric.c:190
 #, c-format
 msgid "`-1' must be last entry in `%s' field in `%s' category"
 msgstr "\"-1\" mÃ¥ste vara sista post i fält \"%s\" i kategori \"%s\""
 
-#: locale/programs/ld-collate.c:1652
+#: locale/programs/ld-collate.c:1655
 msgid "`...' must only be used in `...' and `UNDEFINED' entries"
 msgstr "\"...\" fÃ¥r endast användas för post \"...\" och post \"UNDEFINED\""
 
-#: locale/programs/locfile.c:538
+#: locale/programs/locfile.c:560
 msgid "`from' expected after first argument to `collating-element'"
 msgstr ""
 "\"from\" förväntades efter första argumentet till \"collating-element\""
 
-#: locale/programs/ld-collate.c:1109
+#: locale/programs/ld-collate.c:1112
 msgid ""
 "`from' string in collation element declaration contains unknown character"
 msgstr ""
@@ -1772,36 +1876,36 @@ msgstr ""
 msgid "argument to <%s> must be a single character"
 msgstr "argumentet till <%s> mÃ¥ste vara ett enskilt tecken"
 
-#: locale/programs/locfile.c:215
+#: locale/programs/locfile.c:237
 #, c-format
 msgid "argument to `%s' must be a single character"
 msgstr "argumentet till \"%s\" mÃ¥ste vara ett enskilt tecken"
 
-#: sunrpc/auth_unix.c:322
+#: sunrpc/auth_unix.c:323
 msgid "auth_none.c - Fatal marshalling problem"
 msgstr "auth_none.c - Fatalt kodningsproblem"
 
-#: inet/rcmd.c:360
+#: inet/rcmd.c:365
 msgid "bad .rhosts owner"
-msgstr "dÃ¥lig .rhosts-ägare"
+msgstr "olämplig Ã¤gare av .rhosts"
 
-#: locale/programs/charmap.c:212 locale/programs/locfile.c:209
+#: locale/programs/charmap.c:212 locale/programs/locfile.c:231
 msgid "bad argument"
 msgstr "dÃ¥ligt argument"
 
-#: time/zic.c:1172
+#: time/zic.c:1170
 msgid "blank FROM field on Link line"
 msgstr "tomt \"FROM\"-fält pÃ¥ \"Link\"-rad"
 
-#: time/zic.c:1176
+#: time/zic.c:1174
 msgid "blank TO field on Link line"
 msgstr "tomt \"TO\"-fält pÃ¥ \"Link\"-rad"
 
-#: malloc/mcheck.c:189
+#: malloc/mcheck.c:191
 msgid "block freed twice"
 msgstr "block avallokerat tvÃ¥ gÃ¥nger"
 
-#: malloc/mcheck.c:192
+#: malloc/mcheck.c:194
 msgid "bogus mcheck_status, library is buggy"
 msgstr "felaktig mcheck_status, biblioteket Ã¤r felaktigt"
 
@@ -1817,31 +1921,31 @@ msgstr "uts
 msgid "cache_set: victim not found"
 msgstr "cache_set: offer hittades ej"
 
-#: time/zic.c:1685
-msgid "can't determine time zone abbrevation to use just after until time"
+#: time/zic.c:1698
+msgid "can't determine time zone abbreviation to use just after until time"
 msgstr ""
 "kan inte avgöra tidszonsförkortning att använda just efter \"until\"-tid"
 
 #: sunrpc/svc_simple.c:64
 #, c-format
 msgid "can't reassign procedure number %d\n"
-msgstr "kan inte Ã¥tertilldela procedurnummer %d\n"
+msgstr "kan inte Ã¤ndra procedurnummer %d\n"
 
-#: locale/programs/localedef.c:287
+#: locale/programs/localedef.c:291
 #, c-format
 msgid "cannot `stat' locale file `%s'"
 msgstr "kan inte ta status pÃ¥ lokalfil \"%s\""
 
-#: locale/programs/ld-collate.c:1314
+#: locale/programs/ld-collate.c:1317
 #, c-format
 msgid "cannot insert collation element `%.*s'"
 msgstr "kan inte sätta in kollationselement \"%.*s\""
 
-#: locale/programs/ld-collate.c:1493 locale/programs/ld-collate.c:1498
+#: locale/programs/ld-collate.c:1496 locale/programs/ld-collate.c:1501
 msgid "cannot insert into result table"
 msgstr "kan inte sätta in i resultattabell"
 
-#: locale/programs/ld-collate.c:1166 locale/programs/ld-collate.c:1208
+#: locale/programs/ld-collate.c:1169 locale/programs/ld-collate.c:1211
 #, c-format
 msgid "cannot insert new collating symbol definition: %s"
 msgstr "kan inte sätta in ny kollationssymbolsdefinition: %s"
@@ -1851,84 +1955,84 @@ msgstr "kan inte s
 msgid "cannot open database file `%s': %s"
 msgstr "kan inte Ã¶ppna databasfil \"%s\": %s"
 
-#: catgets/gencat.c:259 db/makedb.c:180
+#: catgets/gencat.c:260 db/makedb.c:180
 #, c-format
 msgid "cannot open input file `%s'"
 msgstr "kan inte Ã¶ppna infil \"%s\""
 
-#: locale/programs/localedef.c:221
+#: locale/programs/localedef.c:224
 #, c-format
 msgid "cannot open locale definition file `%s'"
 msgstr "kan inte Ã¶ppna lokaldefinitionsfil \"%s\""
 
-#: catgets/gencat.c:764 catgets/gencat.c:805 db/makedb.c:189
+#: catgets/gencat.c:765 catgets/gencat.c:806 db/makedb.c:189
 #, c-format
 msgid "cannot open output file `%s'"
 msgstr "kan inte Ã¶ppna utfil \"%s\""
 
-#: locale/programs/locfile.c:986
+#: locale/programs/locfile.c:1008
 #, c-format
 msgid "cannot open output file `%s' for category `%s'"
 msgstr "kan inte Ã¶ppna utfil \"%s\" för kategori \"%s\""
 
-#: locale/programs/ld-collate.c:1360
+#: locale/programs/ld-collate.c:1363
 msgid "cannot process order specification"
 msgstr "kan inte bearbeta sorteringsspecifikation"
 
-#: locale/programs/locale.c:303
+#: locale/programs/locale.c:304
 #, c-format
 msgid "cannot read character map directory `%s'"
 msgstr "kan inte läsa teckenuppsättningskatalog \"%s\""
 
-#: locale/programs/locale.c:278
+#: locale/programs/locale.c:279
 #, c-format
 msgid "cannot read locale directory `%s'"
 msgstr "kan inte läsa lokalkatalog \"%s\""
 
-#: locale/programs/localedef.c:309
+#: locale/programs/localedef.c:313
 #, c-format
 msgid "cannot read locale file `%s'"
 msgstr "kan inte läsa lokalfil \"%s\""
 
-#: locale/programs/localedef.c:334
+#: locale/programs/localedef.c:338
 #, c-format
 msgid "cannot write output files to `%s'"
 msgstr "kan inte skriva utfiler till \"%s\""
 
-#: locale/programs/localedef.c:377
+#: locale/programs/localedef.c:381
 msgid "category data requested more than once: should not happen"
 msgstr "kategoridata begärd mer Ã¤n en gÃ¥ng: borde inte inträffa"
 
-#: locale/programs/ld-ctype.c:265
+#: locale/programs/ld-ctype.c:266
 #, c-format
 msgid "character %s'%s' in class `%s' must be in class `%s'"
 msgstr "tecknet %s\"%s\" i klass \"%s\" mÃ¥ste vara i klass \"%s\""
 
-#: locale/programs/ld-ctype.c:289
+#: locale/programs/ld-ctype.c:291
 #, c-format
 msgid "character %s'%s' in class `%s' must not be in class `%s'"
 msgstr "tecknet %s\"%s\" i klass \"%s\" kan inte vara i klass \"%s\""
 
-#: locale/programs/ld-ctype.c:310
+#: locale/programs/ld-ctype.c:313
 msgid "character <SP> not defined in character map"
 msgstr "tecknet <SP> inte definierat i teckenuppsättning"
 
-#: locale/programs/ld-ctype.c:939 locale/programs/ld-ctype.c:1002
-#: locale/programs/ld-ctype.c:1010 locale/programs/ld-ctype.c:1018
-#: locale/programs/ld-ctype.c:1026 locale/programs/ld-ctype.c:1034
-#: locale/programs/ld-ctype.c:1042 locale/programs/ld-ctype.c:1068
-#: locale/programs/ld-ctype.c:1076 locale/programs/ld-ctype.c:1114
-#: locale/programs/ld-ctype.c:1141 locale/programs/ld-ctype.c:1152
+#: locale/programs/ld-ctype.c:944 locale/programs/ld-ctype.c:1007
+#: locale/programs/ld-ctype.c:1015 locale/programs/ld-ctype.c:1023
+#: locale/programs/ld-ctype.c:1031 locale/programs/ld-ctype.c:1039
+#: locale/programs/ld-ctype.c:1047 locale/programs/ld-ctype.c:1073
+#: locale/programs/ld-ctype.c:1081 locale/programs/ld-ctype.c:1119
+#: locale/programs/ld-ctype.c:1146 locale/programs/ld-ctype.c:1157
 #, c-format
 msgid "character `%s' not defined while needed as default value"
 msgstr "tecknet \"%s\" inte definierat men behövs som standardvärde"
 
-#: locale/programs/ld-ctype.c:801
+#: locale/programs/ld-ctype.c:806
 #, c-format
 msgid "character class `%s' already defined"
 msgstr "teckenklass \"%s\" redan definierad"
 
-#: locale/programs/ld-ctype.c:833
+#: locale/programs/ld-ctype.c:838
 #, c-format
 msgid "character map `%s' already defined"
 msgstr "teckenuppsättning \"%s\" redan definierad"
@@ -1936,28 +2040,28 @@ msgstr "teckenupps
 #: locale/programs/charmap.c:76
 #, c-format
 msgid "character map file `%s' not found"
-msgstr "teckenuppsättningsfil \"%s\" inte funnen"
+msgstr "teckenuppsättningsfil \"%s\" finns inte"
 
 #: sunrpc/clnt_raw.c:106
 msgid "clnt_raw.c - Fatal header serialization error."
-msgstr "clnt_raw.c - Fatalt fel vid serialisation."
+msgstr "clnt_raw.c - Fatalt fel vid serialisering"
 
-#: locale/programs/ld-collate.c:1329
+#: locale/programs/ld-collate.c:1332
 #, c-format
 msgid "collation element `%.*s' appears more than once: ignore line"
 msgstr "kollationselement \"%.*s\" finns mer Ã¤n en gÃ¥ng: rad ignorerad"
 
-#: locale/programs/ld-collate.c:1347
+#: locale/programs/ld-collate.c:1350
 #, c-format
 msgid "collation symbol `%.*s' appears more than once: ignore line"
 msgstr "kollationssymbol \"%.*s\" finns mer Ã¤n en gÃ¥ng: rad ignorerad"
 
-#: locale/programs/locfile.c:522
+#: locale/programs/locfile.c:544
 #, c-format
 msgid "collation symbol expected after `%s'"
 msgstr "kollationssymbol förväntades efter \"%s\""
 
-#: inet/rcmd.c:129
+#: inet/rcmd.c:130
 #, c-format
 msgid "connect to address %s: "
 msgstr "koppla till adress %s: "
@@ -1981,9 +2085,7 @@ msgstr "standardteckenupps
 msgid ""
 "direction flag in string %d in `era' field in category `%s' is not '+' nor "
 "'-'"
-msgstr ""
-"riktningsflagga i sträng %d i \"era\"-fält i kategori \"%s\" Ã¤r inte \"+\" "
-"eller \"-\""
+msgstr "riktningsflagga i sträng %d i \"era\"-fält i kategori \"%s\" Ã¤r varken \"+\" eller \"-\""
 
 #: locale/programs/ld-time.c:164
 #, c-format
@@ -1999,37 +2101,37 @@ msgstr ""
 msgid "duplicate character name `%s'"
 msgstr "duplicerat teckennamn \"%s\""
 
-#: locale/programs/ld-collate.c:1141
+#: locale/programs/ld-collate.c:1144
 msgid "duplicate collating element definition"
 msgstr "dubbla definitioner av kollationselement"
 
-#: locale/programs/ld-collate.c:1287
+#: locale/programs/ld-collate.c:1290
 #, c-format
 msgid "duplicate definition for character `%.*s'"
 msgstr "dubbla definitioner för tecken \"%.*s\""
 
-#: db/makedb.c:310
+#: db/makedb.c:311
 msgid "duplicate key"
 msgstr "duplicerad nyckel"
 
-#: catgets/gencat.c:378
+#: catgets/gencat.c:379
 msgid "duplicate set definition"
-msgstr "duplicerad definition av uppsättning"
+msgstr "duplicerad definition av mängd"
 
-#: time/zic.c:965
+#: time/zic.c:963
 #, c-format
 msgid "duplicate zone name %s (file \"%s\", line %d)"
 msgstr "duplicerat zonnamn %s (fil \"%s\", rad %d)"
 
-#: catgets/gencat.c:541
+#: catgets/gencat.c:542
 msgid "duplicated message identifier"
 msgstr "duplicerad meddelandeidentifierare"
 
-#: catgets/gencat.c:514
+#: catgets/gencat.c:515
 msgid "duplicated message number"
 msgstr "duplicerat meddelandenummer"
 
-#: locale/programs/ld-collate.c:1696
+#: locale/programs/ld-collate.c:1699
 msgid "empty weight name: line ignored"
 msgstr "tomt viktnamn: rad ignorerad"
 
@@ -2049,42 +2151,46 @@ msgstr "enablecache: kunde inte allokera cache-data"
 msgid "enablecache: could not allocate cache fifo"
 msgstr "enablecache: kunde inte allokera cache-fifo"
 
-#: locale/programs/ld-collate.c:1419
+#: locale/programs/ld-collate.c:1422
 msgid "end point of ellipsis range is bigger then start"
 msgstr "slutpunkt för ... Ã¤r större Ã¤n startvärdet"
 
-#: locale/programs/ld-collate.c:1149
+#: locale/programs/ld-collate.c:1152
 msgid "error while inserting collation element into hash table"
 msgstr "fel vid insättning av kollationselement i hashtabellen"
 
-#: locale/programs/ld-collate.c:1161
+#: locale/programs/ld-collate.c:1164
 msgid "error while inserting to hash table"
-msgstr "fel vis insättning till hashtabellen"
+msgstr "fel vid insättning i hashtabellen"
 
-#: locale/programs/locfile.c:465
+#: locale/programs/locfile.c:487
 msgid "expect string argument for `copy'"
 msgstr "förväntar strängargument för \"copy\""
 
-#: time/zic.c:856
+#: time/zic.c:854
 msgid "expected continuation line not found"
 msgstr "förväntad fortsättningsrad ej funnen"
 
-#: locale/programs/locfile.c:1010
+#: locale/programs/locfile.c:1032
 #, c-format
 msgid "failure while writing data for category `%s'"
 msgstr "misslyckades skriva data för kategori \"%s\""
 
-#: locale/programs/ld-monetary.c:154 locale/programs/ld-numeric.c:95
+#: nis/ypclnt.c:187
+msgid "fcntl: F_SETFD"
+msgstr "fcntl_ F_SETFD"
+
+#: locale/programs/ld-monetary.c:155 locale/programs/ld-numeric.c:95
 #, c-format
 msgid "field `%s' in category `%s' not defined"
-msgstr "fält \"%s\" i kategori \"%s\" inte definierad"
+msgstr "fält \"%s\" i kategori \"%s\" inte definierat"
 
 #: locale/programs/ld-messages.c:81 locale/programs/ld-messages.c:102
 #, c-format
 msgid "field `%s' in category `%s' undefined"
-msgstr "fält \"%s\" i kategori \"%s\" odefinierad"
+msgstr "fält \"%s\" i kategori \"%s\" odefinierat"
 
-#: locale/programs/locfile.c:547
+#: locale/programs/locfile.c:569
 msgid "from-value of `collating-element' must be a string"
 msgstr "frÃ¥nvärde för \"collating-element\" mÃ¥ste vara en sträng"
 
@@ -2093,7 +2199,7 @@ msgid "garbage at end of character code specification"
 msgstr "skräp i slutet av teckenkodsspecifikation"
 
 #: locale/programs/linereader.c:214
-msgid "garbage at end of digit"
+msgid "garbage at end of number"
 msgstr "skräp i slutet av nummer"
 
 #: locale/programs/ld-time.c:183
@@ -2110,7 +2216,7 @@ msgid ""
 msgstr ""
 "skräp i slutet av startdatum i sträng %d i \"era\"-fält i kategori \"%s\""
 
-#: locale/programs/ld-time.c:310
+#: locale/programs/ld-time.c:311
 #, c-format
 msgid ""
 "garbage at end of stopping date in string %d in `era' field in category `%s'"
@@ -2121,19 +2227,19 @@ msgstr ""
 msgid "get_myaddress: ioctl (get interface configuration)"
 msgstr "get_myaddress: ioctl (hämta gränssnittskonfiguration)"
 
-#: time/zic.c:1149
+#: time/zic.c:1147
 msgid "illegal CORRECTION field on Leap line"
 msgstr "otillÃ¥tet \"CORRECTION\"-fält pÃ¥ \"Leap\"-rad"
 
-#: time/zic.c:1153
+#: time/zic.c:1151
 msgid "illegal Rolling/Stationary field on Leap line"
 msgstr "otillÃ¥tet \"Rolling/Stationary\"-fält pÃ¥ \"Leap\"-rad"
 
-#: locale/programs/ld-collate.c:1767
+#: locale/programs/ld-collate.c:1770
 msgid "illegal character constant in string"
 msgstr "otillÃ¥ten teckenkonstant i sträng"
 
-#: locale/programs/ld-collate.c:1116
+#: locale/programs/ld-collate.c:1119
 msgid "illegal collation element"
 msgstr "otillÃ¥tet kollationselement"
 
@@ -2151,7 +2257,7 @@ msgstr "otill
 
 #: locale/programs/charset.c:101
 msgid "illegal names for character range"
-msgstr "otillÃ¥tna namn för teckenomfÃ¥ng"
+msgstr "otillÃ¥tna namn för teckenintervall"
 
 #: locale/programs/ld-time.c:176
 #, c-format
@@ -2159,26 +2265,26 @@ msgid "illegal number for offset in string %d in `era' field in category `%s'"
 msgstr ""
 "otillÃ¥tet tal för tilläggsvärde i sträng %d i \"era\"-fält i kategori \"%s\""
 
-#: catgets/gencat.c:351 catgets/gencat.c:428
+#: catgets/gencat.c:352 catgets/gencat.c:429
 msgid "illegal set number"
-msgstr "otillÃ¥tet tal för uppsättning"
+msgstr "otillÃ¥tet tal för mängd"
 
 #: locale/programs/ld-time.c:230
 #, c-format
 msgid "illegal starting date in string %d in `era' field in category `%s'"
 msgstr "otillÃ¥tet startdatum i sträng %d i \"era\"-fält i kategori \"%s\""
 
-#: locale/programs/ld-time.c:302
+#: locale/programs/ld-time.c:303
 #, c-format
 msgid "illegal stopping date in string %d in `era' field in category `%s'"
 msgstr "otillÃ¥tet slutdatum i sträng %d i \"era\"-fält i kategori \"%s\""
 
-#: locale/programs/ld-ctype.c:807
+#: locale/programs/ld-ctype.c:812
 #, c-format
 msgid "implementation limit: no more than %d character classes allowed"
-msgstr "implementationsbegränsning: inte fler Ã¤n %d teckenklasser tillÃ¥tet"
+msgstr "implementationsbegränsning: inte fler Ã¤n %d teckenklasser tillÃ¥tna"
 
-#: locale/programs/ld-ctype.c:839
+#: locale/programs/ld-ctype.c:844
 #, c-format
 msgid "implementation limit: no more than %d character maps allowed"
 msgstr ""
@@ -2188,60 +2294,60 @@ msgstr ""
 msgid "incorrectly formatted file"
 msgstr "felaktigt formaterad rad"
 
-#: time/zic.c:814
+#: time/zic.c:811
 msgid "input line of unknown type"
 msgstr "inrad av okänd typ"
 
-#: time/zic.c:1733
+#: time/zic.c:1760
 msgid "internal error - addtype called with bad isdst"
 msgstr "internt fel - addtype anropad med felaktig isdst"
 
-#: time/zic.c:1741
+#: time/zic.c:1768
 msgid "internal error - addtype called with bad ttisgmt"
 msgstr "internt fel - addtype anropad med felaktig ttisgmt"
 
-#: time/zic.c:1737
+#: time/zic.c:1764
 msgid "internal error - addtype called with bad ttisstd"
 msgstr "internt fel - addtype anropad med felaktig ttisstd"
 
-#: locale/programs/ld-ctype.c:301
+#: locale/programs/ld-ctype.c:304
 #, c-format
 msgid "internal error in %s, line %u"
 msgstr "internt fel i %s, rad %u"
 
-#: time/zic.c:1021
+#: time/zic.c:1019
 msgid "invalid GMT offset"
-msgstr "ogiltigt tilläggsvärde till GMT"
+msgstr "ogiltigt GMT-tillägg"
 
-#: time/zic.c:1024
+#: time/zic.c:1022
 msgid "invalid abbreviation format"
 msgstr "ogiltigt förkortningsformat"
 
-#: time/zic.c:1114 time/zic.c:1313 time/zic.c:1327
+#: time/zic.c:1112 time/zic.c:1313 time/zic.c:1327
 msgid "invalid day of month"
 msgstr "ogiltig dag i mÃ¥naden"
 
-#: time/zic.c:1272
+#: time/zic.c:1270
 msgid "invalid ending year"
 msgstr "ogiltigt slutÃ¥r"
 
-#: time/zic.c:1086
+#: time/zic.c:1084
 msgid "invalid leaping year"
 msgstr "ogiltigt skottÃ¥r"
 
-#: time/zic.c:1101 time/zic.c:1204
+#: time/zic.c:1099 time/zic.c:1202
 msgid "invalid month name"
 msgstr "ogiltigt mÃ¥nadsnamn"
 
-#: time/zic.c:920
+#: time/zic.c:918
 msgid "invalid saved time"
 msgstr "ogiltigt sparad tid"
 
-#: time/zic.c:1252
+#: time/zic.c:1250
 msgid "invalid starting year"
 msgstr "ogiltigt startÃ¥r"
 
-#: time/zic.c:1130 time/zic.c:1232
+#: time/zic.c:1128 time/zic.c:1230
 msgid "invalid time of day"
 msgstr "ogiltig tid pÃ¥ dagen"
 
@@ -2249,61 +2355,61 @@ msgstr "ogiltig tid p
 msgid "invalid weekday name"
 msgstr "ogiltigt veckodagsnamn"
 
-#: locale/programs/ld-collate.c:1412
+#: locale/programs/ld-collate.c:1415
 msgid "line after ellipsis must contain character definition"
 msgstr "rad efter ... mÃ¥ste innehÃ¥lla teckendefinition"
 
-#: locale/programs/ld-collate.c:1391
+#: locale/programs/ld-collate.c:1394
 msgid "line before ellipsis does not contain definition for character constant"
 msgstr "rad före ... innehÃ¥ller inte definition för teckenkonstant"
 
-#: time/zic.c:794
+#: time/zic.c:791
 msgid "line too long"
-msgstr "rad för lÃ¥ng"
+msgstr "för lÃ¥ng rad"
 
-#: locale/programs/localedef.c:281
+#: locale/programs/localedef.c:285
 #, c-format
 msgid "locale file `%s', used in `copy' statement, not found"
 msgstr "lokalfil \"%s\", använd i \"copy\", inte funnen"
 
-#: catgets/gencat.c:609
+#: catgets/gencat.c:610
 msgid "malformed line ignored"
 msgstr "felaktig rad ignorerad"
 
-#: malloc/mcheck.c:183
+#: malloc/mcheck.c:185
 msgid "memory clobbered before allocated block"
 msgstr "minnet förstört före allokerat block"
 
-#: malloc/mcheck.c:186
+#: malloc/mcheck.c:188
 msgid "memory clobbered past end of allocated block"
 msgstr "minnet förstört efter slutet pÃ¥ allokerat block"
 
 #: locale/programs/ld-collate.c:167 locale/programs/ld-collate.c:173
-#: locale/programs/ld-collate.c:177 locale/programs/ld-collate.c:1439
-#: locale/programs/ld-collate.c:1468 locale/programs/locfile.c:940
+#: locale/programs/ld-collate.c:177 locale/programs/ld-collate.c:1442
+#: locale/programs/ld-collate.c:1471 locale/programs/locfile.c:962
 #: locale/programs/xmalloc.c:68 posix/getconf.c:250
 msgid "memory exhausted"
 msgstr "minne slut"
 
-#: malloc/obstack.c:425
+#: malloc/obstack.c:462
 msgid "memory exhausted\n"
 msgstr "minnet slut\n"
 
-#: malloc/mcheck.c:180
+#: malloc/mcheck.c:182
 msgid "memory is consistent, library is buggy"
 msgstr "minnet Ã¤r konsistent, biblioteket Ã¤r felaktigt"
 
-#: locale/programs/ld-time.c:348
+#: locale/programs/ld-time.c:350
 #, c-format
 msgid "missing era format in string %d in `era' field in category `%s'"
 msgstr "eraformat i sträng %d i \"era\"-fält i kategori \"%s\" saknas"
 
-#: locale/programs/ld-time.c:337
+#: locale/programs/ld-time.c:339
 #, c-format
-msgid "missing era name in string %d in `era' fieldin category `%s'"
+msgid "missing era name in string %d in `era' field in category `%s'"
 msgstr "eranamn i sträng %d i \"era\"-fält i kategori \"%s\" saknas"
 
-#: time/zic.c:915
+#: time/zic.c:913
 msgid "nameless rule"
 msgstr "namnlös regel"
 
@@ -2317,19 +2423,19 @@ msgstr "aldrig registrerat prog %d\n"
 msgid "no correct regular expression for field `%s' in category `%s': %s"
 msgstr "felaktigt reguljärt uttryck för fält \"%s\" i kategori \"%s\": %s"
 
-#: time/zic.c:2059
+#: time/zic.c:2086
 msgid "no day in month matches rule"
 msgstr "ingen dag i mÃ¥naden matchar regeln"
 
-#: locale/programs/ld-collate.c:259
+#: locale/programs/ld-collate.c:260
 msgid "no definition of `UNDEFINED'"
 msgstr "ingen definition av \"UNDEFINED\""
 
-#: locale/programs/locfile.c:479
+#: locale/programs/locfile.c:501
 msgid "no other keyword shall be specified when `copy' is used"
 msgstr "inget annat nyckelord ska anges när \"copy\" används"
 
-#: locale/programs/localedef.c:340
+#: locale/programs/localedef.c:344
 msgid "no output file produced because warning were issued"
 msgstr "ingen utfil skapad pÃ¥ grund av varningar"
 
@@ -2352,7 +2458,7 @@ msgstr "ingen vikt definierad f
 msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
 msgstr "endast definition av \"WIDTH\" fÃ¥r följa definitionen av \"CHARMAP\""
 
-#: db/makedb.c:326
+#: db/makedb.c:327
 #, c-format
 msgid "problems while reading `%s'"
 msgstr "problem läsa \"%s\""
@@ -2371,27 +2477,27 @@ msgstr "program %lu version %lu 
 #: sunrpc/rpcinfo.c:466
 #, c-format
 msgid "program %lu version %lu ready and waiting\n"
-msgstr "program %lu version %lu klar och väntar\n"
+msgstr "program %lu version %lu berett och väntar\n"
 
-#: inet/rcmd.c:171
+#: inet/rcmd.c:172
 #, c-format
 msgid "rcmd: select (setting up stderr): %m\n"
-msgstr "rcmd: select (sätter upp standard error): %m\n"
+msgstr "rcmd: select (sätter upp standard fel): %m\n"
 
-#: inet/rcmd.c:103
+#: inet/rcmd.c:104
 msgid "rcmd: socket: All ports in use\n"
 msgstr "rcmd: uttag (socket): Alla portar används\n"
 
-#: inet/rcmd.c:159
+#: inet/rcmd.c:160
 #, c-format
 msgid "rcmd: write (setting up stderr): %m\n"
-msgstr "rcmd: write: (sätter upp standard error): %m\n"
+msgstr "rcmd: write: (sätter upp standard fel): %m\n"
 
 #: sunrpc/svc_simple.c:83
 msgid "registerrpc: out of memory\n"
 msgstr "registerrpc: minnet slut\n"
 
-#: time/zic.c:1794
+#: time/zic.c:1821
 msgid "repeated leap second moment"
 msgstr "upprepat skottsekundstillfälle"
 
@@ -2423,47 +2529,47 @@ msgstr "rpcinfo: kan inte kontakta portmapper"
 msgid "rpcinfo: can't contact portmapper: "
 msgstr "rpcinfo: kan inte kontakta portmapper: "
 
-#: time/zic.c:708 time/zic.c:710
+#: time/zic.c:704 time/zic.c:706
 msgid "same rule name in multiple files"
 msgstr "samma regel i flera filer"
 
-#: inet/rcmd.c:174
+#: inet/rcmd.c:175
 msgid "select: protocol failure in circuit setup\n"
 msgstr "select: protokollfel i förbindelseuppsättning\n"
 
-#: inet/rcmd.c:192
+#: inet/rcmd.c:193
 msgid "socket: protocol failure in circuit setup\n"
 msgstr "uttag (socket): protokollfel i förbindelseuppsättning\n"
 
-#: locale/programs/locfile.c:600
+#: locale/programs/locfile.c:622
 msgid "sorting order `forward' and `backward' are mutually exclusive"
 msgstr ""
 "sorteringsordning \"forward\" och \"backward\" Ã¤r Ã¶msesidigt uteslutande"
 
-#: locale/programs/ld-collate.c:1568 locale/programs/ld-collate.c:1614
+#: locale/programs/ld-collate.c:1571 locale/programs/ld-collate.c:1617
 msgid ""
 "specification of sorting weight for collation symbol does not make sense"
 msgstr ""
 "specifikation av sorteringsvikter för kollationssymbol verkar inte vettig"
 
-#: time/zic.c:779
+#: time/zic.c:775
 msgid "standard input"
 msgstr "standard in"
 
-#: time/zdump.c:260
+#: time/zdump.c:268
 msgid "standard output"
 msgstr "standard ut"
 
-#: locale/programs/ld-time.c:256
+#: locale/programs/ld-time.c:257
 #, c-format
 msgid "starting date is illegal in string %d in `era' field in category `%s'"
 msgstr "startdatum Ã¤r otillÃ¥tet i sträng %d i \"era\"-fält i kategori \"%s\""
 
-#: time/zic.c:1276
+#: time/zic.c:1274
 msgid "starting year greater than ending year"
 msgstr "startÃ¥r Ã¤r större Ã¤n slutÃ¥r"
 
-#: locale/programs/ld-time.c:328
+#: locale/programs/ld-time.c:330
 #, c-format
 msgid "stopping date is illegal in string %d in `era' field in category `%s'"
 msgstr "slutdatum Ã¤r otillÃ¥tet i sträng %d i \"era\"-fält i kategori \"%s\""
@@ -2492,7 +2598,7 @@ msgstr "svcudp_create - kan inte anropa getsockname"
 msgid "svcudp_create: socket creation problem"
 msgstr "svcudp_create: problem att skapa uttag (socket)"
 
-#: locale/programs/ld-collate.c:1191
+#: locale/programs/ld-collate.c:1194
 #, c-format
 msgid ""
 "symbol for multicharacter collating element `%.*s' duplicates element "
@@ -2500,7 +2606,7 @@ msgid ""
 msgstr ""
 "symbol för flerteckenskollationselement \"%.*s\" duplicerar elementdefinition"
 
-#: locale/programs/ld-collate.c:1064
+#: locale/programs/ld-collate.c:1067
 #, c-format
 msgid ""
 "symbol for multicharacter collating element `%.*s' duplicates other element "
@@ -2509,7 +2615,7 @@ msgstr ""
 "symbol för flerteckenskollationselement \"%.*s\" duplicerar annan\n"
 "elementdefinition"
 
-#: locale/programs/ld-collate.c:1200
+#: locale/programs/ld-collate.c:1203
 #, c-format
 msgid ""
 "symbol for multicharacter collating element `%.*s' duplicates other symbol "
@@ -2518,7 +2624,7 @@ msgstr ""
 "symbol för flerteckenskollationselement \"%.*s\" duplicerar annan\n"
 "symboldefinition"
 
-#: locale/programs/ld-collate.c:1073
+#: locale/programs/ld-collate.c:1076
 #, c-format
 msgid ""
 "symbol for multicharacter collating element `%.*s' duplicates symbol "
@@ -2526,7 +2632,7 @@ msgid ""
 msgstr ""
 "symbol för flerteckenskollationselement \"%.*s\" duplicerar symboldefinition"
 
-#: locale/programs/ld-collate.c:1055 locale/programs/ld-collate.c:1182
+#: locale/programs/ld-collate.c:1058 locale/programs/ld-collate.c:1185
 #, c-format
 msgid ""
 "symbol for multicharacter collating element `%.*s' duplicates symbolic name "
@@ -2543,51 +2649,51 @@ msgstr ""
 msgid "syntax error in %s definition: %s"
 msgstr "syntaxfel i definition av %s: %s"
 
-#: locale/programs/locfile.c:620
+#: locale/programs/locfile.c:642
 msgid "syntax error in `order_start' directive"
 msgstr "syntaxfel i direktivet \"order_start\""
 
-#: locale/programs/locfile.c:362
+#: locale/programs/locfile.c:384
 msgid "syntax error in character class definition"
 msgstr "syntaxfel i teckenklassdefinition"
 
-#: locale/programs/locfile.c:420
+#: locale/programs/locfile.c:442
 msgid "syntax error in character conversion definition"
 msgstr "syntaxfel i teckenkonverteringsdefinition"
 
-#: locale/programs/locfile.c:662
+#: locale/programs/locfile.c:684
 msgid "syntax error in collating order definition"
 msgstr "syntaxfel i kollationssorteringsdefinition"
 
-#: locale/programs/locfile.c:512
+#: locale/programs/locfile.c:534
 msgid "syntax error in collation definition"
 msgstr "syntaxfel i kollationsdefinition"
 
-#: locale/programs/locfile.c:335
+#: locale/programs/locfile.c:357
 msgid "syntax error in definition of LC_CTYPE category"
 msgstr "syntaxfel i definition av kategorin LC_CTYPE"
 
-#: locale/programs/locfile.c:278
+#: locale/programs/locfile.c:300
 msgid "syntax error in definition of new character class"
 msgstr "syntaxfel i definition av ny teckenklass"
 
-#: locale/programs/locfile.c:288
+#: locale/programs/locfile.c:310
 msgid "syntax error in definition of new character map"
 msgstr "syntaxfel i definition av ny teckenuppsättning"
 
-#: locale/programs/locfile.c:873
+#: locale/programs/locfile.c:895
 msgid "syntax error in message locale definition"
 msgstr "syntaxfel i definition av meddelandelokal"
 
-#: locale/programs/locfile.c:784
+#: locale/programs/locfile.c:806
 msgid "syntax error in monetary locale definition"
 msgstr "syntaxfel i definition av monetärlokal"
 
-#: locale/programs/locfile.c:811
+#: locale/programs/locfile.c:833
 msgid "syntax error in numeric locale definition"
 msgstr "syntaxfel i definition av numerisk lokal"
 
-#: locale/programs/locfile.c:722
+#: locale/programs/locfile.c:744
 msgid "syntax error in order specification"
 msgstr "syntaxfel i sorteringsspecifikation"
 
@@ -2596,23 +2702,23 @@ msgstr "syntaxfel i sorteringsspecifikation"
 msgid "syntax error in prolog: %s"
 msgstr "syntaxfel i prolog: %s"
 
-#: locale/programs/locfile.c:849
+#: locale/programs/locfile.c:871
 msgid "syntax error in time locale definition"
 msgstr "syntaxfel i definition av tidslokal"
 
-#: locale/programs/locfile.c:255
+#: locale/programs/locfile.c:277
 msgid "syntax error: not inside a locale definition section"
 msgstr "syntaxfel: inte inne i en lokaldefinition"
 
-#: catgets/gencat.c:380 catgets/gencat.c:516 catgets/gencat.c:543
+#: catgets/gencat.c:381 catgets/gencat.c:517 catgets/gencat.c:544
 msgid "this is the first definition"
 msgstr "detta Ã¤r den första definitionen"
 
-#: time/zic.c:1119
+#: time/zic.c:1117
 msgid "time before zero"
 msgstr "tid före noll"
 
-#: time/zic.c:1127 time/zic.c:1959 time/zic.c:1978
+#: time/zic.c:1125 time/zic.c:1986 time/zic.c:2005
 msgid "time overflow"
 msgstr "för stort tidsvärde"
 
@@ -2628,23 +2734,23 @@ msgstr "f
 msgid "too many character classes defined"
 msgstr "för mÃ¥nga teckenklasser definierade"
 
-#: time/zic.c:1788
+#: time/zic.c:1815
 msgid "too many leap seconds"
 msgstr "för mÃ¥nga skottsekunder"
 
-#: time/zic.c:1760
+#: time/zic.c:1787
 msgid "too many local time types"
 msgstr "för mÃ¥nga lokala tidstyper"
 
-#: time/zic.c:1714
+#: time/zic.c:1741
 msgid "too many transitions?!"
 msgstr "för mÃ¥nga Ã¶vergÃ¥ngar?!"
 
-#: locale/programs/ld-collate.c:1623
+#: locale/programs/ld-collate.c:1626
 msgid "too many weights"
 msgstr "för mÃ¥nga vikter"
 
-#: time/zic.c:2082
+#: time/zic.c:2109
 msgid "too many, or too long, time zone abbreviations"
 msgstr "för mÃ¥nga eller för lÃ¥nga tidszonförkortningar"
 
@@ -2657,11 +2763,11 @@ msgstr "avslutande skr
 msgid "trouble replying to prog %d\n"
 msgstr "problem att svara till prog %d\n"
 
-#: locale/programs/ld-collate.c:1383
+#: locale/programs/ld-collate.c:1386
 msgid "two lines in a row containing `...' are not allowed"
 msgstr "tvÃ¥ rader efter varann som har \"...\" Ã¤r inte tillÃ¥tet"
 
-#: time/zic.c:1283
+#: time/zic.c:1281
 msgid "typed single year"
 msgstr "satte typ pÃ¥ endast ett Ã¥r"
 
@@ -2676,39 +2782,36 @@ msgstr "ok
 
 #: locale/programs/ld-messages.c:193 locale/programs/ld-messages.c:204
 #: locale/programs/ld-messages.c:215 locale/programs/ld-messages.c:226
-#: locale/programs/ld-time.c:696
+#: locale/programs/ld-time.c:698
 #, c-format
 msgid "unknown character in field `%s' of category `%s'"
 msgstr "okänt tecken i fält \"%s\" i kategori \"%s\""
 
-#: locale/programs/locfile.c:585
+#: locale/programs/locfile.c:607
 msgid "unknown collation directive"
 msgstr "okänt kollationsdirektiv"
 
-#: catgets/gencat.c:477
+#: catgets/gencat.c:478
 #, c-format
 msgid "unknown directive `%s': line ignored"
 msgstr "okänt direktiv \"%s\": rad ignorerad"
 
-#: catgets/gencat.c:456
+#: catgets/gencat.c:457
 #, c-format
 msgid "unknown set `%s'"
-msgstr "okänd uppsättning \"%s\""
-
-msgid "unknown signal"
-msgstr "okänd signal"
+msgstr "okänd mängd \"%s\""
 
-#: locale/programs/ld-collate.c:1367 locale/programs/ld-collate.c:1558
-#: locale/programs/ld-collate.c:1732
+#: locale/programs/ld-collate.c:1370 locale/programs/ld-collate.c:1561
+#: locale/programs/ld-collate.c:1735
 #, c-format
 msgid "unknown symbol `%.*s': line ignored"
 msgstr "okänd symbol \"%.*s\": rad ignorerad"
 
-#: time/zic.c:751
+#: time/zic.c:747
 msgid "unruly zone"
 msgstr "besvärlig zon"
 
-#: catgets/gencat.c:961
+#: catgets/gencat.c:962
 msgid "unterminated message"
 msgstr "oavslutat meddelande"
 
@@ -2720,15 +2823,15 @@ msgstr "oavslutad str
 msgid "unterminated symbolic name"
 msgstr "oavslutat symboliskt namn"
 
-#: locale/programs/ld-collate.c:1685
+#: locale/programs/ld-collate.c:1688
 msgid "unterminated weight name"
 msgstr "oavslutat viktnamn"
 
 #: locale/programs/charset.c:119
 msgid "upper limit in range is not smaller then lower limit"
-msgstr "övre gräns i omrÃ¥de Ã¤r inte mindre Ã¤n undre gräns"
+msgstr "övre gräns i intervall Ã¤r inte mindre Ã¤n undre gräns"
 
-#: time/zic.c:2025
+#: time/zic.c:2052
 msgid "use of 2/29 in non leap-year"
 msgstr "använder 29/2 i icke-skottÃ¥r"
 
@@ -2742,7 +2845,7 @@ msgstr "v
 msgid "value for <%s> must lie between 1 and 4"
 msgstr "värde pÃ¥ <%s> mÃ¥ste vara mellan 1 och 4"
 
-#: locale/programs/ld-monetary.c:148 locale/programs/ld-numeric.c:89
+#: locale/programs/ld-monetary.c:149 locale/programs/ld-numeric.c:89
 #, c-format
 msgid "value for field `%s' in category `%s' must not be the empty string"
 msgstr "värde pÃ¥ fält \"%s\" i kategori \"%s\" fÃ¥r inte vara tom sträng"
@@ -2751,7 +2854,7 @@ msgstr "v
 msgid "value of <mb_cur_max> must be greater than the value of <mb_cur_min>"
 msgstr "värdet pÃ¥ <mb_cur_max> mÃ¥ste vara större Ã¤n värdet pÃ¥ <mb_cur_min>"
 
-#: locale/programs/ld-monetary.c:138
+#: locale/programs/ld-monetary.c:139
 msgid ""
 "value of field `int_curr_symbol' in category `LC_MONETARY' does not "
 "correspond to a valid name in ISO 4217"
@@ -2765,12 +2868,12 @@ msgid ""
 msgstr ""
 "värdet pÃ¥ fältet \"int_curr_symbol\" i kategorin LC_MONETARY har fel längd"
 
-#: locale/programs/ld-monetary.c:370 locale/programs/ld-numeric.c:199
+#: locale/programs/ld-monetary.c:371 locale/programs/ld-numeric.c:199
 #, c-format
 msgid "values for field `%s' in category `%s' must be smaller than 127"
 msgstr "värden pÃ¥ fält \"%s\" i kategorin \"%s\" mÃ¥ste vara mindre Ã¤n 127"
 
-#: locale/programs/ld-monetary.c:366
+#: locale/programs/ld-monetary.c:367
 #, c-format
 msgid "values for field `%s' in category `%s' must not be zero"
 msgstr "värden pÃ¥ fält \"%s\" i kategorin \"%s\" fÃ¥r inte vara noll"
@@ -2779,15 +2882,15 @@ msgstr "v
 msgid "while opening UTMP file"
 msgstr "när UTMP-filen Ã¶ppnades"
 
-#: catgets/gencat.c:988
+#: catgets/gencat.c:989
 msgid "while opening old catalog file"
 msgstr "när gammal katalogfil Ã¶ppnades"
 
-#: db/makedb.c:353
+#: db/makedb.c:354
 msgid "while reading database"
 msgstr "när databasen lästes"
 
-#: db/makedb.c:315
+#: db/makedb.c:316
 msgid "while writing data base file"
 msgstr "när databasen skrevs"
 
@@ -2795,34 +2898,30 @@ msgstr "n
 msgid "wrong number of arguments"
 msgstr "fel antal argument"
 
-#: time/zic.c:1077
+#: time/zic.c:1075
 msgid "wrong number of fields on Leap line"
 msgstr "fel antal fält pÃ¥ \"Leap\"-rad"
 
-#: time/zic.c:1168
+#: time/zic.c:1166
 msgid "wrong number of fields on Link line"
 msgstr "fel antal fält pÃ¥ \"Link\"-rad"
 
-#: time/zic.c:911
+#: time/zic.c:909
 msgid "wrong number of fields on Rule line"
 msgstr "fel antal fält pÃ¥ \"Rule\"-rad"
 
-#: time/zic.c:981
+#: time/zic.c:979
 msgid "wrong number of fields on Zone continuation line"
 msgstr "fel antal fält pÃ¥ \"Zone\"-fortsättningsrad"
 
-#: time/zic.c:939
+#: time/zic.c:937
 msgid "wrong number of fields on Zone line"
 msgstr "fel antal fält pÃ¥ \"Zone\"-rad"
 
-#: nis/ypclnt.c:570
-msgid "yp_all: clnttcp_create failed"
-msgstr "yp_all: clnttcp_create misslyckades"
-
-#: nis/ypclnt.c:772
+#: nis/ypclnt.c:811
 msgid "yp_update: cannot convert host to netname\n"
 msgstr "yp_update: kan inte omvandla värd till nätnamn\n"
 
-#: nis/ypclnt.c:784
+#: nis/ypclnt.c:823
 msgid "yp_update: cannot get server address\n"
 msgstr "yp_update: kan inte hämta betjäntadress\n"
index fc4db38a55be99d375c7e72fdfadc9e829569e26..a8655cdd70c8903468f67dde21da54c2f7dfe290 100644 (file)
@@ -1568,7 +1568,7 @@ static reg_errcode_t compile_range _RE_ARGS ((const char **p_ptr,
    MSC and drop MAX_BUF_SIZE a bit.  Otherwise you may end up
    reallocating to 0 bytes.  Such thing is not going to work too well.
    You have been warned!!  */
-#ifdef _MSC_VER
+#if defined(_MSC_VER)  && !defined(WIN32)
 /* Microsoft C 16-bit versions limit malloc to approx 65512 bytes.
    The REALLOC define eliminates a flurry of conversion warnings,
    but is not required. */
index 754f99548fde7d1d79b9ee3ac2ef56cbf1b75777..65a668e664548153caeed166665e55024d202f72 100644 (file)
@@ -400,7 +400,7 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype,
          linebuflen -= n;
          /* Get canonical name.  */
          n = strlen (tbuf) + 1;        /* For the \0.  */
-         if (n > buflen)
+         if ((size_t) n > buflen)
            {
              ++had_error;
              continue;
@@ -423,7 +423,7 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype,
          cp += n;
          /* Get canonical name. */
          n = strlen (tbuf) + 1;   /* For the \0.  */
-         if (n > buflen)
+         if ((size_t) n > buflen)
            {
              ++had_error;
              continue;
index 8cff7a4d665a989bce91507dd81277df6108039e..34fe918237f0876bf38820ae9f7ac8c86b318426 100644 (file)
@@ -336,7 +336,7 @@ __printf_fp (FILE *fp,
 
   if (special)
     {
-      int width = info->prec > info->width ? info->prec : info->width;
+      int width = info->width;
 
       if (is_neg || info->showsign || info->space)
        --width;
index e2e64695d52a82ced36d6a06499aa7440f78e19a..6cdda9e1d48778b4d140b3136cda5cc37e0a8ec0 100644 (file)
@@ -189,7 +189,7 @@ __printf_fphex (FILE *fp,
 
   if (special)
     {
-      int width = info->prec > info->width ? info->prec : info->width;
+      int width = info->width;
 
       if (negative || info->showsign || info->space)
        --width;
index 8f35f207f68404aeafccb12537f3721c00242947..6704dbf4e0c0521d537777593fa5f597b59333c3 100644 (file)
@@ -24,7 +24,7 @@ subdir        := string
 headers        := string.h strings.h memory.h endian.h bytesex.h \
           argz.h envz.h
 
-routines       := strcat strchr strcmp strcoll strcpy strcspn          \
+routines       := strcat strchr strcmp strcoll strcpy strcspn strverscmp       \
                   strdup strndup       \
                   strerror _strerror strerror_r strlen strnlen         \
                   strncat strncmp strncpy                              \
@@ -40,7 +40,8 @@ routines      := strcat strchr strcmp strcoll strcpy strcspn          \
                   envz basename                                        \
                   strcoll_l strxfrm_l
 
-tests          := tester testcopy test-ffs tst-strlen stratcliff
+tests          := tester testcopy test-ffs tst-strlen stratcliff \
+                  tst-svc
 distribute     := memcopy.h pagecopy.h
 
 
@@ -50,3 +51,6 @@ tester-ENV = LANGUAGE=C
 CFLAGS-tester.c = -fno-builtin
 CFLAGS-tst-strlen.c = -fno-builtin
 CFLAGS-stratcliff.c = -fno-builtin
+
+tests: $(objpfx)tst-svc.out
+       cmp tst-svc.expect $(objpfx)tst-svc.out
index 4f06843aebd8e000efd08d4db8e1e1db87321286..f24e0ac1b4f4574ce187422fee401c6a97dbc9ba 100644 (file)
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
 #include <string.h>
 
 char *
-basename (const char *filename)
+basename (filename)
+     const char *filename;
 {
   char *p = strrchr (filename, '/');
   return p ? p + 1 : (char *) filename;
index 7a6ad1235fbcbf524840913d8d26834e8c3dc878..4a79dcecc2e305b3593eae86504ea7eaa5383eff 100644 (file)
@@ -241,6 +241,9 @@ extern char *strsep __P ((char **__stringp, __const char *__delim));
 #endif
 
 #ifdef __USE_GNU
+/* Compare S1 and S2 as strings holding name & indices/version numbers.  */
+extern int strverscmp __P ((__const char *__s1, __const char *__s2));
+
 /* Return a string describing the meaning of the signal number in SIG.  */
 extern char *strsignal __P ((int __sig));
 
diff --git a/string/strverscmp.c b/string/strverscmp.c
new file mode 100644 (file)
index 0000000..388df75
--- /dev/null
@@ -0,0 +1,111 @@
+/* Compare strings while treating digits characters numerically.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 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 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 <string.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 */
+#define  S_N    0x0
+#define  S_I    0x4
+#define  S_F    0x8
+#define  S_Z    0xC
+
+/* result_type: CMP: return diff; LEN: compare using len_diff/diff */
+#define  CMP    2
+#define  LEN    3
+
+
+/* Compare S1 and S2 as strings holding indices/version numbers,
+   returning less than, equal to or greater than zero if S1 is less than,
+   equal to or greater than S2 (for more info, see the texinfo doc).
+*/
+
+int
+strverscmp (s1, s2)
+     const char *s1;
+     const char *s2;
+{
+  const unsigned char *p1 = (const unsigned char *) s1;
+  const unsigned char *p2 = (const unsigned char *) s2;
+  unsigned char c1, c2;
+  int state;
+  int diff;
+
+  /* Symbol(s)    0       [1-9]   others  (padding)
+     Transition   (10) 0  (01) d  (00) x  (11) -   */
+  static const unsigned int next_state[] =
+  {
+      /* state    x    d    0    - */
+      /* S_N */  S_N, S_I, S_Z, S_N,
+      /* S_I */  S_N, S_I, S_I, S_I,
+      /* S_F */  S_N, S_F, S_F, S_F,
+      /* S_Z */  S_N, S_F, S_Z, S_Z
+  };
+
+  static const int result_type[] =
+  {
+      /* state   x/x  x/d  x/0  x/-  d/x  d/d  d/0  d/-
+                 0/x  0/d  0/0  0/-  -/x  -/d  -/0  -/- */
+
+      /* S_N */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
+                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
+      /* S_I */  CMP, -1,  -1,  CMP, +1,  LEN, LEN, CMP,
+                 +1,  LEN, LEN, CMP, CMP, CMP, CMP, CMP,
+      /* S_F */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
+                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
+      /* S_Z */  CMP, +1,  +1,  CMP, -1,  CMP, CMP, CMP,
+                 -1,  CMP, CMP, CMP
+  };
+
+  if (p1 == p2)
+    return 0;
+
+  c1 = *p1++;
+  c2 = *p2++;
+  /* Hint: '0' is a digit too.  */
+  state = S_N | (c1 == '0') + (isdigit (c1) != 0);
+
+  while ((diff = c1 - c2) == 0 && c1 != '\0')
+    {
+      state = next_state[state];
+      c1 = *p1++;
+      c2 = *p2++;
+      state |= (c1 == '0') + (isdigit (c1) != 0);
+    }
+
+  state = result_type[state << 2 | ((c2 == '0') + (isdigit (c2) != 0))];
+
+  switch (state)
+  {
+    case CMP:
+      return diff;
+
+    case LEN:
+      while (isdigit (*p1++))
+       if (!isdigit (*p2++))
+         return 1;
+
+      return isdigit (*p2) ? -1 : diff;
+
+    default:
+      return state;
+  }
+}
index b8155397379f5ee177ed5712baa7e1657795b38a..dcd7342ba3be3ed86934d686f5dc3c961c43d214 100644 (file)
@@ -1,3 +1,6 @@
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
 #include <ansidecl.h>
 #include <errno.h>
 #include <stdio.h>
@@ -28,6 +31,7 @@ DEFUN(check, (thing, number), int thing AND int number)
 }
 
 /* Complain if first two args don't strcmp as equal.  */
+void equal(CONST char *a, CONST char *b, int number);
 void
 DEFUN(equal, (a, b, number), CONST char *a AND CONST char *b AND int number)
 {
@@ -54,6 +58,41 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
   check(strcmp("a\203", "a") > 0, 8);          /* Tricky if char signed. */
   check(strcmp("a\203", "a\003") > 0, 9);
 
+  {
+    char buf1[0x40], buf2[0x40];
+    int i, j;
+    for (i=0; i < 0x10; i++)
+      for (j = 0; j < 0x10; j++)
+      {
+       int k;
+       for (k = 0; k < 0x3f; k++)
+         {
+           buf1[j] = '0' ^ (k & 4);
+           buf2[j] = '4' ^ (k & 4);
+         }
+       buf1[i] = buf1[0x3f] = 0;
+       buf2[j] = buf2[0x3f] = 0;
+       for (k = 0; k < 0xf; k++)
+         {
+           int cnum = 0x10+0x10*k+0x100*j+0x1000*i;
+           check(strcmp(buf1+i,buf2+j) == 0, cnum);
+           buf1[i+k] = 'A' + i + k;
+           buf1[i+k+1] = 0;
+           check(strcmp(buf1+i,buf2+j) > 0, cnum+1);
+           check(strcmp(buf2+j,buf1+i) < 0, cnum+2);
+           buf2[j+k] = 'B' + i + k;
+           buf2[j+k+1] = 0;
+           check(strcmp(buf1+i,buf2+j) < 0, cnum+3);
+           check(strcmp(buf2+j,buf1+i) > 0, cnum+4);
+           buf2[j+k] = 'A' + i + k;
+           buf1[i] = 'A' + i + 0x80;
+           check(strcmp(buf1+i,buf2+j) > 0, cnum+5);
+           check(strcmp(buf2+j,buf1+i) < 0, cnum+6);
+           buf1[i] = 'A' + i;
+         }
+      }
+   }
+
   /* Test strcpy next because we need it to set up other tests.  */
   it = "strcpy";
   check(strcpy(one, "abcd") == one, 1);        /* Returned value. */
@@ -672,6 +711,43 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
   (void) memset(one+2, 010045, 1);
   equal(one, "ax\045xe", 6);           /* Unsigned char convert. */
 
+  /* Test for more complex versions of memset, for all alignments and
+     lengths up to 256. This test takes a little while, perhaps it should
+     be made weaker? */
+  {
+    char data[512];
+    int i;
+    int j;
+    int k;
+    int c;
+    
+    for (i = 0; i < 512; i++)
+      data[i] = 'x';
+    for (c = 0; c <= 'y'; c += 'y')  /* check for memset(,0,) and
+                                       memset(,'y',) */
+      for (j = 0; j < 256; j++)
+       for (i = 0; i < 256; i++)
+         {
+           memset(data+i,c,j);
+           for (k = 0; k < i; k++)
+             if (data[k] != 'x')
+               goto fail;
+           for (k = i; k < i+j; k++)
+             {
+               if (data[k] != c)
+                 goto fail;
+               data[k] = 'x';
+             }
+           for (k = i+j; k < 512; k++)
+             if (data[k] != 'x')
+               goto fail;
+           continue;
+
+         fail:
+           check(0,7+i+j*256+(c != 0)*256*256); 
+         }
+  }
+
   /* bcopy - much like memcpy.
      Berklix manual is silent about overlap, so don't test it.  */
   it = "bcopy";
index b9efe1da2908e14d52978c0911008ef25709172b..4acd4045f522185f7fdc233e051bcfde4c205699 100644 (file)
@@ -34,7 +34,7 @@ main(int argc, char *argv[])
                  return 1;
                }
            }
-        }
+       }
     }
   return 0;
 }
diff --git a/string/tst-svc.c b/string/tst-svc.c
new file mode 100644 (file)
index 0000000..c6add5b
--- /dev/null
@@ -0,0 +1,45 @@
+/* Test for strverscmp() */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define  MAX_STRINGS      256
+#define  MAX_LINE_SIZE    32
+
+int
+compare (const void *p1, const void *p2)
+{
+  return strverscmp (*((char **) p1), *((char **) p2));
+}
+
+int
+main (int argc, char *argv[])
+{
+  char line[MAX_LINE_SIZE + 1];
+  char *str[MAX_STRINGS];
+  int  count = 0;
+  int  i, n;
+
+  while (count < MAX_STRINGS && fgets (line, MAX_LINE_SIZE, stdin) != NULL)
+    {
+      n = strlen (line) - 1;
+
+      if (line[n] == '\n')
+        line[n] = '\0';
+
+      str[count] = strdup (line);
+
+      if (str[count] == NULL)
+        exit (EXIT_FAILURE);
+
+      ++count;
+    }
+
+  qsort (str, count, sizeof (char *), compare);
+
+  for (i = 0; i < count; ++i)
+    puts (str[i]);
+
+  exit (EXIT_SUCCESS);
+}
diff --git a/string/tst-svc.expect b/string/tst-svc.expect
new file mode 100644 (file)
index 0000000..f906c4f
--- /dev/null
@@ -0,0 +1,26 @@
+000
+001
+00
+00a
+01
+01a
+0
+0a
+20
+21
+22
+212
+foo
+foo-0.4
+foo-0.4a
+foo-0.4b
+foo-0.5
+foo-0.10.5
+foo-3.01
+foo-3.0
+foo-3.0.0
+foo-3.0.1
+foo-3.2
+foo-3.10
+foo00
+foo0
diff --git a/string/tst-svc.input b/string/tst-svc.input
new file mode 100644 (file)
index 0000000..b80ee82
--- /dev/null
@@ -0,0 +1,26 @@
+0a
+00
+0
+01
+001
+01a
+00a
+000
+20
+212
+21
+22
+foo0
+foo00
+foo-0.4
+foo-3.0
+foo
+foo-3.0.0
+foo-3.0.1
+foo-0.5
+foo-0.4b
+foo-3.10
+foo-3.2
+foo-3.01
+foo-0.4a
+foo-0.10.5
index d172ebc655401630bb72427401eafb10b3b89335..9f0242fcb0b13251c993ea8ba3941e8133b263c8 100644 (file)
@@ -46,6 +46,7 @@ static char sccsid[] = "@(#)authunix_prot.c 1.15 87/08/11 Copyr 1984 Sun Micro";
 
 /*
  * XDR for unix authentication parameters.
+ * Unfortunately, none of these can be declared const.
  */
 bool_t
 xdr_authunix_parms (XDR * xdrs, struct authunix_parms *p)
index c3667d4738e8d9ee896ce9dcaaf3f0b1489a2b71..8ae93b8f6ddb8f0df7a90bc2d7a385289baaa072 100644 (file)
@@ -370,7 +370,7 @@ clnt_broadcast (prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
          stat = RPC_CANTRECV;
          goto done_broad;
        }
-      if (inlen < sizeof (u_long))
+      if ((size_t) inlen < sizeof (u_long))
        goto recv_again;
       /*
        * see if reply transaction id matches sent id.
index ed010f8fabe9a80e123ace397b3cd02c5bb966e0..6d2747f72814d496beaac5a07feefc47db9d5518 100644 (file)
@@ -1,7 +1,7 @@
 /****** rpc_clntout.c ******/
 
 void write_stubs(void);
-void printarglist(proc_list *proc, 
+void printarglist(proc_list *proc,
                  const char *addargname, const char *addargtype);
 
 /****** rpc_cout.c ******/
@@ -15,9 +15,9 @@ void emit_single_in_line(declaration *decl, int flag, relation rel);
 void print_datadef(definition *def);
 void print_funcdef(definition *def);
 void pxdrfuncdecl(const char *name, int pointerp);
-void pprocdef(proc_list *proc, version_list *vp, 
+void pprocdef(proc_list *proc, version_list *vp,
              const char *addargtype, int server_p, int mode);
-void pdeclaration(const char *name, declaration *dec, int tab, 
+void pdeclaration(const char *name, declaration *dec, int tab,
                  const char *separator);
 
 /****** rpc_main.c ******/
@@ -36,7 +36,7 @@ void write_sample_clnt_main(void);
    /* see rpc_scan.h */
 
 /****** rpc_svcout.c ******/
-int nullproc(proc_list *proc);
+int nullproc(const proc_list *proc);
 void write_svc_aux(int nomain);
 void write_msg_out(void);
 
index 32d8d0aa35ae5b0c258b83f08206884e5ade779e..d006f51f72ae72037a762e359df08e1ec34bda31 100644 (file)
 
 #define _RPC_AUTH_UNIX_H       1
 #include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/auth.h>
+#include <rpc/xdr.h>
 
 __BEGIN_DECLS
 
index 2cabc00d64b1ed17802c5416faa8aa8be66d26ff..43a599ad25652977fb6a974c200b44779c81dc50 100644 (file)
@@ -38,6 +38,9 @@
 
 #define _RPC_CLNT_H    1
 #include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/auth.h>
 
 __BEGIN_DECLS
 
@@ -130,13 +133,13 @@ struct CLIENT {
   AUTH *cl_auth;                /* authenticator */
   struct clnt_ops {
     enum clnt_stat (*cl_call) __P ((CLIENT *, u_long, xdrproc_t,
-                                   caddr_t, xdrproc_t, 
-                                   caddr_t, struct timeval));  
+                                   caddr_t, xdrproc_t,
+                                   caddr_t, struct timeval));
                                /* call remote procedure */
     void (*cl_abort) __P ((void));  /* abort a call */
-    void (*cl_geterr) __P ((CLIENT *, struct rpc_err *));      
+    void (*cl_geterr) __P ((CLIENT *, struct rpc_err *));
                                /* get specific error code */
-    bool_t (*cl_freeres) __P ((CLIENT *, xdrproc_t, caddr_t)); 
+    bool_t (*cl_freeres) __P ((CLIENT *, xdrproc_t, caddr_t));
                                /* frees results */
     void (*cl_destroy) __P ((CLIENT *)); /* destroy this structure */
     bool_t (*cl_control) __P ((CLIENT *, int, char *));
@@ -270,7 +273,7 @@ struct CLIENT {
  *     u_long prog;
  *     u_long vers;
  */
-extern CLIENT *clntraw_create __P ((__const u_long __prog, 
+extern CLIENT *clntraw_create __P ((__const u_long __prog,
                                    __const u_long __vers));
 
 
@@ -283,7 +286,7 @@ extern CLIENT *clntraw_create __P ((__const u_long __prog,
  *     u_ong vers;     -- version number
  *     char *prot;     -- protocol
  */
-extern CLIENT *clnt_create __P ((__const char *__host, __const u_long __prog, 
+extern CLIENT *clnt_create __P ((__const char *__host, __const u_long __prog,
                                 __const u_long __vers, __const char *__prot));
 
 
@@ -334,7 +337,7 @@ extern CLIENT *clntudp_bufcreate __P ((struct sockaddr_in *__raddr,
                                       int *__sockp, u_int __sendsz,
                                       u_int __recvsz));
 
-extern int callrpc __P ((__const char *__host, __const u_long __prognum, 
+extern int callrpc __P ((__const char *__host, __const u_long __prognum,
                         __const u_long __versnum, __const u_long __procnum,
                         __const xdrproc_t __inproc, __const char *__in,
                         __const xdrproc_t __outproc, char *__out));
@@ -354,9 +357,9 @@ extern void clnt_perrno __P ((enum clnt_stat __num));       /* stderr */
 /*
  * Print an English error message, given the client error code
  */
-extern void clnt_perror __P ((CLIENT *__clnt, __const char *__msg)); 
+extern void clnt_perror __P ((CLIENT *__clnt, __const char *__msg));
                                                        /* stderr */
-extern char *clnt_sperror __P ((CLIENT *__clnt, __const char *__msg)); 
+extern char *clnt_sperror __P ((CLIENT *__clnt, __const char *__msg));
                                                        /* string */
 
 /*
index 0b8d50f10f3e9ebae26c195bf9624fca62d16e4b..45639e7dc4e22a3f7be3e23a00c0d3ce89518bdc 100644 (file)
@@ -38,6 +38,8 @@
 #ifndef _RPC_PMAP_CLNT_H
 #define _RPC_PMAP_CLNT_H       1
 #include <features.h>
+#include <rpc/types.h>
+#include <rpc/xdr.h>
 
 __BEGIN_DECLS
 
@@ -70,23 +72,23 @@ extern bool_t pmap_set __P ((__const u_long __program, __const u_long __vers,
 extern bool_t pmap_unset __P ((__const u_long __program, __const u_long __vers));
 extern struct pmaplist *pmap_getmaps __P ((struct sockaddr_in *__address));
 extern enum clnt_stat pmap_rmtcall __P ((struct sockaddr_in *__addr,
-                                        __const u_long __prog, 
+                                        __const u_long __prog,
                                         __const u_long __vers,
-                                        __const u_long __proc, 
+                                        __const u_long __proc,
                                         xdrproc_t __xdrargs,
                                         caddr_t __argsp, xdrproc_t __xdrres,
                                         caddr_t __resp, struct timeval __tout,
                                         u_long *__port_ptr));
-extern enum clnt_stat clnt_broadcast __P ((__const u_long __prog, 
+extern enum clnt_stat clnt_broadcast __P ((__const u_long __prog,
                                           __const u_long __vers,
-                                          __const u_long __proc, 
+                                          __const u_long __proc,
                                           xdrproc_t __xargs,
                                           caddr_t __argsp,
                                           xdrproc_t __xresults,
                                           caddr_t __resultsp,
                                           resultproc_t __eachresult));
 extern u_short pmap_getport __P ((struct sockaddr_in *__address,
-                                 __const u_long __program, 
+                                 __const u_long __program,
                                  __const u_long __version,
                                  u_int __protocol));
 
index 2e1af7e3d0f85a510630976794f4b99ca092fa84..6d32045c8ebc5d1567787e43913c0353e2be32a2 100644 (file)
@@ -39,7 +39,9 @@
 
 #define _RPC_PMAP_RMT_H        1
 #include <features.h>
-
+#include <sys/types.h>
+#include <rpc/types.h>
+#include <rpc/xdr.h>
 
 __BEGIN_DECLS
 
index 8f6b6a9da4bc354cf599825d817164e09bbd6055..73996169d662cc454583a54d00b1e1467c372d72 100644 (file)
@@ -33,6 +33,7 @@
 #define _RPC_MSG_H 1
 #include <sys/cdefs.h>
 
+#include <rpc/xdr.h>
 #include <rpc/clnt.h>
 
 /*
index eecb1e14be187c31d50b3a6ebd8e1bdea2549714..aa1c702757be90345b902399c8246276cb1758a2 100644 (file)
@@ -39,6 +39,8 @@
 
 #define __XDR_HEADER__
 #include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
 
 /* We need FILE.  */
 #include <stdio.h>
@@ -91,8 +93,17 @@ enum xdr_op
  * This is the number of bytes per unit of external data.
  */
 #define BYTES_PER_XDR_UNIT     (4)
+/*
+ * This only works if the above is a power of 2.  But it's defined to be
+ * 4 by the appropriate RFCs.  So it will work.  And it's normally quicker
+ * than the old routine.
+ */
+#if 1
+#define RNDUP(x)  (((x) + BYTES_PER_XDR_UNIT - 1) & ~(BYTES_PER_XDR_UNIT - 1))
+#else /* this is the old routine */
 #define RNDUP(x)  ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
                    * BYTES_PER_XDR_UNIT)
+#endif
 
 /*
  * The XDR handle.
@@ -108,7 +119,7 @@ struct XDR
       {
        bool_t (*x_getlong) __P ((XDR * __xdrs, long *__lp));
        /* get a long from underlying stream */
-       bool_t (*x_putlong) __P ((XDR * __xdrs, long *__lp));
+       bool_t (*x_putlong) __P ((XDR * __xdrs, __const long *__lp));
        /* put a long to " */
        bool_t (*x_getbytes) __P ((XDR * __xdrs, caddr_t __addr, u_int __len));
        /* get some bytes from " */
@@ -243,6 +254,9 @@ struct xdr_discrim
 
 /*
  * These are the "generic" xdr routines.
+ * None of these can have const applied because it's not possible to
+ * know whether the call is a read or a write to the passed parameter
+ * also, the XDR structure is always updated by some of these calls.
  */
 extern bool_t xdr_void __P ((void));
 extern bool_t xdr_int __P ((XDR * __xdrs, int *__ip));
@@ -294,8 +308,8 @@ extern bool_t xdr_netobj __P ((XDR * __xdrs, struct netobj * __np));
  */
 
 /* XDR using memory buffers */
-extern void xdrmem_create __P ((XDR * __xdrs, caddr_t __addr, u_int __size,
-                               enum xdr_op __op));
+extern void xdrmem_create __P ((XDR * __xdrs, __const caddr_t __addr,
+                               u_int __size, enum xdr_op __op));
 
 /* XDR using stdio library */
 extern void xdrstdio_create __P ((XDR * __xdrs, FILE * __file,
index 77319d9b15a29cc7acf9902366dbcfbfd9c784f9..ab3b24da74a8541ffdb5f72a0c9fddd924a36878 100644 (file)
@@ -45,10 +45,10 @@ char cout_rcsid[] =
 #include "proto.h"
 
 static void emit_enum(definition *def);
-static void emit_program(definition *def);
-static void emit_union(definition *def);
+static void emit_program(const definition *def);
+static void emit_union(const definition *def);
 static void emit_struct(definition *def);
-static void emit_typedef(definition *def);
+static void emit_typedef(const definition *def);
 static int findtype(const definition *def, const char *type);
 static int undefined(const char *type);
 static void print_generic_header(const char *procname, int pointerp);
@@ -59,8 +59,8 @@ static void print_ifclose(int indent);
 static void print_ifstat(int indent, const char *prefix, const char *type,
                         relation rel, const char *amax,
                         const char *objname, const char *name);
-static void print_stat(int indent, declaration *dec);
-static void print_header(definition *def);
+static void print_stat(int indent, const declaration *dec);
+static void print_header(const definition *def);
 static void print_trailer(void);
 static char *upcase(const char *str);
 
@@ -77,15 +77,16 @@ emit(definition *def)
                emit_program(def);
                return;
        }
-       if(def->def_kind == DEF_TYPEDEF)
+       if (def->def_kind == DEF_TYPEDEF)
          {
          /* now we need to handle declarations like
-   struct typedef foo foo;
-   since we don't want this to be expanded into 2 calls to xdr_foo */
+               struct typedef foo foo;
+            since we don't want this to be expanded
+            into 2 calls to xdr_foo */
 
-       if(strcmp(def->def.ty.old_type,def->def_name)==0)
-         return;
-      };
+           if (strcmp(def->def.ty.old_type,def->def_name)==0)
+             return;
+         };
 
        print_header(def);
        switch (def->def_kind) {
@@ -102,7 +103,8 @@ emit(definition *def)
                emit_typedef(def);
                break;
        default:
-         /* can't happen */
+               /* can't happen */
+               break;
        }
        print_trailer();
 }
@@ -110,7 +112,6 @@ emit(definition *def)
 static int
 findtype(const definition *def, const char *type)
 {
-
        if (def->def_kind == DEF_PROGRAM || def->def_kind == DEF_CONST) {
                return (0);
        } else {
@@ -122,10 +123,7 @@ static int
 undefined(const char *type)
 {
        definition *def;
-
        def = (definition *) FINDVAL(defined, type, findtype);
-
-
        return (def == NULL);
 }
 
@@ -153,33 +151,25 @@ print_generic_header(const char *procname, int pointerp)
 }
 
 static void
-print_header(definition *def)
+print_header(const definition *def)
 {
+       print_generic_header(def->def_name,
+                            def->def_kind != DEF_TYPEDEF ||
+                            !isvectordef(def->def.ty.old_type,
+                                         def->def.ty.rel));
 
-/*
-  decl_list *dl;
-  bas_type *ptr;
-  int i;
- */
-
-  print_generic_header( def->def_name,
-                      def->def_kind != DEF_TYPEDEF ||
-                      !isvectordef(def->def.ty.old_type, def->def.ty.rel));
-
-  /* Now add Inline support */
-
-
-  if(inlineflag == 0 )
-    return;
-  /*May cause lint to complain. but  ... */
-f_print(fout, "\t register long *buf;\n\n");
+       /* Now add Inline support */
 
+       if(inlineflag == 0 )
+               return;
+       /*May cause lint to complain. but  ... */
+       f_print(fout, "\t register long *buf;\n\n");
 }
 
 static void
-print_prog_header(proc_list *plist)
+print_prog_header(const proc_list *plist)
 {
-  print_generic_header( plist->args.argname, 1 );
+       print_generic_header(plist->args.argname, 1 );
 }
 
 static void
@@ -308,7 +298,7 @@ emit_enum(definition *def)
 }
 
 static void
-emit_program(definition *def)
+emit_program(const definition *def)
 {
        decl_list *dl;
        version_list *vlist;
@@ -327,7 +317,7 @@ emit_program(definition *def)
 }
 
 static void
-emit_union(definition *def)
+emit_union(const definition *def)
 {
   declaration *dflt;
   case_list *cl;
@@ -393,6 +383,8 @@ emit_union(definition *def)
   f_print(fout, "\t}\n");
 }
 
+/* this may be const.  i haven't traced this one through yet. */
+
 static void
 emit_struct(definition *def)
 {
@@ -446,9 +438,6 @@ emit_struct(definition *def)
                        return;
                };
 
-
-
-
                flag=PUT;
                for(j=0; j<2; j++){
 
@@ -605,7 +594,7 @@ emit_struct(definition *def)
 
 
 static void
-emit_typedef(definition *def)
+emit_typedef(const definition *def)
 {
        const char *prefix = def->def.ty.old_prefix;
        const char *type = def->def.ty.old_type;
@@ -617,7 +606,7 @@ emit_typedef(definition *def)
 }
 
 static void
-print_stat(int indent, declaration *dec)
+print_stat(int indent, const declaration *dec)
 {
        const char *prefix = dec->prefix;
        const char *type = dec->type;
index 07c1f678332144d2b7ba76caa2dbbe7c0d4c32fe..8d48c85a07db18f03fbdf486b0b06dcddde76d7b 100644 (file)
@@ -31,7 +31,7 @@
 /*      @(#)rpc_parse.h  1.3  90/08/29  (C) 1987 SMI   */
 
 /*
- * rpc_parse.h, Definitions for the RPCL parser 
+ * rpc_parse.h, Definitions for the RPCL parser
  */
 
 enum defkind {
@@ -50,7 +50,7 @@ enum relation {
        REL_VECTOR,     /* fixed length array */
        REL_ARRAY,      /* variable length array */
        REL_POINTER,    /* pointer */
-       REL_ALIAS,      /* simple */
+       REL_ALIAS       /* simple */
 };
 typedef enum relation relation;
 
@@ -113,7 +113,7 @@ struct arg_list {
        const char *argname; /* name of struct for arg*/
        decl_list *decls;
 };
-       
+
 typedef struct arg_list arg_list;
 
 struct proc_list {
index d19b9b45ebd46297060b29e962374284cc49d0ba..75eb695e87f352ef7aa99915a2a2e4caee2e0048 100644 (file)
@@ -51,10 +51,10 @@ static const char ROUTINE[] = "local";
 
 char _errbuf[256];             /* For all messages */
 
-static void internal_proctype (proc_list * plist);
+static void internal_proctype (const proc_list * plist);
 static void p_xdrfunc (const char *rname, const char *typename);
-static void write_real_program (definition * def);
-static void write_program (definition * def, const char *storage);
+static void write_real_program (const definition * def);
+static void write_program (const definition * def, const char *storage);
 static void printerr (const char *err, const char *transp);
 static void printif (const char *proc, const char *transp,
                     const char *prefix, const char *arg);
@@ -78,7 +78,7 @@ p_xdrfunc (const char *rname, const char *typename)
 }
 
 void
-internal_proctype (proc_list * plist)
+internal_proctype (const proc_list * plist)
 {
   f_print (fout, "static ");
   ptype (plist->res_prefix, plist->res_type, 1);
@@ -321,7 +321,7 @@ write_programs (const char *storage)
    Unpacks single user argument of printmsg_1 to call-by-value format
    expected by printmsg_1. */
 static void
-write_real_program (definition * def)
+write_real_program (const definition * def)
 {
   version_list *vp;
   proc_list *proc;
@@ -388,7 +388,7 @@ write_real_program (definition * def)
 }
 
 static void
-write_program (definition * def, const char *storage)
+write_program (const definition * def, const char *storage)
 {
   version_list *vp;
   proc_list *proc;
@@ -566,7 +566,7 @@ printif (const char *proc, const char *transp, const char *prefix,
 }
 
 int
-nullproc (proc_list * proc)
+nullproc (const proc_list * proc)
 {
   for (; proc != NULL; proc = proc->next)
     {
index d666119376d4262855e0126d77a9f70fb1992503..becc59bed3deb6d0364062edc5e3d56a8f74c42e 100644 (file)
@@ -93,10 +93,6 @@ xdr_int (xdrs, ip)
      int *ip;
 {
 
-#ifdef lint
-  (void) (xdr_short (xdrs, (short *) ip));
-  return (xdr_long (xdrs, (long *) ip));
-#else
 #if INT_MAX < LONG_MAX
   long l;
 
@@ -123,7 +119,6 @@ xdr_int (xdrs, ip)
 #else
 #error unexpected integer sizes in_xdr_int()
 #endif
-#endif
 }
 
 /*
@@ -134,10 +129,6 @@ xdr_u_int (xdrs, up)
      XDR *xdrs;
      u_int *up;
 {
-#ifdef lint
-  (void) (xdr_short (xdrs, (short *) up));
-  return (xdr_u_long (xdrs, (u_long *) up));
-#else
 #if UINT_MAX < ULONG_MAX
   u_long l;
 
@@ -164,7 +155,6 @@ xdr_u_int (xdrs, up)
 #else
 #error unexpected integer sizes in_xdr_u_int()
 #endif
-#endif
 }
 
 /*
@@ -349,7 +339,6 @@ xdr_enum (xdrs, ep)
      XDR *xdrs;
      enum_t *ep;
 {
-#ifndef lint
   enum sizecheck
     {
       SIZEVAL
@@ -392,10 +381,6 @@ xdr_enum (xdrs, ep)
     {
       return FALSE;
     }
-#else /* lint */
-  (void) (xdr_short (xdrs, (short *) ep));
-  return xdr_long (xdrs, (long *) ep);
-#endif /* lint */
 }
 
 /*
index be5a07d028061a44747691b23b406270bf339415..2e1e37f0a271c988099cba9208bfa504646b2bb1 100644 (file)
@@ -87,8 +87,8 @@ static struct sgl_limits {
 
 bool_t
 xdr_float(xdrs, fp)
-       register XDR *xdrs;
-       register float *fp;
+     XDR *xdrs;
+     float *fp;
 {
 #ifdef vax
        struct ieee_single is;
@@ -207,8 +207,8 @@ static struct dbl_limits {
 
 bool_t
 xdr_double(xdrs, dp)
-       register XDR *xdrs;
-       double *dp;
+     XDR *xdrs;
+     double *dp;
 {
 #ifdef vax
        struct  ieee_double id;
index 481a8664b5cee02ba2a3a2362eb87f131cfdae54..8e88e41ea214e11af801f3d11af42791a1289f1f 100644 (file)
@@ -47,13 +47,13 @@ static char sccsid[] = "@(#)xdr_mem.c 1.19 87/08/11 Copyr 1984 Sun Micro";
 #include <rpc/rpc.h>
 
 static bool_t xdrmem_getlong (XDR *, long *);
-static bool_t xdrmem_putlong (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 *, caddr_t, u_int);
-static u_int xdrmem_getpos (XDR *);
+static bool_t xdrmem_putbytes (XDR *, const caddr_t, u_int);
+static u_int xdrmem_getpos (const XDR *);
 static bool_t xdrmem_setpos (XDR *, u_int);
 static long *xdrmem_inline (XDR *, int);
-static void xdrmem_destroy (XDR *);
+static void xdrmem_destroy (const XDR *);
 
 static const struct xdr_ops xdrmem_ops =
 {
@@ -74,7 +74,7 @@ static const struct xdr_ops xdrmem_ops =
 void
 xdrmem_create (xdrs, addr, size, op)
      XDR *xdrs;
-     caddr_t addr;
+     const caddr_t addr;
      u_int size;
      enum xdr_op op;
 {
@@ -85,11 +85,21 @@ xdrmem_create (xdrs, addr, size, op)
   xdrs->x_handy = size;
 }
 
+/*
+ * Nothing needs to be done for the memory case.  The argument is clearly
+ * const.
+ */
+
 static void
-xdrmem_destroy (XDR *xdrs)
+xdrmem_destroy (const XDR *xdrs)
 {
 }
 
+/*
+ * Gets the next word from the memory referenced by xdrs and places it
+ * in the long pointed to by lp.  It then increments the private word to
+ * point at the next element.  Neither object pointed to is const
+ */
 static bool_t
 xdrmem_getlong (xdrs, lp)
      XDR *xdrs;
@@ -103,10 +113,15 @@ xdrmem_getlong (xdrs, lp)
   return TRUE;
 }
 
+/*
+ * Puts the long pointed to by lp in the memory referenced by xdrs.  It
+ * then increments the private word to point at the next element.  The
+ * long pointed at is const
+ */
 static bool_t
 xdrmem_putlong (xdrs, lp)
      XDR *xdrs;
-     long *lp;
+     const long *lp;
 {
 
   if ((xdrs->x_handy -= 4) < 0)
@@ -116,6 +131,12 @@ xdrmem_putlong (xdrs, lp)
   return TRUE;
 }
 
+/*
+ * Gets an unaligned number of bytes from the xdrs structure and writes them
+ * to the address passed in addr.  Be very careful when calling this routine
+ * as it could leave the xdrs pointing to an unaligned structure which is not
+ * a good idea.  None of the things pointed to are const.
+ */
 static bool_t
 xdrmem_getbytes (xdrs, addr, len)
      XDR *xdrs;
@@ -130,10 +151,14 @@ xdrmem_getbytes (xdrs, addr, len)
   return TRUE;
 }
 
+/*
+ * The complementary function to the above.  The same warnings apply about
+ * unaligned data.  The source address is const.
+ */
 static bool_t
 xdrmem_putbytes (xdrs, addr, len)
      XDR *xdrs;
-     caddr_t addr;
+     const caddr_t addr;
      u_int len;
 {
 
@@ -144,14 +169,21 @@ xdrmem_putbytes (xdrs, addr, len)
   return TRUE;
 }
 
+/*
+ * Not sure what this one does.  But it clearly doesn't modify the contents
+ * of xdrs.  **FIXME** does this not assume u_int == u_long?
+ */
 static u_int
 xdrmem_getpos (xdrs)
-     XDR *xdrs;
+     const XDR *xdrs;
 {
 
   return (u_long) xdrs->x_private - (u_long) xdrs->x_base;
 }
 
+/*
+ * xdrs modified
+ */
 static bool_t
 xdrmem_setpos (xdrs, pos)
      XDR *xdrs;
@@ -167,6 +199,9 @@ xdrmem_setpos (xdrs, pos)
   return TRUE;
 }
 
+/*
+ * xdrs modified
+ */
 static long *
 xdrmem_inline (xdrs, len)
      XDR *xdrs;
index af2f9f5ed7ee2f76e073fde02eeccd1127f37d41..66b33f845646e846d206313cc1795f7e8c4e8810 100644 (file)
@@ -54,9 +54,9 @@ static char sccsid[] = "@(#)xdr_rec.c 1.21 87/08/11 Copyr 1984 Sun Micro";
 #include <rpc/rpc.h>
 
 static bool_t xdrrec_getlong (XDR *, long *);
-static bool_t xdrrec_putlong (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 *, 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_setpos (XDR *, u_int);
 static long *xdrrec_inline (XDR *, int);
@@ -221,7 +221,7 @@ xdrrec_getlong (xdrs, lp)
 static bool_t
 xdrrec_putlong (xdrs, lp)
      XDR *xdrs;
-     long *lp;
+     const long *lp;
 {
   RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
   int32_t *dest_lp = (int32_t *) rstrm->out_finger;
@@ -276,7 +276,7 @@ xdrrec_getbytes (xdrs, addr, len)
 static bool_t
 xdrrec_putbytes (xdrs, addr, len)
      XDR *xdrs;
-     caddr_t addr;
+     const caddr_t addr;
      u_int len;
 {
   RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
index f95bc70be18c1d10c23390d7cc8aae1b3fa81f24..ddd726d8cb2e39d6e12ca98681023823bb7f8e8d 100644 (file)
@@ -46,9 +46,9 @@ static char sccsid[] = "@(#)xdr_stdio.c 1.16 87/08/11 Copyr 1984 Sun Micro";
 #include <rpc/xdr.h>
 
 static bool_t xdrstdio_getlong (XDR *, long *);
-static bool_t xdrstdio_putlong (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 *, 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_setpos (XDR *, u_int);
 static long *xdrstdio_inline (XDR *, int);
@@ -114,7 +114,7 @@ xdrstdio_getlong (xdrs, lp)
 }
 
 static bool_t
-xdrstdio_putlong (XDR *xdrs, long *lp)
+xdrstdio_putlong (XDR *xdrs, const long *lp)
 {
 
   long mycopy = htonl (*lp);
@@ -127,7 +127,7 @@ xdrstdio_putlong (XDR *xdrs, long *lp)
 static bool_t
 xdrstdio_getbytes (xdrs, addr, len)
      XDR *xdrs;
-     caddr_t addr;
+     const caddr_t addr;
      u_int len;
 {
 
@@ -137,7 +137,7 @@ xdrstdio_getbytes (xdrs, addr, len)
 }
 
 static bool_t
-xdrstdio_putbytes (XDR *xdrs, caddr_t addr, u_int len)
+xdrstdio_putbytes (XDR *xdrs, const caddr_t addr, u_int len)
 {
   if ((len != 0) && (fwrite (addr, (int) len, 1, (FILE *) xdrs->x_private) != 1))
     return FALSE;
index 61cd35148510c325099f80d7f70160124a1f1118..532c4d295f522ba37d246084ea356fafb272dbbb 100644 (file)
@@ -42,6 +42,8 @@
 
 #define _RPC_AUTH_H    1
 #include <features.h>
+#include <sys/types.h>
+#include <rpc/types.h>
 #include <rpc/xdr.h>
 
 __BEGIN_DECLS
@@ -99,7 +101,7 @@ struct AUTH {
   struct auth_ops {
     void (*ah_nextverf) __P ((AUTH *));
     int  (*ah_marshal) __P ((AUTH *, XDR *));  /* nextverf & serialize */
-    int  (*ah_validate) __P ((AUTH *, struct opaque_auth *));  
+    int  (*ah_validate) __P ((AUTH *, struct opaque_auth *));
                                                /* validate verifier */
     int  (*ah_refresh) __P ((AUTH *));         /* refresh credentials */
     void (*ah_destroy) __P ((AUTH *));         /* destroy this structure */
@@ -163,7 +165,7 @@ extern AUTH *authunix_create __P ((char *__machname, __uid_t __uid,
                                   __gid_t *__aup_gids));
 extern AUTH *authunix_create_default __P ((void));
 extern AUTH *authnone_create __P ((void));
-extern AUTH *authdes_create __P ((char *__servername, u_int __window, 
+extern AUTH *authdes_create __P ((char *__servername, u_int __window,
                                  struct sockaddr *__syncaddr,
                                  des_block *__ckey));
 
index d79fe7dd5cf34e6c544c63f0eb31c87650569073..7758fe85982e195faea1bad0b59916b5244a0b98 100644 (file)
@@ -460,7 +460,7 @@ __finite (double __x)
 {
   register int __result;
   __asm__ __volatile__
-    ("orl      $x0x800fffff, %0\n\t"
+    ("orl      $0x800fffff, %0\n\t"
      "incl     %0\n\t"
      "shrl     $31, %0"
      : "=q" (__result) : "0" (((int *) &__x)[1]));
index 6cad6eab2e445d2ddb649d0831e13296f1e654cc..b0e70e89f98ef596f74c94d4fae58cc9f615b95f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1994, 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
@@ -16,7 +16,6 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#include <ansidecl.h>
 #include <stddef.h>
 #include <errno.h>
 #include <sys/time.h>
@@ -310,9 +309,8 @@ setitimer_locked (const struct itimerval *new, struct itimerval *old,
    set *OLD to the old value of timer WHICH.
    Returns 0 on success, -1 on errors.  */
 int
-DEFUN(__setitimer, (which, new, old),
-      enum __itimer_which which AND
-      struct itimerval *new AND struct itimerval *old)
+__setitimer (enum __itimer_which which, const struct itimerval *new,
+            struct itimerval *old)
 {
   void *crit;
 
diff --git a/sysdeps/powerpc/Dist b/sysdeps/powerpc/Dist
new file mode 100644 (file)
index 0000000..ba908dc
--- /dev/null
@@ -0,0 +1 @@
+fenv_libc.h
diff --git a/sysdeps/powerpc/Makefile b/sysdeps/powerpc/Makefile
new file mode 100644 (file)
index 0000000..4100901
--- /dev/null
@@ -0,0 +1,3 @@
+ifeq ($(subdir),math)
+libm-support += fenv_const
+endif
index da621e22c0422cb4fa8ab159c4902e38b5c312b8..02292a0eb210992ba9433aebfc1ccb011ac5d48d 100644 (file)
 #include <jmp_buf.h>
 
 ENTRY (__longjmp)
-       lwz 1,(JB_GPR1*4)(3)
-       lwz 2,(JB_GPR2*4)(3)
-       lwz 0,(JB_LR*4)(3)
-       lwz 14,((JB_GPRS+0)*4)(3)
-       lfd 14,((JB_FPRS+0*2)*4)(3)
-       lwz 15,((JB_GPRS+1)*4)(3)
-       lfd 15,((JB_FPRS+1*2)*4)(3)
-       lwz 16,((JB_GPRS+2)*4)(3)
-       lfd 16,((JB_FPRS+2*2)*4)(3)
-       lwz 17,((JB_GPRS+3)*4)(3)
-       lfd 17,((JB_FPRS+3*2)*4)(3)
-       lwz 18,((JB_GPRS+4)*4)(3)
-       lfd 18,((JB_FPRS+4*2)*4)(3)
-       lwz 19,((JB_GPRS+5)*4)(3)
-       lfd 19,((JB_FPRS+5*2)*4)(3)
-       lwz 20,((JB_GPRS+6)*4)(3)
-       lfd 20,((JB_FPRS+6*2)*4)(3)
-       mtlr 0
-       lwz 21,((JB_GPRS+7)*4)(3)
-       lfd 21,((JB_FPRS+7*2)*4)(3)
-       lwz 22,((JB_GPRS+8)*4)(3)
-       lfd 22,((JB_FPRS+8*2)*4)(3)
-       lwz 23,((JB_GPRS+9)*4)(3)
-       lfd 23,((JB_FPRS+9*2)*4)(3)
-       lwz 24,((JB_GPRS+10)*4)(3)
-       lfd 24,((JB_FPRS+10*2)*4)(3)
-       lwz 25,((JB_GPRS+11)*4)(3)
-       lfd 25,((JB_FPRS+11*2)*4)(3)
-       lwz 26,((JB_GPRS+12)*4)(3)
-       lfd 26,((JB_FPRS+12*2)*4)(3)
-       lwz 27,((JB_GPRS+13)*4)(3)
-       lfd 27,((JB_FPRS+13*2)*4)(3)
-       lwz 28,((JB_GPRS+14)*4)(3)
-       lfd 28,((JB_FPRS+14*2)*4)(3)
-       lwz 29,((JB_GPRS+15)*4)(3)
-       lfd 29,((JB_FPRS+15*2)*4)(3)
-       lwz 30,((JB_GPRS+16)*4)(3)
-       lfd 30,((JB_FPRS+16*2)*4)(3)
-       lwz 31,((JB_GPRS+17)*4)(3)
-       lfd 31,((JB_FPRS+17*2)*4)(3)
-       mr 3,4
+       lwz %r1,(JB_GPR1*4)(%r3)
+       lwz %r2,(JB_GPR2*4)(%r3)
+       lwz %r0,(JB_LR*4)(%r3)
+       lwz %r14,((JB_GPRS+0)*4)(%r3)
+       lfd %f14,((JB_FPRS+0*2)*4)(%r3)
+       lwz %r15,((JB_GPRS+1)*4)(%r3)
+       lfd %f15,((JB_FPRS+1*2)*4)(%r3)
+       lwz %r16,((JB_GPRS+2)*4)(%r3)
+       lfd %f16,((JB_FPRS+2*2)*4)(%r3)
+       lwz %r17,((JB_GPRS+3)*4)(%r3)
+       lfd %f17,((JB_FPRS+3*2)*4)(%r3)
+       lwz %r18,((JB_GPRS+4)*4)(%r3)
+       lfd %f18,((JB_FPRS+4*2)*4)(%r3)
+       lwz %r19,((JB_GPRS+5)*4)(%r3)
+       lfd %f19,((JB_FPRS+5*2)*4)(%r3)
+       lwz %r20,((JB_GPRS+6)*4)(%r3)
+       lfd %f20,((JB_FPRS+6*2)*4)(%r3)
+       mtlr %r0
+       lwz %r21,((JB_GPRS+7)*4)(%r3)
+       lfd %f21,((JB_FPRS+7*2)*4)(%r3)
+       lwz %r22,((JB_GPRS+8)*4)(%r3)
+       lfd %f22,((JB_FPRS+8*2)*4)(%r3)
+       lwz %r23,((JB_GPRS+9)*4)(%r3)
+       lfd %f23,((JB_FPRS+9*2)*4)(%r3)
+       lwz %r24,((JB_GPRS+10)*4)(%r3)
+       lfd %f24,((JB_FPRS+10*2)*4)(%r3)
+       lwz %r25,((JB_GPRS+11)*4)(%r3)
+       lfd %f25,((JB_FPRS+11*2)*4)(%r3)
+       lwz %r26,((JB_GPRS+12)*4)(%r3)
+       lfd %f26,((JB_FPRS+12*2)*4)(%r3)
+       lwz %r27,((JB_GPRS+13)*4)(%r3)
+       lfd %f27,((JB_FPRS+13*2)*4)(%r3)
+       lwz %r28,((JB_GPRS+14)*4)(%r3)
+       lfd %f28,((JB_FPRS+14*2)*4)(%r3)
+       lwz %r29,((JB_GPRS+15)*4)(%r3)
+       lfd %f29,((JB_FPRS+15*2)*4)(%r3)
+       lwz %r30,((JB_GPRS+16)*4)(%r3)
+       lfd %f30,((JB_FPRS+16*2)*4)(%r3)
+       lwz %r31,((JB_GPRS+17)*4)(%r3)
+       lfd %f31,((JB_FPRS+17*2)*4)(%r3)
+       mr %r3,%r4
        blr
 END (__longjmp)
index 9dc19a91a579975afb7b063ebfab6f153d9e2ee7..db9688cfc553966f4eba488b0abe41cde96c9c39 100644 (file)
@@ -64,25 +64,6 @@ fabs (double __x)
   return __value;
 }
 
-/* Optimized versions for some non-standardized functions.  */
-#ifdef __USE_MISC
-
-__MATH_INLINE double hypot (double __x, double __y);
-__MATH_INLINE double
-hypot (double __x, double __y)
-{
-  return sqrt (__x * __x + __y * __y);
-}
-
-__MATH_INLINE double __sgn (double __x);
-__MATH_INLINE double
-sgn (double __x)
-{
-  return (__x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0));
-}
-
-#endif /* __USE_MISC  */
-
 #endif /* __NO_MATH_INLINES  */
 #endif /* __GNUC__  */
 
index a9aefcc977d41babb123ddfcff9d6cac3e60412d..ffd90d5bd29771cdd06762404f6eaa02e86dac1d 100644 (file)
@@ -24,7 +24,7 @@
 #include <sysdep.h>
 
 ENTRY (_setjmp)
-       li 4,0                          /* Set second argument to 0.  */
+       li %r4,0                        /* Set second argument to 0.  */
 #ifdef PIC
        b __sigsetjmp@plt
 #else
index 1a6300660e318bc17a9d433184f79239f76c6e0b..f02d7815edaca25f89fc2c3a5d66efc30d31fefd 100644 (file)
@@ -24,7 +24,7 @@
 #include <sysdep.h>
 
 ENTRY (__setjmp)
-       li 4,1                          /* Set second argument to 1.  */
+       li %r4,1                        /* Set second argument to 1.  */
 #ifdef PIC
        b __sigsetjmp@plt
 #else
index 3ad5ca89c92db640a94ec35400f3bb4fa94051d2..cfada93cd467642cd855f4232696e948d03f4679 100644 (file)
@@ -17,6 +17,9 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
+#ifndef dl_machine_h
+#define dl_machine_h
+
 #define ELF_MACHINE_NAME "powerpc"
 
 #include <assert.h>
@@ -134,182 +137,231 @@ elf_machine_load_address (void)
 
   /* So now work out the difference between where the branch actually points,
      and the offset of that location in memory from the start of the file.  */
-  return (Elf32_Addr)branchaddr - *got +
-    (*branchaddr & 0x3fffffc |
-     (int)(*branchaddr << 6 & 0x80000000) >> 6);
+  return ((Elf32_Addr)branchaddr - *got
+         + (*branchaddr & 0x3fffffc
+            | (int)(*branchaddr << 6 & 0x80000000) >> 6));
 }
 
 #define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) /* nothing */
 
-/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
-   LOADADDR is the load address of the object; INFO is an array indexed
-   by DT_* of the .dynamic section info.  */
+/* The PLT uses Elf32_Rela relocs.  */
+#define elf_machine_relplt elf_machine_rela
 
-#ifdef RESOLVE
+  /* This code is used in dl-runtime.c to call the `fixup' function
+     and then redirect to the address it returns. It is called
+     from code built in the PLT by elf_machine_runtime_setup. */
+#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
+       .section \".text\"
+       .align 2
+       .globl _dl_runtime_resolve
+       .type _dl_runtime_resolve,@function
+_dl_runtime_resolve:
+ # We need to save the registers used to pass parameters.
+ # We build a stack frame to put them in.
+       stwu 1,-48(1)
+       mflr 0
+       stw 3,16(1)
+       stw 4,20(1)
+       stw 0,52(1)
+       stw 5,24(1)
+ # We also need to save some of the condition register fields.
+       mfcr 0
+       stw 6,28(1)
+       stw 7,32(1)
+       stw 8,36(1)
+       stw 9,40(1)
+       stw 10,44(1)
+       stw 0,12(1)
+ # The code that calls this has put parameters for `fixup' in r12 and r11.
+       mr 3,12
+       mr 4,11
+       bl fixup@local
+ # 'fixup' returns the address we want to branch to.
+       mtctr 3
+ # Put the registers back...
+       lwz 0,52(1)
+       lwz 10,44(1)
+       lwz 9,40(1)
+       mtlr 0
+       lwz 0,12(1)
+       lwz 8,36(1)
+       lwz 7,32(1)
+       lwz 6,28(1)
+       mtcrf 0xFF,0
+       lwz 5,24(1)
+       lwz 4,20(1)
+       lwz 3,16(1)
+ # ...unwind the stack frame, and jump to the PLT entry we updated.
+       addi 1,1,48
+       bctr
+0:
+       .size    _dl_runtime_resolve,0b-_dl_runtime_resolve
+ # undo '.section text'.
+       .previous
+");
 
-static inline void
-elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
-                 const Elf32_Sym *sym, const struct r_found_version *version)
-{
-  const Elf32_Sym *const refsym = sym;
-  Elf32_Addr *const reloc_addr = (Elf32_Addr *)(map->l_addr + reloc->r_offset);
-  Elf32_Word loadbase, finaladdr;
-  const int rinfo = ELF32_R_TYPE (reloc->r_info);
+/* Initial entry point code for the dynamic linker.
+   The C function `_dl_start' is the real entry point;
+   its return value is the user program's entry point. */
+#define RTLD_START \
+static ElfW(Addr) _dl_start (void *arg) __attribute__((unused)); \
+asm ("\
+       .section \".text\"
+       .align 2
+       .globl _start
+       .type _start,@function
+_start:
+ # We start with the following on the stack, from top:
+ # argc (4 bytes)
+ # arguments for program (terminated by NULL)
+ # environment variables (terminated by NULL)
+ # arguments for the program loader
+ # FIXME: perhaps this should do the same trick as elf/start.c?
 
-  if (rinfo == R_PPC_NONE)
-    return;
+ # Call _dl_start with one parameter pointing at argc
+       mr 3,1
+ #  (we have to frob the stack pointer a bit to allow room for
+ #   _dl_start to save the link register)
+       li 4,0
+       addi 1,1,-16
+       stw 4,0(1)
+       bl _dl_start@local
 
-  assert (sym != NULL);
-  if (ELF32_ST_TYPE (sym->st_info) == STT_SECTION ||
-      rinfo == R_PPC_RELATIVE)
-    {
-      /* Has already been relocated.  */
-      loadbase = map->l_addr;
-      finaladdr = loadbase + reloc->r_addend;
-    }
-  else
-    {
-      int flags;
-
-      /* We never want to use a PLT entry as the destination of a
-        reloc, when what is being relocated is a branch. This is
-        partly for efficiency, but mostly so we avoid loops.  */
-      if (rinfo == R_PPC_REL24 ||
-         rinfo == R_PPC_ADDR24 ||
-         rinfo == R_PPC_JMP_SLOT)
-       flags = DL_LOOKUP_NOPLT;
-      else if (rinfo == R_PPC_COPY)
-       flags = DL_LOOKUP_NOEXEC;
-      else
-       flags = 0;
+ # Now, we do our main work of calling initialisation procedures.
+ # The ELF ABI doesn't say anything about parameters for these,
+ # so we just pass argc, argv, and the environment.
+ # Changing these is strongly discouraged (not least because argc is
+ # passed by value!).
 
-      loadbase = (Elf32_Word) (char *) (RESOLVE (&sym, version, flags));
-      if (sym == NULL)
-       {
-         /* Weak symbol that wasn't actually defined anywhere.  */
-         assert(loadbase == 0);
-         finaladdr = reloc->r_addend;
-       }
-      else
-       finaladdr = (loadbase + (Elf32_Word) (char *) sym->st_value
-                    + reloc->r_addend);
-    }
+ #  put our GOT pointer in r31
+       bl _GLOBAL_OFFSET_TABLE_-4@local
+       mflr 31
+ #  the address of _start in r30
+       mr 30,3
+ #  &_dl_argc in 29, &_dl_argv in 27, and _dl_default_scope in 28
+       lwz 28,_dl_default_scope@got(31)
+       lwz 29,_dl_argc@got(31)
+       lwz 27,_dl_argv@got(31)
+0:
+ #  call initfunc = _dl_init_next(_dl_default_scope[2])
+       lwz 3,8(28)
+       bl _dl_init_next@plt
+ # if initfunc is NULL, we exit the loop
+       mr. 0,3
+       beq 1f
+ # call initfunc(_dl_argc, _dl_argv, _dl_argv+_dl_argc+1)
+       mtlr 0
+       lwz 3,0(29)
+       lwz 4,0(27)
+       slwi 5,3,2
+       add 5,4,5
+       addi 5,5,4
+       blrl
+ # and loop.
+       b 0b
+1:
+ # Now, to conform to the ELF ABI, we have to:
+ # pass argv (actually _dl_argv) in r4
+       lwz 4,0(27)
+ # pass argc (actually _dl_argc) in r3
+       lwz 3,0(29)
+ # pass envp (actually _dl_argv+_dl_argc+1) in r5
+       slwi 5,3,2
+       add 5,4,5
+       addi 5,5,4
+ # pass the auxilary vector in r6. This is passed just after _envp.
+       addi 6,5,-4
+2:     lwzu 0,4(6)
+       cmpwi 1,0,0
+       bne 2b
+       addi 6,6,4
+ # pass a termination function pointer (in this case _dl_fini) in r7
+       lwz 7,_dl_fini@got(31)
+ # now, call the start function in r30...
+       mtctr 30
+ # pass the stack pointer in r1 (so far so good), pointing to a NULL value
+ # (this lets our startup code distinguish between a program linked statically,
+ # which linux will call with argc on top of the stack which will hopefully
+ # never be zero, and a dynamically linked program which will always have
+ # a NULL on the top of the stack).
+ # Take the opportunity to clear LR, so anyone who accidentally returns
+ # from _start gets SEGV.
+       li 0,0
+       stw 0,0(1)
+       mtlr 0
+ # and also clear _dl_starting_up
+       lwz 26,_dl_starting_up@got(31)
+       stw 0,0(26)
+ # go do it!
+       bctr
+0:
+       .size    _start,0b-_start
+ # undo '.section text'.
+       .previous
+");
 
-  /* This is an if/else if chain because GCC 2.7.2.[012] turns case
-     statements into non-PIC table lookups.  When a later version
-     comes out that fixes this, this should be changed.  */
-  if (rinfo == R_PPC_UADDR32 ||
-      rinfo == R_PPC_GLOB_DAT ||
-      rinfo == R_PPC_ADDR32 ||
-      rinfo == R_PPC_RELATIVE)
-    {
-      *reloc_addr = finaladdr;
-    }
-  else if (rinfo == R_PPC_ADDR16_LO)
-    {
-      *(Elf32_Half*) reloc_addr = finaladdr;
-    }
-  else if (rinfo == R_PPC_ADDR16_HI)
-    {
-      *(Elf32_Half*) reloc_addr = finaladdr >> 16;
-    }
-  else if (rinfo == R_PPC_ADDR16_HA)
-    {
-      *(Elf32_Half*) reloc_addr = (finaladdr + 0x8000) >> 16;
-    }
-#ifndef RTLD_BOOTSTRAP
-  else if (rinfo == R_PPC_REL24)
-    {
-      Elf32_Sword delta = finaladdr - (Elf32_Word) (char *) reloc_addr;
-      if (delta << 6 >> 6 != delta)
-       _dl_signal_error (0, map->l_name,
-                         "R_PPC_REL24 relocation out of range");
-      *reloc_addr = *reloc_addr & 0xfc000003 | delta & 0x3fffffc;
-    }
-  else if (rinfo == R_PPC_ADDR24)
-    {
-      if (finaladdr << 6 >> 6 != finaladdr)
-       _dl_signal_error (0, map->l_name,
-                         "R_PPC_ADDR24 relocation out of range");
-      *reloc_addr = *reloc_addr & 0xfc000003 | finaladdr & 0x3fffffc;
-    }
-  else if (rinfo == R_PPC_COPY)
-    {
-      if (sym->st_size != refsym->st_size)
-       {
-         const char *strtab;
+/* The idea here is that to conform to the ABI, we are supposed to try
+   to load dynamic objects between 0x10000 (we actually use 0x40000 as
+   the lower bound, to increase the chance of a memory reference from
+   a null pointer giving a segfault) and the program's load address.
+   Regrettably, in this code we can't find the program's load address,
+   so we punt and choose 0x01800000, which is below the ABI's
+   recommended default, and what GNU ld currently chooses. We only use
+   the address as a preference for mmap, so if we get it wrong the
+   worst that happens is that it gets mapped somewhere else.
 
-         strtab = ((void *) map->l_addr
-                   + map->l_info[DT_STRTAB]->d_un.d_ptr);
-         _dl_sysdep_error ("Symbol `", strtab + refsym->st_name,
-                           "' has different size in shared object, "
-                           "consider re-linking\n", NULL);
-       }
-      memcpy (reloc_addr, (char *) finaladdr, MIN (sym->st_size,
-                                                  refsym->st_size));
-    }
-#endif
-  else if (rinfo == R_PPC_REL32)
-    {
-      *reloc_addr = finaladdr - (Elf32_Word) (char *) reloc_addr;
-    }
-  else if (rinfo == R_PPC_JMP_SLOT)
-    {
-      Elf32_Sword delta = finaladdr - (Elf32_Word) (char *) reloc_addr;
-      if (delta << 6 >> 6 == delta)
-       *reloc_addr = OPCODE_B (delta);
-      else if (finaladdr <= 0x01fffffc || finaladdr >= 0xfe000000)
-       *reloc_addr = OPCODE_BA (finaladdr);
-      else
-       {
-         Elf32_Word *plt;
-         Elf32_Word index;
+   FIXME: Unfortunately, 'somewhere else' is probably right after the
+   program's break, which causes malloc to fail.  We really need more
+   information here about the way memory is mapped.  */
 
-         plt = (Elf32_Word *)((char *)map->l_addr
-                              + map->l_info[DT_PLTGOT]->d_un.d_val);
-         index = (reloc_addr - plt - PLT_INITIAL_ENTRY_WORDS)/2;
+#define ELF_PREFERRED_ADDRESS_DATA                                           \
+static ElfW(Addr) _dl_preferred_address = 1
 
-         if (index >= PLT_DOUBLE_SIZE)
-           {
-             /* Slots greater than or equal to 2^13 have 4 words available
-                instead of two.  */
-             reloc_addr[0] = OPCODE_LI (11, finaladdr);
-             reloc_addr[1] = OPCODE_ADDIS (11, 11, finaladdr + 0x8000 >> 16);
-             reloc_addr[2] = OPCODE_MTCTR (11);
-             reloc_addr[3] = OPCODE_BCTR ();
-           }
-         else
-           {
-             Elf32_Word num_plt_entries;
+#define ELF_PREFERRED_ADDRESS(loader, maplength, mapstartpref)               \
+( {                                                                          \
+   ElfW(Addr) prefd;                                                         \
+   if (mapstartpref != 0 && _dl_preferred_address == 1)                              \
+     _dl_preferred_address = mapstartpref;                                   \
+   if (mapstartpref != 0)                                                    \
+     prefd = mapstartpref;                                                   \
+   else if (_dl_preferred_address == 1)                                              \
+     prefd = _dl_preferred_address =                                         \
+         (0x01800000 - maplength - 0x10000) &                                \
+          ~(_dl_pagesize - 1);                                               \
+   else if (_dl_preferred_address < maplength + 0x50000)                     \
+     prefd = 0;                                                                      \
+   else                                                                              \
+     prefd = _dl_preferred_address =                                         \
+       ((_dl_preferred_address - maplength - 0x10000)                        \
+       & ~(_dl_pagesize - 1));                                               \
+   prefd;                                                                    \
+} )
 
-             num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val
-                                / sizeof(Elf32_Rela));
+#define ELF_FIXED_ADDRESS(loader, mapstart)                                  \
+( {                                                                          \
+   if (mapstart != 0 && _dl_preferred_address == 1)                          \
+     _dl_preferred_address = mapstart;                                       \
+} )
 
-             reloc_addr[0] = OPCODE_LI (11, index*4);
-             reloc_addr[1] =
-               OPCODE_B (-(4*(index*2
-                              + 1
-                              - PLT_LONGBRANCH_ENTRY_WORDS
-                              + PLT_INITIAL_ENTRY_WORDS)));
-             plt[index+PLT_DATA_START_WORDS (num_plt_entries)] = finaladdr;
-           }
-       }
-      MODIFIED_CODE (reloc_addr);
-    }
-  else
-    assert (! "unexpected dynamic reloc type");
+/* We require the address of the PLT entry returned from fixup, not
+   the first word of the PLT entry. */
+#define ELF_FIXUP_RETURNS_ADDRESS 1
 
-  if (rinfo == R_PPC_ADDR16_LO ||
-      rinfo == R_PPC_ADDR16_HI ||
-      rinfo == R_PPC_ADDR16_HA ||
-      rinfo == R_PPC_REL24 ||
-      rinfo == R_PPC_ADDR24)
-    MODIFIED_CODE_NOQUEUE (reloc_addr);
-}
+/* Nonzero iff TYPE should not be allowed to resolve to one of
+   the main executable's symbols, as for a COPY reloc.  */
+#define elf_machine_lookup_noexec_p(type) ((type) == R_PPC_COPY)
 
-#define ELF_MACHINE_NO_REL 1
+/* Nonzero iff TYPE describes relocation of a PLT entry, so
+   PLT entries should not be allowed to define the value.  */
+/* We never want to use a PLT entry as the destination of a
+   reloc, when what is being relocated is a branch. This is
+   partly for efficiency, but mostly so we avoid loops.  */
+#define elf_machine_lookup_noplt_p(type) ((type) == R_PPC_REL24 ||            \
+                                         (type) == R_PPC_ADDR24 ||           \
+                                         (type) == R_PPC_JMP_SLOT)
 
-#endif
+/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
+#define ELF_MACHINE_RELOC_NOPLT        R_PPC_JMP_SLOT
 
 /* Nonzero iff TYPE describes relocation of a PLT entry, so
    PLT entries should not be allowed to define the value.  */
@@ -446,203 +498,171 @@ elf_machine_lazy_rel (struct link_map *map, const Elf32_Rela *reloc)
   /* elf_machine_runtime_setup handles this. */
 }
 
-/* The PLT uses Elf32_Rela relocs.  */
-#define elf_machine_relplt elf_machine_rela
+#endif /* dl_machine_h */
 
-  /* This code is used in dl-runtime.c to call the `fixup' function
-     and then redirect to the address it returns. It is called
-     from code built in the PLT by elf_machine_runtime_setup. */
-#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
-       .section \".text\"
-       .align 2
-       .globl _dl_runtime_resolve
-       .type _dl_runtime_resolve,@function
-_dl_runtime_resolve:
- # We need to save the registers used to pass parameters.
- # We build a stack frame to put them in.
-       stwu 1,-48(1)
-       mflr 0
-       stw 3,16(1)
-       stw 4,20(1)
-       stw 0,52(1)
-       stw 5,24(1)
- # We also need to save some of the condition register fields.
-       mfcr 0
-       stw 6,28(1)
-       stw 7,32(1)
-       stw 8,36(1)
-       stw 9,40(1)
-       stw 10,44(1)
-       stw 0,12(1)
- # The code that calls this has put parameters for `fixup' in r12 and r11.
-       mr 3,12
-       mr 4,11
-       bl fixup@local
- # 'fixup' returns the address we want to branch to.
-       mtctr 3
- # Put the registers back...
-       lwz 0,52(1)
-       lwz 10,44(1)
-       lwz 9,40(1)
-       mtlr 0
-       lwz 0,12(1)
-       lwz 8,36(1)
-       lwz 7,32(1)
-       lwz 6,28(1)
-       mtcrf 0xFF,0
-       lwz 5,24(1)
-       lwz 4,20(1)
-       lwz 3,16(1)
- # ...unwind the stack frame, and jump to the PLT entry we updated.
-       addi 1,1,48
-       bctr
-0:
-       .size    _dl_runtime_resolve,0b-_dl_runtime_resolve
- # undo '.section text'.
-       .previous
-");
+#ifdef RESOLVE
 
-/* Initial entry point code for the dynamic linker.
-   The C function `_dl_start' is the real entry point;
-   its return value is the user program's entry point. */
-#define RTLD_START \
-static ElfW(Addr) _dl_start (void *arg) __attribute__((unused)); \
-asm ("\
-       .section \".text\"
-       .align 2
-       .globl _start
-       .type _start,@function
-_start:
- # We start with the following on the stack, from top:
- # argc (4 bytes)
- # arguments for program (terminated by NULL)
- # environment variables (terminated by NULL)
- # arguments for the program loader
- # FIXME: perhaps this should do the same trick as elf/start.c?
+/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
+   LOADADDR is the load address of the object; INFO is an array indexed
+   by DT_* of the .dynamic section info.  */
 
- # Call _dl_start with one parameter pointing at argc
-       mr 3,1
- #  (we have to frob the stack pointer a bit to allow room for
- #   _dl_start to save the link register)
-       li 4,0
-       addi 1,1,-16
-       stw 4,0(1)
-       bl _dl_start@local
+static inline void
+elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
+                 const Elf32_Sym *sym, const struct r_found_version *version)
+{
+  const Elf32_Sym *const refsym = sym;
+  Elf32_Addr *const reloc_addr = (Elf32_Addr *)(map->l_addr + reloc->r_offset);
+  Elf32_Word loadbase, finaladdr;
+  const int rinfo = ELF32_R_TYPE (reloc->r_info);
 
- # Now, we do our main work of calling initialisation procedures.
- # The ELF ABI doesn't say anything about parameters for these,
- # so we just pass argc, argv, and the environment.
- # Changing these is strongly discouraged (not least because argc is
- # passed by value!).
+  if (rinfo == R_PPC_NONE)
+    return;
 
- #  put our GOT pointer in r31
-       bl _GLOBAL_OFFSET_TABLE_-4@local
-       mflr 31
- #  the address of _start in r30
-       mr 30,3
- #  &_dl_argc in 29, &_dl_argv in 27, and _dl_default_scope in 28
-       lwz 28,_dl_default_scope@got(31)
-       lwz 29,_dl_argc@got(31)
-       lwz 27,_dl_argv@got(31)
-0:
- #  call initfunc = _dl_init_next(_dl_default_scope[2])
-       lwz 3,8(28)
-       bl _dl_init_next@plt
- # if initfunc is NULL, we exit the loop
-       mr. 0,3
-       beq 1f
- # call initfunc(_dl_argc, _dl_argv, _dl_argv+_dl_argc+1)
-       mtlr 0
-       lwz 3,0(29)
-       lwz 4,0(27)
-       slwi 5,3,2
-       add 5,4,5
-       addi 5,5,4
-       blrl
- # and loop.
-       b 0b
-1:
- # Now, to conform to the ELF ABI, we have to:
- # pass argv (actually _dl_argv) in r4
-       lwz 4,0(27)
- # pass argc (actually _dl_argc) in r3
-       lwz 3,0(29)
- # pass envp (actually _dl_argv+_dl_argc+1) in r5
-       slwi 5,3,2
-       add 5,4,5
-       addi 5,5,4
- # pass the auxilary vector in r6. This is passed just after _envp.
-       addi 6,5,-4
-2:     lwzu 0,4(6)
-       cmpwi 1,0,0
-       bne 2b
-       addi 6,6,4
- # pass a termination function pointer (in this case _dl_fini) in r7
-       lwz 7,_dl_fini@got(31)
- # now, call the start function in r30...
-       mtctr 30
- # pass the stack pointer in r1 (so far so good), pointing to a NULL value
- # (this lets our startup code distinguish between a program linked statically,
- # which linux will call with argc on top of the stack which will hopefully
- # never be zero, and a dynamically linked program which will always have
- # a NULL on the top of the stack).
- # Take the opportunity to clear LR, so anyone who accidentally returns
- # from _start gets SEGV.
-       li 0,0
-       stw 0,0(1)
-       mtlr 0
- # and also clear _dl_starting_up
-       lwz 26,_dl_starting_up@got(31)
-       stw 0,0(26)
- # go do it!
-       bctr
-0:
-       .size    _start,0b-_start
- # undo '.section text'.
-       .previous
-");
+  assert (sym != NULL);
+  /* The condition on the next two lines is a hack around a bug in Solaris
+     tools on Sparc.  It's not clear whether it should really be here at all,
+     but if not the binutils need to be changed.  */
+  if ((sym->st_shndx != SHN_UNDEF
+       && ELF32_ST_BIND (sym->st_info) == STB_LOCAL)
+      || rinfo == R_PPC_RELATIVE)
+    {
+      /* Has already been relocated.  */
+      loadbase = map->l_addr;
+      finaladdr = loadbase + reloc->r_addend;
+    }
+  else
+    {
+      loadbase = (Elf32_Word) (char *) (RESOLVE (&sym, version,
+                                                ELF32_R_TYPE(reloc->r_info)));
+      if (sym == NULL)
+       {
+         /* Weak symbol that wasn't actually defined anywhere.  */
+         assert(loadbase == 0);
+         finaladdr = reloc->r_addend;
+       }
+      else
+       finaladdr = (loadbase + (Elf32_Word) (char *) sym->st_value
+                    + reloc->r_addend);
+    }
 
-/* The idea here is that to conform to the ABI, we are supposed to try
-   to load dynamic objects between 0x10000 (we actually use 0x40000 as
-   the lower bound, to increase the chance of a memory reference from
-   a null pointer giving a segfault) and the program's load address.
-   Regrettably, in this code we can't find the program's load address,
-   so we punt and choose 0x01800000, which is below the ABI's
-   recommended default, and what GNU ld currently chooses. We only use
-   the address as a preference for mmap, so if we get it wrong the
-   worst that happens is that it gets mapped somewhere else.
+  /* This is an if/else if chain because GCC 2.7.2.[012] turns case
+     statements into non-PIC table lookups.  When a later version
+     comes out that fixes this, this should be changed.  */
+  if (rinfo == R_PPC_UADDR32 ||
+      rinfo == R_PPC_GLOB_DAT ||
+      rinfo == R_PPC_ADDR32 ||
+      rinfo == R_PPC_RELATIVE)
+    {
+      *reloc_addr = finaladdr;
+    }
+  else if (rinfo == R_PPC_ADDR16_LO)
+    {
+      *(Elf32_Half*) reloc_addr = finaladdr;
+    }
+  else if (rinfo == R_PPC_ADDR16_HI)
+    {
+      *(Elf32_Half*) reloc_addr = finaladdr >> 16;
+    }
+  else if (rinfo == R_PPC_ADDR16_HA)
+    {
+      *(Elf32_Half*) reloc_addr = (finaladdr + 0x8000) >> 16;
+    }
+#ifndef RTLD_BOOTSTRAP
+  else if (rinfo == R_PPC_REL24)
+    {
+      Elf32_Sword delta = finaladdr - (Elf32_Word) (char *) reloc_addr;
+      if (delta << 6 >> 6 != delta)
+       {
+         _dl_signal_error(0, map->l_name,
+                          "R_PPC_REL24 relocation out of range");
+       }
+      *reloc_addr = *reloc_addr & 0xfc000003 | delta & 0x3fffffc;
+    }
+  else if (rinfo == R_PPC_ADDR24)
+    {
+      if (finaladdr << 6 >> 6 != finaladdr)
+       {
+         _dl_signal_error(0, map->l_name,
+                          "R_PPC_ADDR24 relocation out of range");
+       }
+      *reloc_addr = *reloc_addr & 0xfc000003 | finaladdr & 0x3fffffc;
+    }
+  else if (rinfo == R_PPC_COPY)
+    {
+      if (sym->st_size != refsym->st_size)
+       {
+         const char *strtab;
 
-   FIXME: Unfortunately, 'somewhere else' is probably right after the
-   program's break, which causes malloc to fail.  We really need more
-   information here about the way memory is mapped.  */
+         strtab = ((void *) map->l_addr
+                   + map->l_info[DT_STRTAB]->d_un.d_ptr);
+         _dl_sysdep_error ("Symbol `", strtab + refsym->st_name,
+                           "' has different size in shared object, "
+                           "consider re-linking\n", NULL);
+       }
+      memcpy (reloc_addr, (char *) finaladdr, MIN (sym->st_size,
+                                                  refsym->st_size));
+    }
+#endif
+  else if (rinfo == R_PPC_REL32)
+    {
+      *reloc_addr = finaladdr - (Elf32_Word) (char *) reloc_addr;
+    }
+  else if (rinfo == R_PPC_JMP_SLOT)
+    {
+      Elf32_Sword delta = finaladdr - (Elf32_Word) (char *) reloc_addr;
+      if (delta << 6 >> 6 == delta)
+       *reloc_addr = OPCODE_B (delta);
+      else if (finaladdr <= 0x01fffffc || finaladdr >= 0xfe000000)
+       *reloc_addr = OPCODE_BA (finaladdr);
+      else
+       {
+         Elf32_Word *plt;
+         Elf32_Word index;
 
-#define ELF_PREFERRED_ADDRESS_DATA                                           \
-static ElfW(Addr) _dl_preferred_address = 1;
+         plt = (Elf32_Word *)((char *)map->l_addr
+                              + map->l_info[DT_PLTGOT]->d_un.d_val);
+         index = (reloc_addr - plt - PLT_INITIAL_ENTRY_WORDS)/2;
 
-#define ELF_PREFERRED_ADDRESS(loader, maplength, mapstartpref)               \
-( {                                                                          \
-   ElfW(Addr) prefd;                                                         \
-   if (mapstartpref != 0 && _dl_preferred_address == 1)                              \
-     _dl_preferred_address = mapstartpref;                                   \
-   if (mapstartpref != 0)                                                    \
-     prefd = mapstartpref;                                                   \
-   else if (_dl_preferred_address == 1)                                              \
-     prefd = _dl_preferred_address =                                         \
-         (0x01800000 - maplength - 0x10000) &                                \
-          ~(_dl_pagesize - 1);                                               \
-   else if (_dl_preferred_address < maplength + 0x50000)                     \
-     prefd = 0;                                                                      \
-   else                                                                              \
-     prefd = _dl_preferred_address =                                         \
-       ((_dl_preferred_address - maplength - 0x10000)                        \
-       & ~(_dl_pagesize - 1));                                               \
-   prefd;                                                                    \
-} )
+         if (index >= PLT_DOUBLE_SIZE)
+           {
+             /* Slots greater than or equal to 2^13 have 4 words available
+                instead of two.  */
+             reloc_addr[0] = OPCODE_LI (11, finaladdr);
+             reloc_addr[1] = OPCODE_ADDIS (11, 11, finaladdr + 0x8000 >> 16);
+             reloc_addr[2] = OPCODE_MTCTR (11);
+             reloc_addr[3] = OPCODE_BCTR ();
+           }
+         else
+           {
+             Elf32_Word num_plt_entries;
+
+             num_plt_entries = (map->l_info[DT_PLTRELSZ]->d_un.d_val
+                                / sizeof(Elf32_Rela));
+
+             reloc_addr[0] = OPCODE_LI (11, index*4);
+             reloc_addr[1] =
+               OPCODE_B (-(4*(index*2
+                              + 1
+                              - PLT_LONGBRANCH_ENTRY_WORDS
+                              + PLT_INITIAL_ENTRY_WORDS)));
+             plt[index+PLT_DATA_START_WORDS (num_plt_entries)] = finaladdr;
+           }
+       }
+      MODIFIED_CODE (reloc_addr);
+    }
+  else
+    assert (! "unexpected dynamic reloc type");
+
+  if (rinfo == R_PPC_ADDR16_LO ||
+      rinfo == R_PPC_ADDR16_HI ||
+      rinfo == R_PPC_ADDR16_HA ||
+      rinfo == R_PPC_REL24 ||
+      rinfo == R_PPC_ADDR24)
+    MODIFIED_CODE_NOQUEUE (reloc_addr);
+}
+
+#define ELF_MACHINE_NO_REL 1
+
+#endif
 
-#define ELF_FIXED_ADDRESS(loader, mapstart)                                  \
-( {                                                                          \
-   if (mapstart != 0 && _dl_preferred_address == 1)                          \
-     _dl_preferred_address = mapstart;                                       \
-} )
 
-#define ELF_FIXUP_RETURNS_ADDRESS 1
diff --git a/sysdeps/powerpc/fclrexcpt.c b/sysdeps/powerpc/fclrexcpt.c
new file mode 100644 (file)
index 0000000..1e66140
--- /dev/null
@@ -0,0 +1,35 @@
+/* Clear given exceptions in current floating-point environment.
+   Copyright (C) 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 <fenv_libc.h>
+
+void
+feclearexcept (int excepts)
+{
+  fenv_union_t u;
+
+  /* Get the current state.  */
+  u.fenv = fegetenv_register ();
+
+  /* Clear the relevant bits.  */
+  u.l[1] = u.l[1] & ~FE_to_sticky (excepts);
+
+  /* Put the new state in effect.  */
+  fesetenv_register (u.fenv);
+}
diff --git a/sysdeps/powerpc/fegetenv.c b/sysdeps/powerpc/fegetenv.c
new file mode 100644 (file)
index 0000000..de778fa
--- /dev/null
@@ -0,0 +1,26 @@
+/* Store current floating-point environment.
+   Copyright (C) 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 <fenv_libc.h>
+
+void
+fegetenv (fenv_t *envp)
+{
+  *envp = fegetenv_register ();
+}
diff --git a/sysdeps/powerpc/fegetround.c b/sysdeps/powerpc/fegetround.c
new file mode 100644 (file)
index 0000000..05395f0
--- /dev/null
@@ -0,0 +1,31 @@
+/* Return current rounding direction.
+   Copyright (C) 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 <fenv_libc.h>
+
+int
+fegetround (void)
+{
+  fenv_union_t u;
+
+  u.fenv = fegetenv_register ();
+
+  /* The rounding mode is bits 30 and 31 of the FPSCR.  */
+  return u.l[1] & 3;
+}
diff --git a/sysdeps/powerpc/feholdexcpt.c b/sysdeps/powerpc/feholdexcpt.c
new file mode 100644 (file)
index 0000000..a75adbf
--- /dev/null
@@ -0,0 +1,38 @@
+/* Store current floating-point environment and clear exceptions.
+   Copyright (C) 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 <fenv_libc.h>
+
+int
+feholdexcept (fenv_t *envp)
+{
+  fenv_union_t u;
+
+  /* Get the current state.  */
+  u.fenv = *envp = fegetenv_register ();
+
+  /* Clear everything except for the rounding mode and non-IEEE arithmetic
+     flag.  */
+  u.l[1] = u.l[1] & 7;
+
+  /* Put the new state in effect.  */
+  fesetenv_register (u.fenv);
+
+  return 1;
+}
diff --git a/sysdeps/powerpc/fenv_const.c b/sysdeps/powerpc/fenv_const.c
new file mode 100644 (file)
index 0000000..fa35fbc
--- /dev/null
@@ -0,0 +1,29 @@
+/* Constants for fenv_bits.h.
+   Copyright (C) 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.  */
+
+/* We want to specify the bit pattern of the __fe_*_env constants, so 
+   pretend they're really `long long' instead of `double'.  */
+
+/* If the default argument is used we use this value.  */
+const unsigned long long __fe_dfl_env __attribute__ ((aligned (8))) = 
+0xfff8000000000000ULL;
+
+/* Floating-point environment where none of the exceptions are masked.  */
+const unsigned long long __fe_nomask_env __attribute__ ((aligned (8))) = 
+0xfff80000000000f8ULL;
diff --git a/sysdeps/powerpc/fenv_libc.h b/sysdeps/powerpc/fenv_libc.h
new file mode 100644 (file)
index 0000000..45d61e1
--- /dev/null
@@ -0,0 +1,57 @@
+/* Internal libc stuff for floating point environment routines.
+   Copyright (C) 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.  */
+
+#ifndef _FENV_LIBC_H
+#define _FENV_LIBC_H   1
+
+#include <fenv.h>
+
+/* Transform a logical or of the FE_* bits to a bit pattern for the
+   appropriate sticky bits in the FPSCR.  */
+#define FE_to_sticky(excepts) \
+        (-(excepts & FE_INVALID) & FE_ALL_INVALID \
+        |  (excepts) & (FE_ALL_EXCEPT & ~FE_INVALID  | FE_ALL_INVALID))
+
+/* The sticky bits in the FPSCR indicating exceptions have occurred.  */
+#define FPSCR_STICKY_BITS ((FE_ALL_EXCEPT | FE_ALL_INVALID) & ~FE_INVALID)
+
+/* Equivalent to fegetenv, but returns a fenv_t instead of taking a
+   pointer.  */
+#define fegetenv_register() \
+        ({ fenv_t env; asm ("mffs %0" : "=f" (env)); env; })
+
+/* Equivalent to fesetenv, but takes a fenv_t instead of a pointer.  */
+#define fesetenv_register(env) \
+        ({ double d = (env); asm ("mtfsf 0xff,%0" : : "f" (d)); })
+
+/* This very handy macro:
+   - Sets the rounding mode to 'round to nearest';
+   - Sets the processor into IEEE mode; and
+   - Prevents exceptions from being raised for inexact results.
+   These things happen to be exactly what you need for typical elementary
+   functions.  */
+#define relax_fenv_state() asm ("mtfsfi 7,0")
+
+typedef union
+{
+  fenv_t fenv;
+  unsigned int l[2];
+} fenv_union_t;
+
+#endif /* fenv_libc.h */
diff --git a/sysdeps/powerpc/fenvbits.h b/sysdeps/powerpc/fenvbits.h
new file mode 100644 (file)
index 0000000..867ea5f
--- /dev/null
@@ -0,0 +1,130 @@
+/* Copyright (C) 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.  */
+
+/* This file should never be included directly.  */
+
+#ifndef _FENVBITS_H
+#define _FENVBITS_H    1
+
+/* Define bits representing the exception.  We use the bit positions of
+   the appropriate bits in the FPSCR...  */
+enum
+  {
+    FE_INEXACT = 1 << 31-6,
+#define FE_INEXACT     FE_INEXACT
+    FE_DIVBYZERO = 1 << 31-5,
+#define FE_DIVBYZERO   FE_DIVBYZERO
+    FE_UNDERFLOW = 1 << 31-4,
+#define FE_UNDERFLOW   FE_UNDERFLOW
+    FE_OVERFLOW = 1 << 31-3,
+#define FE_OVERFLOW    FE_OVERFLOW
+
+    /* ... except for FE_INVALID, for which we use bit 31. FE_INVALID
+       actually corresponds to bits 7 through 12 and 21 through 23
+       in the FPSCR, but we can't use that because the current draft
+       says that it must be a power of 2.  Instead we use bit 24 which
+       is the enable bit for all the FE_INVALID exceptions.  */
+    FE_INVALID = 1 << 31-24,
+#define FE_INVALID     FE_INVALID
+
+#ifdef __USE_GNU
+    /* Breakdown of the FE_INVALID bits. Setting FE_INVALID on an
+       input to a routine is equivalent to setting all of these bits;
+       FE_INVALID will be set on output from a routine iff one of
+       these bits is set.  Note, though, that you can't disable or
+       enable these exceptions individually.  */
+
+    /* Operation with SNaN. */
+    FE_INVALID_SNAN = 1 << 31-7,
+#define FE_INVALID_SNAN        FE_INVALID_SNAN
+
+    /* Inf - Inf */
+    FE_INVALID_ISI = 1 << 31-8,
+#define FE_INVALID_ISI FE_INVALID_ISI
+
+    /* Inf / Inf */
+    FE_INVALID_IDI = 1 << 31-9,
+#define FE_INVALID_IDI FE_INVALID_IDI
+
+    /* 0 / 0 */
+    FE_INVALID_ZDZ = 1 << 31-10,
+#define FE_INVALID_ZDZ FE_INVALID_ZDZ
+
+    /* Inf * 0 */
+    FE_INVALID_IMZ = 1 << 31-11,
+#define FE_INVALID_IMZ FE_INVALID_IMZ
+
+    /* Comparison with NaN or SNaN. */
+    FE_INVALID_COMPARE = 1 << 31-12,
+#define FE_INVALID_COMPARE     FE_INVALID_COMPARE
+
+    /* Invalid operation flag for software (not set by hardware). */
+    FE_INVALID_SOFTWARE = 1 << 31-21,
+#define FE_INVALID_SOFTWARE    FE_INVALID_SOFTWARE
+
+    /* Square root of negative number (including -Inf). */
+    FE_INVALID_SQRT = 1 << 31-22,
+#define FE_INVALID_SQRT        FE_INVALID_SQRT
+
+    /* Conversion-to-integer of a NaN or a number too large or too small. */
+    FE_INVALID_INTEGER_CONVERSION = 1 << 31-23,
+#define FE_INVALID_INTEGER_CONVERSION  FE_INVALID_INTEGER_CONVERSION
+
+#define __FE_ALL_INVALID \
+        (FE_INVALID_SNAN | FE_INVALID_ISI | FE_INVALID_IDI | FE_INVALID_ZDZ \
+        | FE_INVALID_IMZ | FE_INVALID_COMPARE | FE_INVALID_SOFTWARE \
+        | FE_INVALID_SQRT | FE_INVALID_INTEGER_CONVERSION)
+#endif
+  };
+
+#define FE_ALL_EXCEPT \
+       (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
+
+/* PowerPC chips support all of the four defined rounding modes.  We
+   use the bit pattern in the FPSCR as the values for the
+   appropriate macros.  */
+enum
+  {
+    FE_TONEAREST = 0,
+#define FE_TONEAREST   FE_TONEAREST
+    FE_TOWARDSZERO = 1,
+#define FE_TOWARDSZERO FE_TOWARDSZERO
+    FE_UPWARD = 2,
+#define FE_UPWARD      FE_UPWARD
+    FE_DOWNWARD = 3,
+#define FE_DOWNWARD    FE_DOWNWARD
+  };
+
+/* Type representing exception flags.  */
+typedef unsigned int fexcept_t;
+
+/* Type representing floating-point environment.  We leave it as 'double'
+   for efficiency reasons (rather than writing it to a 32-bit integer). */
+typedef double fenv_t;
+
+/* If the default argument is used we use this value.  */
+extern const fenv_t __fe_dfl_env;
+#define FE_DFL_ENV     (&__fe_dfl_env);
+
+#ifdef __USE_GNU
+/* Floating-point environment where none of the exceptions are masked.  */
+extern const fenv_t __fe_nomask_env;
+# define FE_NOMASK_ENV (&__fe_nomask_env);
+#endif
+
+#endif /* fenvbits.h */
diff --git a/sysdeps/powerpc/fesetenv.c b/sysdeps/powerpc/fesetenv.c
new file mode 100644 (file)
index 0000000..136a835
--- /dev/null
@@ -0,0 +1,26 @@
+/* Install given floating-point environment.
+   Copyright (C) 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 <fenv_libc.h>
+
+void
+fesetenv (const fenv_t *envp)
+{
+  fesetenv_register (*envp);
+}
diff --git a/sysdeps/powerpc/fesetround.c b/sysdeps/powerpc/fesetround.c
new file mode 100644 (file)
index 0000000..0afd6ce
--- /dev/null
@@ -0,0 +1,41 @@
+/* Set current rounding direction.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 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 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 <fenv_libc.h>
+
+int
+fesetround (int round)
+{
+  fenv_union_t u;
+
+  if ((unsigned int) round > 3)
+    return 0;
+
+  /* Get the current state.  */
+  u.fenv = fegetenv_register ();
+
+  /* Set the relevant bits.  */
+  u.l[1] = u.l[1] & ~3  |  round & 3;
+
+  /* Put the new state in effect.  */
+  fesetenv_register (u.fenv);
+
+  return 1;
+}
diff --git a/sysdeps/powerpc/feupdateenv.c b/sysdeps/powerpc/feupdateenv.c
new file mode 100644 (file)
index 0000000..b3a3f95
--- /dev/null
@@ -0,0 +1,37 @@
+/* Install given floating-point environment and raise exceptions.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 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 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 <fenv_libc.h>
+
+void
+feupdateenv (const fenv_t *envp)
+{
+  fenv_union_t old, new;
+
+  /* Save the currently set exceptions.  */
+  new.fenv = *envp;
+  old.fenv = fegetenv_register ();
+
+  /* Copy the set exceptions from `old' to `new'.  */
+  new.l[1] = new.l[1] & 0xE00000FF | old.l[1] & 0x1FFFFF00;
+
+  /* Atomically enable and raise (if appropriate) exceptions set in `new'. */
+  fesetenv_register (new.fenv);
+}
index d9d7f267afcad8c63ae053124a2d491c0ed420a9..1e65bea45943a416f6c5a825e756d76e4acf78b2 100644 (file)
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#include <bstring.h>
-
-#undef ffs
-
-#ifdef __GNUC__
+#include <string.h>
 
 int
 ffs (int x)
@@ -32,7 +28,3 @@ ffs (int x)
   asm ("cntlzw %0,%1" : "=r" (cnt) : "r" (x & -x));
   return 32 - cnt;
 }
-
-#else
-#include <sysdeps/generic/ffs.c>
-#endif
diff --git a/sysdeps/powerpc/fgetexcptflg.c b/sysdeps/powerpc/fgetexcptflg.c
new file mode 100644 (file)
index 0000000..d6bd58d
--- /dev/null
@@ -0,0 +1,33 @@
+/* Store current representation for exceptions.
+   Copyright (C) 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 <fenv_libc.h>
+
+void
+fegetexceptflag (fexcept_t *flagp, int excepts)
+{
+  fenv_union_t u;
+  unsigned int flag;
+
+  /* Get the current state.  */
+  u.fenv = fegetenv_register ();
+
+  /* Return that portion that corresponds to the requested exceptions. */
+  *flagp = flag = u.l[1] & FPSCR_STICKY_BITS & FE_to_sticky (excepts);
+}
index b31e0eeefd4cf9084d54d30b9f0bbc8cc73416ea..d21987ffd8af1ceb595e98cbb32d97fb75c7c524 100644 (file)
 #define _FPU_MASK_UM  0x20 /* underflow */
 #define _FPU_MASK_XM  0x08 /* inexact */
 #define _FPU_MASK_IM  0x80 /* invalid operation */
-#define _FPU_MASK_VXCVI 0x100 /* invalid operation for integer convert */
-#define _FPU_MASK_VXSQRT 0x200 /* invalid operation for square root */
-#define _FPU_MASK_VXSOFT 0x400 /* invalid operation raised by software */
 
-#define _FPU_RESERVED 0xfffff800 /* These bits are reserved are not changed. */
+#define _FPU_RESERVED 0xffffff00 /* These bits are reserved are not changed. */
 
-/* The fdlibm code requires no interrupts for exceptions.  Don't
-   change the rounding mode, it would break long double I/O!  */
+/* The fdlibm code requires no interrupts for exceptions.  */
 #define _FPU_DEFAULT  0x00000000 /* Default value.  */
 
 /* IEEE:  same as above, but (some) exceptions;
    we leave the 'inexact' exception off.
  */
-#define _FPU_IEEE     0x000003f0
+#define _FPU_IEEE     0x000000f0
 
 /* Type of the control word.  */
 typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
@@ -59,7 +55,7 @@ typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
   tmp[1]; } )
 #define _FPU_SETCW(cw) { \
   fpu_control_t tmp[2] __attribute__ ((__aligned__(8))); \
-  tmp[0] = 0xFFF80000; /* arbitrary, more-or-less */ \
+  tmp[0] = 0xFFF80000; /* More-or-less arbitrary; this is a QNaN. */ \
   tmp[1] = cw; \
   __asm__ ("lfd 0,%0; mtfsf 255,0" : : "m" (*tmp) : "fr0"); \
 }
diff --git a/sysdeps/powerpc/fraiseexcpt.c b/sysdeps/powerpc/fraiseexcpt.c
new file mode 100644 (file)
index 0000000..aa8f1fc
--- /dev/null
@@ -0,0 +1,44 @@
+/* Raise given exceptions.
+   Copyright (C) 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 <fenv_libc.h>
+
+void
+feraiseexcept (int excepts)
+{
+  fenv_union_t u;
+
+  /* Raise exceptions represented by EXCEPTS.  It is the responsibility of
+     the OS to ensure that if multiple exceptions occur they are fed back
+     to this process in the proper way; this can happen in hardware,
+     anyway (in particular, inexact with overflow or underflow). */
+
+  /* Get the current state.  */
+  u.fenv = fegetenv_register ();
+
+  /* Add the exceptions */
+  u.l[1] = (u.l[1]
+           | excepts & __FPSCR_STICKY_BITS
+           /* Turn FE_INVALID into FE_INVALID_SOFTWARE.  */
+           | excepts << (31 - 21) - (31 - 24)  &  __FE_INVALID_SOFTWARE);
+
+  /* Store the new status word (along with the rest of the environment),
+     triggering any appropriate exceptions.  */
+  fesetenv_register (u.fenv);
+}
diff --git a/sysdeps/powerpc/fsetexcptflg.c b/sysdeps/powerpc/fsetexcptflg.c
new file mode 100644 (file)
index 0000000..4279b74
--- /dev/null
@@ -0,0 +1,37 @@
+/* Set floating-point environment exception handling.
+   Copyright (C) 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 <fenv_libc.h>
+
+void
+fesetexceptflag (const fexcept_t *flagp, int excepts)
+{
+  fenv_union_t u;
+
+  /* Get the current state.  */
+  u.fenv = fegetenv_register ();
+
+  /* Replace the exception status */
+  u.l[1] = u.l[1] & FPSCR_STICKY_BITS  |  *flagp & FE_to_sticky (excepts);
+
+  /* Store the new status word (along with the rest of the environment).
+     This may cause floating-point exceptions if the restored state
+     requests it.  */
+  fesetenv_register (u.fenv);
+}
diff --git a/sysdeps/powerpc/ftestexcept.c b/sysdeps/powerpc/ftestexcept.c
new file mode 100644 (file)
index 0000000..52733f7
--- /dev/null
@@ -0,0 +1,38 @@
+/* Test exception in current environment.
+   Copyright (C) 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 <fenv_libc.h>
+
+int
+fetestexcept (int excepts)
+{
+  fenv_union_t u;
+  int flags;
+
+  /* Get the current state.  */
+  u.fenv = fegetenv_register ();
+
+  /* Find the bits that indicate exceptions have occurred.  */
+  flags = u.l[1] & FPSCR_STICKY_BITS;
+
+  /* Set the FE_INVALID bit if any of the FE_INVALID_* bits are set.  */
+  flags |= ((u.l[1] & FE_ALL_INVALID) != 0) << 31-24;
+
+  return flags & excepts;
+}
diff --git a/sysdeps/powerpc/mathbits.h b/sysdeps/powerpc/mathbits.h
new file mode 100644 (file)
index 0000000..2cecb6f
--- /dev/null
@@ -0,0 +1,72 @@
+/* Copyright (C) 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.  */
+
+#ifndef _MATHBITS_H
+#define _MATHBITS_H    1
+
+/* FIXME! This file describes properties of the compiler, not the machine;
+   it should not be part of libc!
+
+   FIXME! This file does not deal with the -fshort-double option of
+   gcc! */
+
+#ifdef __GNUC__
+#if __STDC__ == 1
+
+/* In GNU or ANSI mode, gcc leaves `float' expressions as-is, I think.  */
+typedef float float_t;         /* `float' expressions are evaluated as
+                                  `float'.  */
+typedef double double_t;       /* `double' expressions are evaluated as
+                                  `double'.  */
+
+/* Signal that types stay as they were declared.  */
+#define FLT_EVAL_METHOD        0
+
+/* Define `INFINITY' as value of type `float_t'.  */
+#define INFINITY       HUGE_VALF
+
+#else 
+
+/* For `gcc -traditional', `float' expressions are evaluated as `double'. */
+typedef double float_t;                /* `float' expressions are evaluated as
+                                  `double'.  */
+typedef double double_t;       /* `double' expressions are evaluated as
+                                  `double'.  */
+
+/* Signal that both types are `double'.  */
+#define FLT_EVAL_METHOD        1
+
+/* Define `INFINITY' as value of type `float_t'.  */
+#define INFINITY       HUGE_VAL
+
+#endif
+#else
+
+/* Wild guess at types for float_t and double_t. */
+typedef double float_t;
+typedef double double_t;
+
+/* Strange compiler, we don't know how it works.  */
+#define FLT_EVAL_METHOD        -1
+
+/* Define `INFINITY' as value of type `float_t'.  */
+#define INFINITY       HUGE_VAL
+
+#endif
+
+#endif /* mathbits.h */
index 755ef6504c9f9611df4bd147aa855a2aec549b3f..af10581af0132074d48926cafd71d781d8050e8f 100644 (file)
 #include <jmp_buf.h>
 
 ENTRY (__sigsetjmp)
-       stw 1,(JB_GPR1*4)(3)
-       mflr 0
-       stw 2,(JB_GPR2*4)(3)
-       stw 14,((JB_GPRS+0)*4)(3)
-       stfd 14,((JB_FPRS+0*2)*4)(3)
-       stw 0,(JB_LR*4)(3)
-       stw 15,((JB_GPRS+1)*4)(3)
-       stfd 15,((JB_FPRS+1*2)*4)(3)
-       stw 16,((JB_GPRS+2)*4)(3)
-       stfd 16,((JB_FPRS+2*2)*4)(3)
-       stw 17,((JB_GPRS+3)*4)(3)
-       stfd 17,((JB_FPRS+3*2)*4)(3)
-       stw 18,((JB_GPRS+4)*4)(3)
-       stfd 18,((JB_FPRS+4*2)*4)(3)
-       stw 19,((JB_GPRS+5)*4)(3)
-       stfd 19,((JB_FPRS+5*2)*4)(3)
-       stw 20,((JB_GPRS+6)*4)(3)
-       stfd 20,((JB_FPRS+6*2)*4)(3)
-       stw 21,((JB_GPRS+7)*4)(3)
-       stfd 21,((JB_FPRS+7*2)*4)(3)
-       stw 22,((JB_GPRS+8)*4)(3)
-       stfd 22,((JB_FPRS+8*2)*4)(3)
-       stw 23,((JB_GPRS+9)*4)(3)
-       stfd 23,((JB_FPRS+9*2)*4)(3)
-       stw 24,((JB_GPRS+10)*4)(3)
-       stfd 24,((JB_FPRS+10*2)*4)(3)
-       stw 25,((JB_GPRS+11)*4)(3)
-       stfd 25,((JB_FPRS+11*2)*4)(3)
-       stw 26,((JB_GPRS+12)*4)(3)
-       stfd 26,((JB_FPRS+12*2)*4)(3)
-       stw 27,((JB_GPRS+13)*4)(3)
-       stfd 27,((JB_FPRS+13*2)*4)(3)
-       stw 28,((JB_GPRS+14)*4)(3)
-       stfd 28,((JB_FPRS+14*2)*4)(3)
-       stw 29,((JB_GPRS+15)*4)(3)
-       stfd 29,((JB_FPRS+15*2)*4)(3)
-       stw 30,((JB_GPRS+16)*4)(3)
-       stfd 30,((JB_FPRS+16*2)*4)(3)
-       stw 31,((JB_GPRS+17)*4)(3)
-       stfd 31,((JB_FPRS+17*2)*4)(3)
+       stw  %r1,(JB_GPR1*4)(3)
+       mflr %r0
+       stw  %r2,(JB_GPR2*4)(3)
+       stw  %r14,((JB_GPRS+0)*4)(3)
+       stfd %f14,((JB_FPRS+0*2)*4)(3)
+       stw  %r0,(JB_LR*4)(3)
+       stw  %r15,((JB_GPRS+1)*4)(3)
+       stfd %f15,((JB_FPRS+1*2)*4)(3)
+       stw  %r16,((JB_GPRS+2)*4)(3)
+       stfd %f16,((JB_FPRS+2*2)*4)(3)
+       stw  %r17,((JB_GPRS+3)*4)(3)
+       stfd %f17,((JB_FPRS+3*2)*4)(3)
+       stw  %r18,((JB_GPRS+4)*4)(3)
+       stfd %f18,((JB_FPRS+4*2)*4)(3)
+       stw  %r19,((JB_GPRS+5)*4)(3)
+       stfd %f19,((JB_FPRS+5*2)*4)(3)
+       stw  %r20,((JB_GPRS+6)*4)(3)
+       stfd %f20,((JB_FPRS+6*2)*4)(3)
+       stw  %r21,((JB_GPRS+7)*4)(3)
+       stfd %f21,((JB_FPRS+7*2)*4)(3)
+       stw  %r22,((JB_GPRS+8)*4)(3)
+       stfd %f22,((JB_FPRS+8*2)*4)(3)
+       stw  %r23,((JB_GPRS+9)*4)(3)
+       stfd %f23,((JB_FPRS+9*2)*4)(3)
+       stw  %r24,((JB_GPRS+10)*4)(3)
+       stfd %f24,((JB_FPRS+10*2)*4)(3)
+       stw  %r25,((JB_GPRS+11)*4)(3)
+       stfd %f25,((JB_FPRS+11*2)*4)(3)
+       stw  %r26,((JB_GPRS+12)*4)(3)
+       stfd %f26,((JB_FPRS+12*2)*4)(3)
+       stw  %r27,((JB_GPRS+13)*4)(3)
+       stfd %f27,((JB_FPRS+13*2)*4)(3)
+       stw  %r28,((JB_GPRS+14)*4)(3)
+       stfd %f28,((JB_FPRS+14*2)*4)(3)
+       stw  %r29,((JB_GPRS+15)*4)(3)
+       stfd %f29,((JB_FPRS+15*2)*4)(3)
+       stw  %r30,((JB_GPRS+16)*4)(3)
+       stfd %f30,((JB_FPRS+16*2)*4)(3)
+       stw  %r31,((JB_GPRS+17)*4)(3)
+       stfd %f31,((JB_FPRS+17*2)*4)(3)
 #ifdef PIC
        b __sigjmp_save@plt
 #else
index eb6a88e2b85ccf1d663c891fb24a52e3e89347e6..fa1c670912366c663646750afe760e6a4e4edadb 100644 (file)
  # them, the others we must save.
 
        .section ".text"
-       .align 3
+       .align 2
        .globl strlen
        .type strlen,@function
 strlen:
  # On entry, r3 points to the string, and it's left that way.
- # We use r6 to store 0x01010101, and r7 to store 0x7f7f7f7f.
+ # We use r6 to store 0xfefefeff, and r7 to store 0x7f7f7f7f.
  # r4 is used to keep the current index into the string; r5 holds
  # the number of padding bits we prepend to the string to make it
  # start at a word boundary. r8 holds the 'current' word.
  # r9-12 are temporaries. r0 is used as a temporary and for discarded
  # results.
-       clrrwi 4,3,2
-       lis 6,0xfeff
-       lis 7,0x7f7f
-       rlwinm 10,3,0,29,29
-       lwz 8,0(4)
-       addi 7,7,0x7f7f
-       rlwinm 5,3,3,27,28
-       cmpwi 1,10,0
-       li 9,-1
+       clrrwi %r4,%r3,2
+       lis   %r6,0xfeff
+       lis   %r7,0x7f7f
+       rlwinm %r10,%r3,0,29,29
+       lwz   %r8,0(%r4)
+       addi  %r7,%r7,0x7f7f
+       rlwinm %r5,%r3,3,27,28
+       cmpwi %cr1,%r10,0
+       li    %r9,-1
  # That's the setup done, now do the first pair of words.
  # We make an exception and use method (2) on the first two words, to reduce
  # overhead.
-       srw 9,9,5
-       and 0,7,8
-       or 10,7,8
-       add 0,0,7
-       nor 0,10,0
-       and. 8,0,9
-       bne done0
+       srw   %r9,%r9,%r5
+       and   %r0,%r7,%r8
+       or    %r10,%r7,%r8
+       add   %r0,%r0,%r7
+       nor   %r0,%r10,%r0
+       and.  %r8,%r0,%r9
+       bne   done0
  # Handle second word of pair. Put addi between branches to avoid hurting
  # branch prediction.
-       addi 6,6,0xfffffeff
-
-       bne 1,loop
-       lwzu 8,4(4)
-       and 0,7,8
-       or 10,7,8
-       add 0,0,7
-       nor. 0,10,0
-       bne done0
+       addi  %r6,%r6,0xfffffeff
+       
+       bne   %cr1,loop
+       lwzu  %r8,4(%r4)
+       and   %r0,%r7,%r8
+       or    %r10,%r7,%r8
+       add   %r0,%r0,%r7
+       nor.  %r8,%r10,%r0
+       bne   done0
 
  # The loop.
+       
+loop:  lwz   %r8,4(%r4)
+       lwzu  %r9,8(%r4)
+       add   %r0,%r6,%r8
+       nor   %r10,%r7,%r8
+       and.  %r0,%r0,%r10
+       add   %r11,%r6,%r9
+       nor   %r12,%r7,%r9
+       bne   done1
+       and.  %r0,%r11,%r12
+       beq   loop
 
-loop:  lwz 8,4(4)
-       lwzu 9,8(4)
-       add 0,6,8
-       nor 10,7,8
-       and. 0,0,10
-       add 11,6,9
-       nor 12,7,9
-       bne done1
-       and. 0,11,12
-       beq loop
-
-       and 0,7,9
-       or 10,7,9
-       b done2
-
-done1: addi 4,4,-4
-       and 0,7,9
-       or 10,7,9
-done2: add 0,0,7
-       nor 0,10,0
-
+       and   %r0,%r7,%r9
+       add   %r0,%r0,%r7
+       andc  %r8,%r12,%r0
+       b     done0
+       
+done1: and   %r0,%r7,%r8
+       subi  %r4,%r4,4
+       add   %r0,%r0,%r7
+       andc  %r8,%r10,%r0
+       
  # When we get to here, r4 points to the first word in the string that
  # contains a zero byte, and the most significant set bit in r8 is in that
  # byte.
-done0: cntlzw 11,8
-       subf 0,3,4
-       srwi 11,11,3
-       add 3,0,11
+done0: cntlzw %r11,%r8
+       subf  %r0,%r3,%r4
+       srwi  %r11,%r11,3
+       add   %r3,%r0,%r11
        blr
 0:
        .size    strlen,0b-strlen
index 44e7a434d2779b15e995f35ad65bbf16d9e6b72a..598c15c01a78003a3e303d48ef784760f47226fd 100644 (file)
@@ -19,7 +19,7 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
 #include <ansidecl.h>
-#include <bstring.h>
+#include <string.h>
 
 #undef ffs
 
index 9e93668d967a0e30333b693c397717f18f55e5a5..84c63542ccb6f5d9f19238edb87c8a434d047cf7 100644 (file)
@@ -25,6 +25,7 @@ ENTRY (__sigsetjmp)
        /* Save our SP and FP; in the delay slot of the jump, save our
           return PC.  Save the signal mask if requested with a tail-call
           for simplicity; it always returns zero.  */
+       ta   ST_FLUSH_WINDOWS
 #ifdef PIC
        mov  %o7,%g1
 2:
diff --git a/sysdeps/standalone/arm/errnos.h b/sysdeps/standalone/arm/errnos.h
new file mode 100644 (file)
index 0000000..0b635e6
--- /dev/null
@@ -0,0 +1,49 @@
+/* Copyright (C) 1991, 1994, 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., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+/* This file defines the `errno' constants for standalone ARM machines.
+   These constants are essentially arbitrary.  */
+
+#if !defined(__Emath_defined) && (defined(_ERRNO_H) || defined(__need_Emath))
+#undef __need_Emath
+#define        __Emath_defined 1
+
+#define        EDOM            1
+#define        ERANGE          2
+#endif
+
+#ifdef _ERRNO_H
+#define        ENOSYS          3
+#define        EINVAL          4
+#define        ESPIPE          5
+#define        EBADF           6
+#define        ENOMEM          7
+#define        EACCES          8
+#define ENFILE         9
+#define EMFILE         10
+#define        ENAMETOOLONG    11      /* File name too long */
+#define        ELOOP           12      /* Too many symbolic links encountered */
+#define ENOMSG          13      /* No message of desired type */
+#define        E2BIG           14      /* Arg list too long */
+#define EINTR          15
+#define EILSEQ         16
+#define ENOEXEC                17
+#define ENOENT         18
+#endif
+
+#define __set_errno(val) errno = (val)
index 20c4922fb98aee63cc4c8a430448c9d678df9aed..064513222e585c6ca5a427ed0064630881f832ec 100644 (file)
@@ -28,7 +28,7 @@ Cambridge, MA 02139, USA.  */
    The miscellaneous Unix `readdir' implementations read directory data
    into a buffer and fill in a `struct dirent' copy in the `DIR' object. */
 
-typedef struct
+struct __dirstream
   {
     int __fd;                  /* File descriptor.  */
 
@@ -38,6 +38,6 @@ typedef struct
     size_t __size;             /* Total valid data in the block.  */
 
     struct dirent __entry;     /* Returned by `readdir'.  */
-  } DIR;
+  };
 
 #endif /* dirstream.h */
index f84425b5a4ea73a4cbe8a7c60822262e602b5068..4b22f31bd6249bedb7340d44b5fefd861eeef798 100644 (file)
@@ -20,4 +20,4 @@
 struct dirent
   {
     char d_name[1];            /* Variable length.  */
-  }
+  };
index ce40a280130dd8e7e6269ba25720b65d52b76ee6..767bc215f8cf2254943a2043094496cd97cf90ff 100644 (file)
@@ -23,7 +23,7 @@
 
 int
 dirfd (dirp)
-     FILE *dirp;
+     DIR *dirp;
 {
   __set_errno (ENOSYS);
   return -1;
diff --git a/sysdeps/stub/if_index.c b/sysdeps/stub/if_index.c
new file mode 100644 (file)
index 0000000..f1cb0c5
--- /dev/null
@@ -0,0 +1,36 @@
+/* Copyright (C) 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., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+unsigned int if_nametoindex(const char *ifname)
+{
+  return 0;
+}
+
+char *if_indextoname(unsigned int ifindex, char *ifname)
+{
+  return NULL;
+}
+
+void if_freenameindex(struct if_nameindex *ifn)
+{
+}
+
+struct if_nameindex *if_nameindex(void)
+{
+  return NULL;
+}
index fe40c8b51d15acce07997c6c1b71aa4e595f4fad..514b59d2b83ffd9c01f064c24e14d781bd7cacac 100644 (file)
@@ -24,7 +24,7 @@ Cambridge, MA 02139, USA.  */
 /* Seek to position POS in DIRP.  */
 void
 seekdir (dirp, pos)
-     DIR *dirp
+     DIR *dirp;
      off_t pos;
 {
   if (dirp == NULL)
index 737257fa7fce5d9f6791118d97124ac1a2c044dd..21af5173c9c9058af553bf27f8dbd25006eefa80 100644 (file)
@@ -1,20 +1,20 @@
-/* Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1991, 1994, 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
-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.  */
 
 #include <stddef.h>
 #include <errno.h>
@@ -26,7 +26,7 @@ Cambridge, MA 02139, USA.  */
 int
 __setitimer (which, new, old)
      enum __itimer_which which;
-     struct itimerval *new;
+     const struct itimerval *new;
      struct itimerval *old;
 {
   if (new == NULL)
index 1344d45044fb2051c221cf59230c87a348ccc65d..523daec8ada2461ae4c109852f50f7b6cd4ea5e0 100644 (file)
@@ -26,7 +26,7 @@ int
 __sigaction (sig, act, oact)
      int sig;
      const struct sigaction *act;
-     struct sigaction *OACT;
+     struct sigaction *oact;
 {
   if (sig <= 0 || sig >= NSIG)
     {
index 8a3e73b40609b694635fca5c10a820d31fd414c6..b1ea52add932983016b37971eeba637bbb4dcc5a 100644 (file)
@@ -6,3 +6,5 @@
    the installed headers on the system.  */
 
 #include <limits.h>
+
+#define MAXSYMLINKS  1
index 00480fb2e90dccdbf27710d20dcfbc4b2b178a70..3d3c0e9759aeeff3215075930d5645ec003204f6 100644 (file)
@@ -164,10 +164,10 @@ __sysconf (name)
     case _SC_SEMAPHORES:
     case _SC_SHARED_MEMORY_OBJECTS:
 
-    case _SC_AIO_LIST_MAX:
+    case _SC_AIO_LISTIO_MAX:
     case _SC_AIO_MAX:
     case _SC_AIO_PRIO_DELTA_MAX:
-    case _SC_DELAYTIME_MAX:
+    case _SC_DELAYTIMER_MAX:
     case _SC_MQ_OPEN_MAX:
     case _SC_MQ_PRIO_MAX:
     case _SC_VERSION:
index 984d4becd3a6e5ac24cc5d2a063e2001dbb51056..b93b948ca606001aa4578ebeb36fe09f73bbff82 100644 (file)
@@ -26,7 +26,7 @@
    Return the generated filename or NULL if one could not
    be generated, putting the length of the string in *LENPTR.  */
 char *
-__stdio_gen_tempname (buf, bufsize, dir, pfx, dir_search, lenptr)
+__stdio_gen_tempname (buf, bufsize, dir, pfx, dir_search, lenptr, streamptr)
      char *buf;
      size_t bufsize;
      const char *dir;
index f7ae1210977bf298234a775c24f5c7bba7c30d29..88c855eb117649f9bd9a529df221b1f4f891545f 100644 (file)
@@ -18,6 +18,7 @@ Cambridge, MA 02139, USA.  */
  
 #include <errno.h>
 #include <stdio.h>
+#include <stdarg.h>
 
 /* Write formatted output to file descriptor D according to the format string
    FORMAT, using the argument list in ARG.  */
@@ -25,38 +26,7 @@ int
 vdprintf (int d, const char *format, va_list arg)
 {
   __set_errno (ENOSYS);
-  return NULL;
-}
-
-stub_warning (vdprintf)
-/* Copyright (C) 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., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-#include <errno.h>
-#include <stdio.h>
-
-/* Write formatted output to file descriptor D according to the format string
-   FORMAT, using the argument list in ARG.  */
-int
-vdprintf (int d, const char *format, va_list arg)
-{
-  __set_errno (ENOSYS);
-  return NULL;
+  return 0;
 }
 
 stub_warning (vdprintf)
diff --git a/sysdeps/unix/arm/fork.S b/sysdeps/unix/arm/fork.S
new file mode 100644 (file)
index 0000000..baa33e3
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 1991, 1992, 1994, 1995, 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., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <sysdep.h>
+
+/* ARM version.  */
+
+SYSCALL__ (fork, 0)
+       /* R1 is now 0 for the parent and 1 for the child.  Decrement it to
+          make it -1 (all bits set) for the parent, and 0 (no bits set)
+          for the child.  Then AND it with R0, so the parent gets
+          R0&-1==R0, and the child gets R0&0==0.  */
+       sub r1, r1, $1
+       and r0, r0, r1
+       RETINSTR(mov, pc, r14)
+PSEUDO_END(fork)
+
+weak_alias (__fork, fork)
index 18e812b9f1d28b23f650aedc3df74cd980db538b..1c580731bacf6b889a6c197560ea627d20635307 100644 (file)
@@ -19,3 +19,8 @@ Cambridge, MA 02139, USA.  */
 #include <sysdeps/unix/sysdep.h>
 #include <sysdeps/arm/sysdep.h>
 
+/* Some definitions to allow the assembler in sysdeps/unix/*.S to build
+   without needing ARM-specific versions of all the files.  */
+
+#define ret            RETINSTR(mov, pc, r14)
+#define MOVE(a,b)      mov b,a
diff --git a/sysdeps/unix/sysv/linux/arm/clone.S b/sysdeps/unix/sysv/linux/arm/clone.S
new file mode 100644 (file)
index 0000000..c7e7aed
--- /dev/null
@@ -0,0 +1,33 @@
+/* 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.  */
+
+/* clone() is even more special than fork() as it mucks with stacks
+   and invokes a function in the right context after its all over.  */
+
+#include <sysdep.h>
+#define _ERRNO_H       1
+#include <errnos.h>
+
+/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
+
+        .text
+ENTRY(__clone)
+       /* Somebody needs to write this.  */
+PSEUDO_END (__clone)
+
+weak_alias (__clone, clone)
diff --git a/sysdeps/unix/sysv/linux/arm/socket.S b/sysdeps/unix/sysv/linux/arm/socket.S
new file mode 100644 (file)
index 0000000..e8db072
--- /dev/null
@@ -0,0 +1,49 @@
+/* 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
+   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 <sysdep.h>
+#include <sys/socketcall.h>
+
+#define P(a, b) P2(a, b)
+#define P2(a, b) a##b
+
+       .text
+/* The socket-oriented system calls are handled unusally in Linux.
+   They are all gated through the single `socketcall' system call number.
+   `socketcall' takes two arguments: the first is the subcode, specifying
+   which socket function is being called; and the second is a pointer to
+   the arguments to the specific function.
+
+   The .S files for the other calls just #define socket and #include this.  */
+
+.globl P(__,socket)
+ENTRY (P(__,socket))
+
+        /* Do the system call trap.  */
+       swi SYS_ify(socketcall)
+
+       /* %eax is < 0 if there was an error.  */
+       cmn r0, $124
+       bge syscall_error
+
+       /* Successful; return the syscall's value.  */
+       RETINSTR(mov,pc,r14)
+
+PSEUDO_END (P(__,socket))
+
+weak_alias (P(__,socket), socket)
diff --git a/sysdeps/unix/sysv/linux/arm/syscall.S b/sysdeps/unix/sysv/linux/arm/syscall.S
new file mode 100644 (file)
index 0000000..7a87278
--- /dev/null
@@ -0,0 +1,47 @@
+/* Copyright (C) 1995, 1996 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 <sysdep.h>
+
+/* Please consult the file sysdeps/unix/sysv/linux/arm/sysdep.h for
+   more information about the value -4095 used below.*/
+
+       .text
+ENTRY (syscall)
+
+       /* 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  
+       str r0, [sp]
+       ldr r0, _reti
+       str r0, [sp, $4]
+       adr r0, _ret
+       str r0, [sp, $8]
+       mov r0, r1
+       mov r1, r2
+       mov r2, r3
+       mov pc, sp
+_ret:  add sp, sp, $0xc
+       RETINSTR(mov, pc, r14)
+
+_reti: .word   0xe51ff004      @ ldr pc, [pc, $4]
+       
+PSEUDO_END (syscall)
diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h
new file mode 100644 (file)
index 0000000..6478a5d
--- /dev/null
@@ -0,0 +1,73 @@
+/* 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. 
+
+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.  */
+
+#ifndef _LINUX_ARM_SYSDEP_H
+#define _LINUX_ARM_SYSDEP_H 1
+
+/* There is some commonality.  */
+#include <sysdeps/unix/arm/sysdep.h>
+
+/* For Linux we can use the system call table in the header file
+       /usr/include/asm/unistd.h
+   of the kernel.  But these symbols do not follow the SYS_* syntax
+   so we have to redefine the `SYS_ify' macro here.  */
+#undef SYS_ify
+#define SWI_BASE  (9 << 20)
+#define SYS_ify(syscall_name)  (SWI_BASE + __NR_##syscall_name)
+
+
+#ifdef ASSEMBLER
+
+/* Linux uses a negative return value to indicate syscall errors,
+   unlike most Unices, which use the condition codes' carry flag.
+
+   Since version 2.1 the return value of a system call might be
+   negative even if the call succeeded.  E.g., the `lseek' system call
+   might return a large offset.  Therefore we must not anymore test
+   for < 0, but test for a real error by making sure the value in %eax
+   is a real error number.  Linus said he will make sure the no syscall
+   returns a value in -1 .. -4095 as a valid result so we can savely
+   test with -4095.  */
+#undef PSEUDO
+#define        PSEUDO(name, syscall_name, args)                                      \
+  .text;                                                                     \
+  ENTRY (name)                                                               \
+    DO_CALL (args, syscall_name);                                            \
+    cmn r0, $4096;                                                           \
+    bge syscall_error;
+
+#undef PSEUDO_END
+#define        PSEUDO_END(name)                                                      \
+  SYSCALL_ERROR_HANDLER                                                              \
+  END (name)
+
+#ifndef PIC
+#define SYSCALL_ERROR_HANDLER  /* Nothing here; code in sysdep.S is used.  */
+#else
+#error Aiee 
+#endif /* PIC */
+
+#undef DO_CALL
+#define DO_CALL(args, syscall_name)                                          \
+    swi SYS_ify (syscall_name);                                              
+
+#endif /* ASSEMBLER */
+
+#endif /* linux/arm/sysdep.h */
diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c
new file mode 100644 (file)
index 0000000..3f5a890
--- /dev/null
@@ -0,0 +1,140 @@
+/* Copyright (C) 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., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <net/if.h>
+
+#define IF_INET6_FILENAME   "/proc/net/if_inet6"
+
+/* /proc/net/if_inet6 contains lines that look like this:
+ *
+ * fe8000000000000000000000836fc168 0b 00 20 80     sit7 
+ *                        
+ *                               |   |  |  |  |      |
+ *                     address --'   |  |  |  |      |
+ *                     index --------'  |  |  |      |
+ *                     prefix length ---'  |  |      |
+ *                     scope --------------'  |      |
+ *                     flags -----------------'      |
+ *                     name -------------------------'
+ *
+ */
+
+static int get_one_interface(FILE *fd, char *interface, int iflen, unsigned int *index)
+{
+  char buffer[80];
+  static char seps[] = " \012";
+  char *c = buffer;
+  char *sp;
+  if (!fgets(buffer, 80, fd))
+    return 1;
+  if (strtok_r(buffer, seps, &sp) == NULL) return 1;
+  if (c = strtok_r(NULL, seps, &sp), c == NULL) return 1;
+  *index = strtoul(c, NULL, 16);
+  if (strtok_r(NULL, seps, &sp) == NULL) return 1;
+  if (strtok_r(NULL, seps, &sp) == NULL) return 1;
+  if (strtok_r(NULL, seps, &sp) == NULL) return 1;
+  if (c = strtok_r(NULL, seps, &sp), c == NULL) return 1;
+  strncpy(interface, c, iflen);
+  return 0;
+}
+
+unsigned int if_nametoindex(const char *ifname)
+{
+  FILE *fd = fopen(IF_INET6_FILENAME, "r");
+  char this_ifname[IFNAMSIZ];
+  unsigned int this_index;
+  if (!fd) return 0;
+  while (get_one_interface(fd, this_ifname, IFNAMSIZ, &this_index) == 0) {
+    if (!strcmp(this_ifname, ifname)) {
+      fclose(fd);
+      return this_index;
+    }
+  } 
+  fclose(fd);
+  return 0;
+}
+
+char *if_indextoname(unsigned int ifindex, char *ifname)
+{
+  FILE *fd = fopen(IF_INET6_FILENAME, "r");
+  unsigned int this_index;
+  if (!fd) return NULL;
+  while (get_one_interface(fd, ifname, IFNAMSIZ, &this_index) == 0) {
+    if (this_index == ifindex) {
+      fclose(fd);
+      return ifname;
+    }
+  } 
+  fclose(fd);
+  return NULL;
+}
+
+void if_freenameindex(struct if_nameindex *ifn)
+{
+  struct if_nameindex *ptr = ifn;
+  while (ptr->if_name || ptr->if_index) 
+    {
+      if (ptr->if_name)
+       free(ptr->if_name);
+      ptr++;
+    }
+  free(ifn);
+}
+
+struct if_nameindex *if_nameindex(void)
+{
+  FILE *fd = fopen(IF_INET6_FILENAME, "r");
+  struct if_nameindex *ifn = NULL;
+  int nifs = 0;
+  if (!fd) return NULL;
+  do 
+    {
+      struct if_nameindex *newifn;
+      nifs++;
+      newifn = realloc(ifn, nifs*sizeof(struct if_nameindex));
+      if (!newifn) 
+       {
+         /* We ran out of memory. */
+         if (--nifs) 
+           {
+             free(ifn[nifs-1].if_name);
+             ifn[nifs-1].if_name = 0;
+             ifn[nifs-1].if_index = 0;
+             if_freenameindex(ifn);
+           }
+         return NULL;
+       }
+      ifn = newifn;
+      ifn[nifs-1].if_index = 0;
+      ifn[nifs-1].if_name = malloc(IFNAMSIZ);
+      if (ifn[nifs-1].if_name == NULL) 
+       {
+         if_freenameindex(ifn);
+         return NULL;
+       }
+    }
+  while (get_one_interface(fd, ifn[nifs-1].if_name, IFNAMSIZ, 
+                          &ifn[nifs-1].if_index) == 0);
+  free(ifn[nifs-1].if_name);
+  ifn[nifs-1].if_name = NULL;
+  fclose(fd);
+  return ifn;
+}
index 9a3e4d0e58027d81a385db5438b53b29f701101a..473c2ec5b273815acc43ed6399b116f9ea30c8e9 100644 (file)
@@ -1,5 +1,7 @@
 # File name    Caller  Syscall name    # args  Strong name     Weak names
 
+cacheflush     EXTRA   cacheflush      4       __cacheflush    cacheflush
+
 s_getgroups    getgroups getgroups     2       __syscall_getgroups
 s_llseek       llseek  _llseek         5       __sys_llseek
 s_setgroups    setgroups setgroups     2       __syscall_setgroups
index db86d20f23fff7331e309d8b7894950e0e46315c..01e9f00943cf089263a41f3eef0371c994aaaa09 100644 (file)
@@ -144,4 +144,23 @@ struct ifconf
 #define        ifc_buf ifc_ifcu.ifcu_buf       /* Buffer address.  */
 #define        ifc_req ifc_ifcu.ifcu_req       /* Array of structures.  */
 
+
+/* Convert an interface name to an index, and vice versa.  */
+
+unsigned int  if_nametoindex(const char *ifname);
+char  *if_indextoname(unsigned int ifindex, char *ifname);
+
+/* Return a list of all interfaces and their indices.  */
+
+struct if_nameindex {
+  unsigned int   if_index;  /* 1, 2, ... */
+  char          *if_name;   /* null terminated name: "eth0", ... */
+};
+
+struct if_nameindex  *if_nameindex(void);
+
+/* Free the data returned from if_nameindex.  */
+
+void  if_freenameindex(struct if_nameindex *ptr);
+
 #endif /* net/if.h */
index bbc625435c9d93b78b0caad76d9d33d1c9734c3b..451f8f5a2062f6301fcf30d799bed82de20ab5b8 100644 (file)
@@ -259,7 +259,7 @@ extern u_int16_t htons __P ((u_int16_t __hostshort));
 
 /* IPV6 socket options.  */
 #define IPV6_ADDRFORM          1
-#define IPV6_RXINFO            2
+#define IPV6_PKTINFO           2
 #define IPV6_RXHOPOPTS         3
 #define IPV6_RXDSTOPTS         4
 #define IPV6_RXSRCRT           5
@@ -267,8 +267,6 @@ extern u_int16_t htons __P ((u_int16_t __hostshort));
 #define IPV6_CHECKSUM          7
 #define IPV6_HOPLIMIT          8
 
-#define IPV6_TXINFO            IPV6_RXINFO
-#define SCM_SRCINFO            IPV6_TXINFO
 #define SCM_SRCRT              IPV6_RXSRCRT
 
 #define IPV6_UNICAST_HOPS      16
@@ -306,6 +304,14 @@ extern u_int16_t htons __P ((u_int16_t __hostshort));
 /* Bind socket to a priviledged IP port.  */
 extern int bindresvport __P ((int __sockfd, struct sockaddr_in *__sin));
 
+
+/* IPv6 packet information.  */
+struct in6_pktinfo 
+  {
+    struct in6_addr ipi6_addr;    /* src/dst IPv6 address */
+    int             ipi6_ifindex; /* send/recv interface index */
+  };
+
 __END_DECLS
 
 #endif /* netinet/in.h */
index d255abfe0f63596de2dad36bd4a013161434aadd..068b14c538abd9057358b75e7807b449044515d0 100644 (file)
 
 ENTRY(__clone)
        /* Set up stack frame, save registers.  */
-       stwu 1,-32(1)
-       stw 31,16(1)
-       stw 30,20(1)
+       stwu  %r1,-32(%r1)
+       stw   %r31,16(%r1)
+       stw   %r30,20(%r1)
 
        /* Check for child_stack == NULL || fn == NULL.  */
-       cmpwi 0,4,0
-       cmpwi 1,3,0
-       cror 2+0*4,2+0*4,2+1*4
-       beq- 0,badargs
+       cmpwi %cr0,%r4,0
+       beq-  %cr0,badargs
+       cmpwi %cr1,%r3,0
+       beq-  %cr1,badargs
 
        /* Set up stack frame for child.  */
-       addi 4,4,-16
-       clrrwi 4,4,4
-       li 0,0
-       stw 0,0(4)
+       addi  %r4,%r4,-16
+       clrrwi %r4,%r4,4
+       li    %r0,0
+       stw   %r0,0(%r4)
 
        /* Save new stack, fn, args across syscall.  */
-       mr 30,3         /* Function in r30.  */
-       mr 31,6         /* Arguments in r31.  */
+       mr    %r30,%r3          /* Function in r30.  */
+       mr    %r31,%r6          /* Arguments in r31.  */
 
        /* 'flags' argument is first parameter to clone syscall. (The other
           argument is the stack pointer, already in r4.)  */
-       mr 3,5
+       mr    %r3,%r5
 
        /* Do the call.  */
        DO_CALL(SYS_ify(clone))
-       bso- error
-       beq child
+       bso-  error
+       beq   child
 
        /* Parent.  Restore registers & return.  */
-       lwz 31,16(1)
-       lwz 30,20(1)
-       addi 1,1,32
+       lwz   %r31,16(%r1)
+       lwz   %r30,20(%r1)
+       addi  %r1,%r1,32
        blr
 
 child:
        /* Call procedure.  */
-       mtlr 30
-       mr 3,31
+       mtlr  %r30
+       mr    %r3,%r31
        blrl
        /* Call _exit with result from procedure.  */
 #ifdef PIC
index 12417faac6d964eaabdb39334abf548010b9b582..305aba928140c984f1d7c58b52733cacef8519ec 100644 (file)
 
        .text
 ENTRY(P(__,socket))
-       stwu 1,-48(1)
+       stwu %r1,-48(%r1)
 #if NARGS >= 1
-       stw 3,stackblock(1)
+       stw  %r3,stackblock(%r1)
 #endif
 #if NARGS >= 2
-       stw 4,4+stackblock(1)
+       stw  %r4,4+stackblock(%r1)
 #endif
 #if NARGS >= 3
-       stw 5,8+stackblock(1)
+       stw  %r5,8+stackblock(%r1)
 #endif
 #if NARGS >= 4
-       stw 6,12+stackblock(1)
+       stw  %r6,12+stackblock(%r1)
 #endif
 #if NARGS >= 5
-       stw 7,16+stackblock(1)
+       stw  %r7,16+stackblock(%r1)
 #endif
 #if NARGS >= 6
-       stw 8,20+stackblock(1)
+       stw  %r8,20+stackblock(%r1)
 #endif
 #if NARGS >= 7
-       stw 9,24+stackblock(1)
+       stw  %r9,24+stackblock(%r1)
 #endif
 #if NARGS >= 8
-       stw 10,28+stackblock(1)
+       stw  %r10,28+stackblock(%r1)
 #endif
 #if NARGS >= 9
 #error too many arguments!
 #endif
-       li 3,P(SOCKOP_,socket)
-       addi 4,1,stackblock
+       li   %r3,P(SOCKOP_,socket)
+       addi %r4,%r1,stackblock
        DO_CALL(SYS_ify(socketcall))
-       addi 1,1,48
+       addi %r1,%r1,48
        bnslr
 #ifdef PIC
        b __syscall_error@plt
index 441dd5d433f8ad863d09604dfb379844ea22e2c8..2cb548245be19e44f9839222db1e42a78b4638ce 100644 (file)
 
        .text
 ENTRY (syscall)
-       mr      0,3
-       mr      3,4
-       mr      4,5
-       mr      5,6
-       mr      6,7
-       mr      7,8
+       mr   %r0,%r3
+       mr   %r3,%r4
+       mr   %r4,%r5
+       mr   %r5,%r6
+       mr   %r6,%r7
+       mr   %r7,%r8
        sc
        bnslr
 #ifdef PIC
index 6cad9ae087698ac322dbf9fc3ffa990fd76284aa..577809acb8bcd485a0293680316d3d03b150f099 100644 (file)
@@ -50,7 +50,7 @@
     b __syscall_error@plt
 #else
 #define PSEUDO(name, syscall_name, args)                                      \
-  .text;                                                                     \
+  .section ".text";                                                          \
   ENTRY (name)                                                                \
     DO_CALL (SYS_ify (syscall_name));                                        \
     bnslr;                                                                    \
index dcda701e459a8a5379f1c4e3b48dafdf66d44866..70526e6ae08bfa8d0fffba4fbecb452a1e63fc50 100644 (file)
@@ -26,5 +26,5 @@ int
 shmdt (shmaddr)
      const void *shmaddr;
 {
-  return __ipc (IPCOP_shmdt, 0, 0, 0, shmaddr);
+  return __ipc (IPCOP_shmdt, 0, 0, 0, (void *) shmaddr);
 }
index 1d1bbdae0daeeca835c6d07e1f998c0de4c6e112..7e1aa55334b01de5933e23f40079461e63abe4ae 100644 (file)
@@ -19,6 +19,8 @@
 #ifndef _STATFSBUF_H
 #define _STATFSBUF_H
 
+#include <gnu/types.h>  /* for __fsid_t */
+
 struct statfs
   {
     int f_type;
index 23f45ada8d2e7461db5277c32af5f1b925f155f6..6611520e986297ec82fa62b6fb32dce28b1de9f7 100644 (file)
@@ -1,4 +1,4 @@
-# @(#)europe   7.43
+# @(#)europe   7.44
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
@@ -1037,7 +1037,7 @@ Zone      Europe/Sarajevo 1:13:40 -       LMT     1884
                        1:00    -       CET     1941 Apr 18 23:00
                        1:00    C-Eur   CE%sT   1945 May  8  2:00s
                        1:00    1:00    CEST    1945 Sep 16  2:00s
-                       1:00    -       CET     1983
+                       1:00    -       CET     1982 Oct 11
                        1:00    EU      CE%sT
 
 # Bulgaria
@@ -1063,7 +1063,7 @@ Zone      Europe/Zagreb   1:03:52 -       LMT     1884
                        1:00    -       CET     1941 Apr 18 23:00
                        1:00    C-Eur   CE%sT   1945 May  8  2:00s
                        1:00    1:00    CEST    1945 Sep 16  2:00s
-                       1:00    -       CET     1983
+                       1:00    -       CET     1982 Oct 11
                        1:00    EU      CE%sT
 
 # Czech Republic
@@ -1562,7 +1562,7 @@ Zone      Europe/Skopje   1:25:44 -       LMT     1884
                        1:00    -       CET     1941 Apr 18 23:00
                        1:00    C-Eur   CE%sT   1945 May  8  2:00s
                        1:00    1:00    CEST    1945 Sep 16  2:00s
-                       1:00    -       CET     1983
+                       1:00    -       CET     1982 Oct 11
                        1:00    EU      CE%sT
 
 # Malta
@@ -1958,7 +1958,7 @@ Zone Europe/Ljubljana     0:58:04 -       LMT     1884
                        1:00    -       CET     1941 Apr 18 23:00
                        1:00    C-Eur   CE%sT   1945 May  8  2:00s
                        1:00    1:00    CEST    1945 Sep 16  2:00s
-                       1:00    -       CET     1983
+                       1:00    -       CET     1982 Oct 11
                        1:00    EU      CE%sT
 
 # Spain
@@ -2198,7 +2198,10 @@ Zone     Europe/Belgrade 1:22:00 -       LMT     1884
                        1:00    -       CET     1941 Apr 18 23:00
                        1:00    C-Eur   CE%sT   1945 May  8  2:00s
                        1:00    1:00    CEST    1945 Sep 16  2:00s
-                       1:00    -       CET     1983
+# Metod Kozelj <metod.kozelj@rzs-hm.si> reports that the legal date of
+# transition to EU rules was 1982-10-11, for all of Yugoslavia at the time.
+# Shanks doesn't give as much detail, so go with Kozelj.
+                       1:00    -       CET     1982 Oct 11
                        1:00    EU      CE%sT
 
 ###############################################################################
index c4745f1546460aec9bd6dfc2b4675a634a7ed2d8..0204050d22df8f96d2e48e35d6b3decda941f4c9 100644 (file)
@@ -112,10 +112,10 @@ extern int getitimer __P ((enum __itimer_which __which,
    set *OLD to the old value of timer WHICH.
    Returns 0 on success, -1 on errors.  */
 extern int __setitimer __P ((enum __itimer_which __which,
-                            struct itimerval *__new,
+                            __const struct itimerval *__new,
                             struct itimerval *__old));
 extern int setitimer __P ((enum __itimer_which __which,
-                          struct itimerval *__new,
+                          __const struct itimerval *__new,
                           struct itimerval *__old));
 
 /* Change the access time of FILE to TVP[0] and
index b9518c4649d52b3b019d82ba88f942b6fe3b5a94..c95887c9b4b945beee37829b929730b83e12aea0 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char    elsieid[] = "@(#)zic.c  7.83";
+static char    elsieid[] = "@(#)zic.c  7.87";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -141,8 +141,10 @@ static int         leapcnt;
 static int             linenum;
 static time_t          max_time;
 static int             max_year;
+static int             max_year_representable;
 static time_t          min_time;
 static int             min_year;
+static int             min_year_representable;
 static int             noise;
 static const char *    rfilename;
 static int             rlinenum;
@@ -430,7 +432,7 @@ const char * const  string;
 
        cp = ecpyalloc("warning: ");
        cp = ecatalloc(cp, string);
-       error(string);
+       error(cp);
        ifree(cp);
        --errors;
 }
@@ -649,6 +651,8 @@ setboundaries P((void))
        }
        min_year = TM_YEAR_BASE + gmtime(&min_time)->tm_year;
        max_year = TM_YEAR_BASE + gmtime(&max_time)->tm_year;
+       min_year_representable = min_year;
+       max_year_representable = max_year;
 }
 
 static int
@@ -1218,6 +1222,7 @@ const char * const                timep;
                                rp->r_todisstd = FALSE;
                                rp->r_todisgmt = FALSE;
                                *ep = '\0';
+                               break;
                        case 'g':       /* Greenwich */
                        case 'u':       /* Universal */
                        case 'z':       /* Zulu */
@@ -1249,7 +1254,11 @@ const char * const               timep;
        } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1) {
                error(_("invalid starting year"));
                return;
-       }
+       } else if (noise)
+               if (rp->r_loyear < min_year_representable)
+                       warning(_("starting year too low to be represented"));
+               else if (rp->r_loyear > max_year_representable)
+                       warning(_("starting year too high to be represented"));
        cp = hiyearp;
        if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
                case YR_MINIMUM:
@@ -1269,7 +1278,11 @@ const char * const               timep;
        } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1) {
                error(_("invalid ending year"));
                return;
-       }
+       } else if (noise)
+               if (rp->r_loyear < min_year_representable)
+                       warning(_("starting year too low to be represented"));
+               else if (rp->r_loyear > max_year_representable)
+                       warning(_("starting year too high to be represented"));
        if (rp->r_loyear > rp->r_hiyear) {
                error(_("starting year greater than ending year"));
                return;