]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update. cvs/libc-970620 cvs/libc-ud-970619
authorUlrich Drepper <drepper@redhat.com>
Thu, 19 Jun 1997 19:11:22 +0000 (19:11 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 19 Jun 1997 19:11:22 +0000 (19:11 +0000)
1997-06-19 19:38  Ulrich Drepper  <drepper@cygnus.com>

* features.h: Define __STDC_IEC_559__ and _STDC_IEC_559_COMPLEX__.

* elf/dl-minimal.c (__dcgettext): Remove assertion.

* inet/rcmd.c: Correct a few typos.  Reported by Eric Troan.

* manual/Makefile (distribute): Add dir.
* manual/dir: New file.

* math/Makefile (libm-support): Rename s_rinttol, s_rinttoll,
s_roundtol, and s_roundtoll to s_lrint, s_llrint, s_lround,
and s_llround respectively.
(libm-calls): Add e_gamma_r.
* math/libm-test.c (check_int_exc): New function.
(signbit_test): Remove test for sign of NaN.
(gamma_test): Clear exception after test of existence.
Correct tests and and epsilons.
(lgamma_test): Likewise.
(ilogb_test): Correct all tests.
(scalb_test): Rewrite.
(rinttol_test): Rename to lrint_test and correct tests.
(rinttoll_test): Likewise.
(roundtol_test): Likewise.
(roundtoll_test): Likewise.
(main): Call lrint/lround functions instead of rinttol/roundtol.
* math/math.h: Change prototypes for rinttol/roundtol.
* math/mathcalls.h: Rearrange prototypes according to ISO C9X draft.
* sysdeps/generic/mathbits.h: Define FP_ILOGB0 and FP_ILOGBNAN.
* sysdeps/i386/mathbits.h: Likewise.
* sysdeps/libm-i387/e_scalb.S: Handle special cases correctly.
* sysdeps/libm-i387/e_scalbf.S: Likewise.
* sysdeps/libm-i387/e_scalbl.S: Likewise.
* sysdeps/libm-i387/s_asinh.S: Handle -inf correctly.
* sysdeps/libm-i387/s_asinhf.S: Likewise.
* sysdeps/libm-i387/s_asinhl.S: Likewise.
* sysdeps/libm-i387/s_ilogb.S: Optimize.
* sysdeps/libm-i387/s_ilogbf.S: Likewise.
* sysdeps/libm-i387/s_ilogbl.S: Likewise.
* sysdeps/libm-i387/s_rinttol.S: Rename to...
* sysdeps/libm-i387/s_lrint.S: ...this.
* sysdeps/libm-i387/s_rinttoll.S: Rename to...
* sysdeps/libm-i387/s_llrint.S: ...this.
* sysdeps/libm-i387/s_remquo.S: Correctly set sign of remainder.
* sysdeps/libm-i387/s_remquof.S: Likewise.
* sysdeps/libm-i387/s_remquol.S: Likewise.
* sysdeps/libm-i387/e_gamma_r.c: New file.  Implementation of gamma
function according to ISO C.
* sysdeps/libm-i387/e_gammaf_r.c: New file.
* sysdeps/libm-i387/e_gammal_r.c: New file.
* sysdeps/libm-i387/e_lgamma_r.c: Don't let optimize compile the
generation of exceptions away.
* sysdeps/libm-i387/e_lgammaf_r.c: Likewise.
* sysdeps/libm-i387/k_standard.c: Correct return value for infinity
points of gamma function when not SVID mode.
* sysdeps/libm-i387/s_rinttoll.c: Renamed to...
* sysdeps/libm-i387/s_llrint.c: ...this.
* sysdeps/libm-i387/s_rinttol.c: Renamed to...
* sysdeps/libm-i387/s_lrint.c: ...this.
* sysdeps/libm-i387/s_roundtoll.c: Renamed to...
* sysdeps/libm-i387/s_llround.c: ...this.
* sysdeps/libm-i387/s_roundtol.c: Renamed to...
* sysdeps/libm-i387/s_lround.c: ..this.
* sysdeps/libm-i387/s_scalbn.c: Change second parameter according to
ISO C.
* sysdeps/libm-i387/s_scalbnf.c: Likewise.
* sysdeps/libm-i387/s_scalbnl.c: Likewise.
* sysdeps/libm-i387/w_gamma.c: Call __ieee754_gamma_r if library
mode is not _SVID_.
* sysdeps/libm-i387/w_gammaf.c: Likewise.
* sysdeps/libm-i387/w_gammal.c: Likewise.
* sysdeps/m68k/fpu/__math.h: Rename __rinttol to __lrint and
rinttol to lrint.
* sysdeps/m68k/fpu/s_rinttol.c: Renamed to...
* sysdeps/m68k/fpu/s_lrint.c: ...this.
* sysdeps/m68k/fpu/s_rinttoll.c: Renamed to...
* sysdeps/m68k/fpu/s_llrint.c: ...this.

* md5-crypt/Makefile: Link md5test program with md5.o.

* stdio-common/temptest.c: Don't use __stdio_gen_tempname which
is not exported by the libc.so.

* stdio-common/vfscanf.c: Correct scanning of strings after last
change.

* sysdeps/unix/sysv/linux/i386/sysdep.S: Use .comm to define errno.

1997-06-19 07:37  H.J. Lu  <hjl@gnu.ai.mit.edu>

* time/tzfile.c (__tzfile_read): Store getc () return in int.

1997-06-13  Miles Bader  <miles@gnu.ai.mit.edu>

* argp/argp-parse.c (argp_version_parser): Include `(PROGRAM ERROR)' in
the no-version error text to indicate that something's fucked.
[!_] (N_): New macro.
(argp_default_options, argp_version_options): Wrap doc strings in N_().

1997-06-12  Miles Bader  <miles@gnu.ai.mit.edu>

* argp/argp-parse.c (parser_parse_opt): Detect and report unhandled
options here.
(parser_parse_arg): Handle ARGP_KEY_ARGS here.
Adjust NEXT pointer back if we fail to parse anything.
(parser_parse_next): Simplify arg code.  Leave state NEXT frobbing
to parser_parse_arg.

1997-06-11  Miles Bader  <miles@gnu.ai.mit.edu>

* argp/argp.h (ARGP_KEY_ARGS, ARGP_KEY_FINI): New macros.
* argp/argp-parse.c (parser_finalize): Do another pass over the
parsers with ARGP_KEY_FINI.

1997-06-18  Miles Bader  <miles@gnu.ai.mit.edu>

* string/Makefile (routines): Add argz-replace.

1997-06-16 00:16  Miles Bader  <miles@gnu.ai.mit.edu>

* manual/string.texi (Argz Functions): Document argz_replace.

1997-06-12  Miles Bader  <miles@gnu.ai.mit.edu>

* string/argz.h (__argz_replace, argz_replace): New declarations.
* string/argz-replace.c: New file.

1997-06-11  Miles Bader  <miles@gnu.ai.mit.edu>

* manual/argp.texi (Argp Special Keys): Document ARGP_KEY_ARGS.

1997-06-16 23:08  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* Makeconfig (libc-map): Remove definition.
* Makerules (libc-map): Define it here, using the full name.
(load-map-file): Remove case for empty $(..).
($(common-objpfx)libc.so): Revert last change.

1997-06-17 22:18  Mark Kettenis  <kettenis@phys.uva.nl>

* login/programs/utmpd.c (main): Improve signal handling.

* login/programs/request.c (do_setutent, do_updwtmp):
Allow arbitrary length filenames.
* login/programs/utmpd.h (setutent_request, updwtmp_request):
Get rid of fixed length file field.
* login/utmp_daemon.c (do_setutent, do_updwtmp):
Allow arbitrary length filenames.

* login/programs/request.c (do_pututline):
Don't fail if connection->position is -1 on entry.

1997-06-15 16:32  Mark Kettenis  <kettenis@phys.uva.nl>

* login/utmp_file.c (updwtmp_file): Use the same method for
appending an entry as in pututline_file.

1997-06-11 18:59  Mark Kettenis  <kettenis@phys.uva.nl>

* login/utmp_file.c (getutent_r_file):
Use read lock instead of write lock.
(getutline_r_file, internal_getut_r): Lock utmp file.
(updwtmp_file): Use fcntl to lock file instead of flock.

1997-06-18 00:11  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* stdio-common/vfscanf.c (inchar, ungetc): Don't count EOF as
character read in/put back.
* stdio-common/tstscanf.c: Add test case for this.

1997-06-17 22:17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* libc.map: Add more symbols.

1997-06-18 12:01  Ulrich Drepper  <drepper@cygnus.com>

* manual/Makefile (install): Make sure `dir' file exists if we use
install-info.

1997-06-17 19:32  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* manual/Makefile (info): Depend on dir-add.info.

1997-06-17 17:19  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* elf/ldd.bash.in: Fix spacing in message.

1997-06-17 14:28  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* elf/do-rel.h (elf_dynamic_do_rel): Always use version
information if available.

1997-06-17 11:34  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* sunrpc/Makefile ($(rpcsvc:%.x=$(objpfx)rpcsvc/%.h)): Make
command non-empty to force make to recheck modification time.
($(rpcsvc:%.x=$(objpfx)x%.c)): Likewise.

1997-06-17 00:26  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* sysdeps/stub/e_acoshl.c: Set errno to ENOSYS.
* sysdeps/stub/e_acosl.c: Likewise.
* sysdeps/stub/e_asinl.c: Likewise.
* sysdeps/stub/e_atan2l.c: Likewise.
* sysdeps/stub/e_expl.c: Likewise.
* sysdeps/stub/e_fmodl.c: Likewise.
* sysdeps/stub/e_j0l.c: Likewise.
* sysdeps/stub/e_j1l.c: Likewise.
* sysdeps/stub/e_jnl.c: Likewise.
* sysdeps/stub/e_lgammal_r.c: Likewise.
* sysdeps/stub/e_log10l.c: Likewise.
* sysdeps/stub/e_logl.c: Likewise.
* sysdeps/stub/e_powl.c: Likewise.
* sysdeps/stub/e_rem_pio2l.c: Likewise.
* sysdeps/stub/e_sqrtl.c: Likewise.
* sysdeps/stub/k_cosl.c: Likewise.
* sysdeps/stub/k_rem_pio2l.c: Likewise.
* sysdeps/stub/k_sinl.c: Likewise.
* sysdeps/stub/k_tanl.c: Likewise.
* sysdeps/stub/s_atanl.c: Likewise.
* sysdeps/stub/s_erfl.c: Likewise.
* sysdeps/stub/s_exp2.c: Likewise.
* sysdeps/stub/s_exp2f.c: Likewise.
* sysdeps/stub/s_exp2l.c: Likewise.
* sysdeps/stub/s_expm1l.c: Likewise.
* sysdeps/stub/s_log1pl.c: Likewise.
* sysdeps/stub/s_log2l.c: Likewise.

1997-06-18 11:46  Ulrich Drepper  <drepper@cygnus.com>

* sysdeps/libm-ieee754/w_gamma.c: If _LIB_VERSION is _SVID_ compute
result as before last change.
* sysdeps/libm-ieee754/w_gammaf.c: Likewise.
* sysdeps/libm-ieee754/w_gammal.c: Likewise.

1997-06-16 23:37  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* sysdeps/libm-ieee754/s_remquo.c: Fix off-by-one when computing
quotient.
* sysdeps/libm-ieee754/s_remquof.c: Likewise.
* sysdeps/libm-ieee754/s_remquol.c: Likewise.

* sysdeps/m68k/fpu/s_remquo.c: Remove FIXME and special case for
quotient.

* sysdeps/libm-ieee754/w_gamma.c: Add missing call to exp
function.  Don't use global signgam.
* sysdeps/libm-ieee754/w_gammaf.c: Likewise.
* sysdeps/libm-ieee754/w_gammal.c: Likewise.

* math/Makefile (libm-calls): Remove w_gamma_r.
* sysdeps/libm-ieee754/w_gamma_r.c: Remove file.
* sysdeps/libm-ieee754/w_gammaf_r.c: Remove file.
* sysdeps/libm-ieee754/w_gammal_r.c: Remove file.

* math/libm-test.c (atanh_test): Declare x only if needed.
(signbit_test): Fix typo.
(gamma_test): Check whether function is implemented.  Add
epsilons.
(lgamma_test): Likewise.
(fmod_test): Add epsilons.
(exp2_test): Use right function for existence test.

1997-06-07 09:20  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* sysdeps/powerpc/Dist: Add fenv_const.c.
* sysdeps/unix/sysv/linux/Dist: Add net/if_slip.h.
* sysdeps/unix/sysv/linux/powerpc/Dist: Add init-first.h and
syscall.h.
* sysdeps/unix/sysv/linux/sparc/Dist: Add init-first.h.
* string/Makefile (distribute): Add tst-svc.expect.
* nis/Makefile (distribute): Add nis_intern.h and Banner.
* elf/Makefile (distribute): Add dl-hash.h.
* Rules (subdir_echo-distinfo): Add headers from $(distribute).

* login/Makefile (others): Add utmpdump.
* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
net/if_slip.h.

* manual/Makefile (dir-add.texi): Also look in indirectly included
files.

1997-06-16 23:15  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* sysdeps/unix/sysv/linux/configure.in: Remove commands to
generate stdio_lim.h.
* sysdeps/unix/sysv/linux/mk-stdiolim.c: Remove.
* sysdeps/unix/sysv/linux/Makefile: Add rules to generate
stdio_lim.h here.
(common-generated): Add generated files.
(inhibit-stdio_lim): Define.
* sysdeps/posix/Makefile [$(inhibit-stdio_lim)=yes]: Disable rules
to generate stdio_lim.h.

* sysdeps/unix/sysv/linux/Makefile: Suppress inclusion of
dependecy files if no_deps is set.
($(objpfx)syscall-%.d): Add header file as target to dependency
generation.

1997-06-14 19:19  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* sysdeps/unix/sysv/linux/arm/Dist: New file.

1997-06-14 17:59  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

* extra-lib.mk (others): Depend on versioned shared library, not
the unversioned one.
* Makerules (build-shlib): Don't make the version link here.
($(common-objpfx)libc.so$(libc.so-version)): New rule for libc
version link.

1997-06-16 03:07  Ulrich Drepper  <drepper@cygnus.com>

* sysdeps/libm-ieee754/k_standard.c: Undo change of Tue Aug 6
01:13:56 1996.

* argp/argp-help.c (argp_args_usage): Supply correct argp to
filter_doc.
* argp/argp-help.c (hol_add_cluster): Initialize CL->depth.
* argp/argp-help.c (_help): Supply STATE to argp_args_usage.
* argp/argp.h (ARGP_KEY_HELP_ARGS_DOC): New macro.
* argp/argp-fmtstream.c: Add casts to prevent warnings.
* argp/argp.h (OPTION_NO_USAGE): New macro.
* argp/argp-help.c (usage_long_opt, usage_argful_short_opt,
* argp/argp-fmtstream.c (__argp_fmtstream_update): Account for case
* argp/argp-help.c <stddef.h>: New include.
* argp/argp.h (argp_state_help, __argp_state_help, argp_usage,
* argp/argp.h (argp_program_bug_address): Make const.
* argp/argp-parse.c (argp_default_parser): Set STATE->name for OPT_PROGNAME.
* argp/argp-help.c (__argp_error, __argp_failure, __argp_state_help):
* argp/argp-parse.c (parser_init): Set PARSER->state.flags.

118 files changed:
ChangeLog
Makeconfig
Makerules
Rules
argp/argp-parse.c
argp/argp.h
elf/Makefile
elf/dl-minimal.c
elf/do-rel.h
elf/ldd.bash.in
extra-lib.mk
features.h
inet/rcmd.c
libc.map
login/Makefile
login/programs/request.c
login/programs/utmpd.c
login/programs/utmpd.h
login/utmp_daemon.c
login/utmp_file.c
manual/Makefile
manual/argp.texi
manual/dir [new file with mode: 0644]
manual/string.texi
manual/texinfo.tex
math/Makefile
math/libm-test.c
math/math.h
math/mathcalls.h
md5-crypt/Makefile
nis/Makefile
stdio-common/temptest.c
stdio-common/tstscanf.c
stdio-common/vfscanf.c
string/Makefile
string/argz-replace.c [new file with mode: 0644]
string/argz.h
sunrpc/Makefile
sysdeps/generic/mathbits.h
sysdeps/i386/fpu/mathbits.h
sysdeps/libm-i387/e_scalb.S
sysdeps/libm-i387/e_scalbf.S
sysdeps/libm-i387/e_scalbl.S
sysdeps/libm-i387/s_asinh.S
sysdeps/libm-i387/s_asinhf.S
sysdeps/libm-i387/s_asinhl.S
sysdeps/libm-i387/s_ilogb.S
sysdeps/libm-i387/s_ilogbf.S
sysdeps/libm-i387/s_ilogbl.S
sysdeps/libm-i387/s_llrint.S [moved from sysdeps/libm-i387/s_rinttoll.S with 94% similarity]
sysdeps/libm-i387/s_lrint.S [moved from sysdeps/libm-i387/s_rinttol.S with 94% similarity]
sysdeps/libm-i387/s_remquo.S
sysdeps/libm-i387/s_remquof.S
sysdeps/libm-i387/s_remquol.S
sysdeps/libm-ieee754/e_gamma_r.c [new file with mode: 0644]
sysdeps/libm-ieee754/e_gammaf_r.c [new file with mode: 0644]
sysdeps/libm-ieee754/e_gammal_r.c [new file with mode: 0644]
sysdeps/libm-ieee754/e_lgamma_r.c
sysdeps/libm-ieee754/e_lgammaf_r.c
sysdeps/libm-ieee754/s_llrint.c [moved from sysdeps/libm-ieee754/s_rinttoll.c with 98% similarity]
sysdeps/libm-ieee754/s_llround.c [moved from sysdeps/libm-ieee754/s_roundtoll.c with 97% similarity]
sysdeps/libm-ieee754/s_lrint.c [moved from sysdeps/libm-ieee754/s_rinttol.c with 98% similarity]
sysdeps/libm-ieee754/s_lround.c [moved from sysdeps/libm-ieee754/s_roundtol.c with 97% similarity]
sysdeps/libm-ieee754/s_remquo.c
sysdeps/libm-ieee754/s_remquof.c
sysdeps/libm-ieee754/s_remquol.c
sysdeps/libm-ieee754/s_scalbn.c
sysdeps/libm-ieee754/s_scalbnf.c
sysdeps/libm-ieee754/s_scalbnl.c
sysdeps/libm-ieee754/w_gamma.c
sysdeps/libm-ieee754/w_gamma_r.c [deleted file]
sysdeps/libm-ieee754/w_gammaf.c
sysdeps/libm-ieee754/w_gammaf_r.c [deleted file]
sysdeps/libm-ieee754/w_gammal.c
sysdeps/libm-ieee754/w_gammal_r.c [deleted file]
sysdeps/m68k/fpu/__math.h
sysdeps/m68k/fpu/s_llrint.c [moved from sysdeps/m68k/fpu/s_rinttoll.c with 96% similarity]
sysdeps/m68k/fpu/s_lrint.c [moved from sysdeps/m68k/fpu/s_rinttol.c with 92% similarity]
sysdeps/m68k/fpu/s_remquo.c
sysdeps/posix/Makefile
sysdeps/powerpc/Dist
sysdeps/stub/e_acoshl.c
sysdeps/stub/e_acosl.c
sysdeps/stub/e_asinl.c
sysdeps/stub/e_atan2l.c
sysdeps/stub/e_expl.c
sysdeps/stub/e_fmodl.c
sysdeps/stub/e_j0l.c
sysdeps/stub/e_j1l.c
sysdeps/stub/e_jnl.c
sysdeps/stub/e_lgammal_r.c
sysdeps/stub/e_log10l.c
sysdeps/stub/e_logl.c
sysdeps/stub/e_powl.c
sysdeps/stub/e_rem_pio2l.c
sysdeps/stub/e_sqrtl.c
sysdeps/stub/k_cosl.c
sysdeps/stub/k_rem_pio2l.c
sysdeps/stub/k_sinl.c
sysdeps/stub/k_tanl.c
sysdeps/stub/s_atanl.c
sysdeps/stub/s_erfl.c
sysdeps/stub/s_exp2.c
sysdeps/stub/s_exp2f.c
sysdeps/stub/s_exp2l.c
sysdeps/stub/s_expm1l.c
sysdeps/stub/s_log1pl.c
sysdeps/stub/s_log2l.c
sysdeps/unix/sysv/linux/Dist
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/arm/Dist [new file with mode: 0644]
sysdeps/unix/sysv/linux/configure
sysdeps/unix/sysv/linux/configure.in
sysdeps/unix/sysv/linux/i386/sysdep.S
sysdeps/unix/sysv/linux/mk-stdiolim.c [deleted file]
sysdeps/unix/sysv/linux/powerpc/Dist
sysdeps/unix/sysv/linux/sparc/Dist
time/tzfile.c

index 9c70ad3486975d80911eb089cab08e2ff8d78008..cb09bdf38b2031581937ca3d395aa0270b5d7e24 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,320 @@
+1997-06-19 19:38  Ulrich Drepper  <drepper@cygnus.com>
+
+       * features.h: Define __STDC_IEC_559__ and _STDC_IEC_559_COMPLEX__.
+
+       * elf/dl-minimal.c (__dcgettext): Remove assertion.
+
+       * inet/rcmd.c: Correct a few typos.  Reported by Eric Troan.
+
+       * manual/Makefile (distribute): Add dir.
+       * manual/dir: New file.
+
+       * math/Makefile (libm-support): Rename s_rinttol, s_rinttoll,
+       s_roundtol, and s_roundtoll to s_lrint, s_llrint, s_lround,
+       and s_llround respectively.
+       (libm-calls): Add e_gamma_r.
+       * math/libm-test.c (check_int_exc): New function.
+       (signbit_test): Remove test for sign of NaN.
+       (gamma_test): Clear exception after test of existence.
+       Correct tests and and epsilons.
+       (lgamma_test): Likewise.
+       (ilogb_test): Correct all tests.
+       (scalb_test): Rewrite.
+       (rinttol_test): Rename to lrint_test and correct tests.
+       (rinttoll_test): Likewise.
+       (roundtol_test): Likewise.
+       (roundtoll_test): Likewise.
+       (main): Call lrint/lround functions instead of rinttol/roundtol.
+       * math/math.h: Change prototypes for rinttol/roundtol.
+       * math/mathcalls.h: Rearrange prototypes according to ISO C9X draft.
+       * sysdeps/generic/mathbits.h: Define FP_ILOGB0 and FP_ILOGBNAN.
+       * sysdeps/i386/mathbits.h: Likewise.
+       * sysdeps/libm-i387/e_scalb.S: Handle special cases correctly.
+       * sysdeps/libm-i387/e_scalbf.S: Likewise.
+       * sysdeps/libm-i387/e_scalbl.S: Likewise.
+       * sysdeps/libm-i387/s_asinh.S: Handle -inf correctly.
+       * sysdeps/libm-i387/s_asinhf.S: Likewise.
+       * sysdeps/libm-i387/s_asinhl.S: Likewise.
+       * sysdeps/libm-i387/s_ilogb.S: Optimize.
+       * sysdeps/libm-i387/s_ilogbf.S: Likewise.
+       * sysdeps/libm-i387/s_ilogbl.S: Likewise.
+       * sysdeps/libm-i387/s_rinttol.S: Rename to...
+       * sysdeps/libm-i387/s_lrint.S: ...this.
+       * sysdeps/libm-i387/s_rinttoll.S: Rename to...
+       * sysdeps/libm-i387/s_llrint.S: ...this.
+       * sysdeps/libm-i387/s_remquo.S: Correctly set sign of remainder.
+       * sysdeps/libm-i387/s_remquof.S: Likewise.
+       * sysdeps/libm-i387/s_remquol.S: Likewise.
+       * sysdeps/libm-i387/e_gamma_r.c: New file.  Implementation of gamma
+       function according to ISO C.
+       * sysdeps/libm-i387/e_gammaf_r.c: New file.
+       * sysdeps/libm-i387/e_gammal_r.c: New file.
+       * sysdeps/libm-i387/e_lgamma_r.c: Don't let optimize compile the
+       generation of exceptions away.
+       * sysdeps/libm-i387/e_lgammaf_r.c: Likewise.
+       * sysdeps/libm-i387/k_standard.c: Correct return value for infinity
+       points of gamma function when not SVID mode.
+       * sysdeps/libm-i387/s_rinttoll.c: Renamed to...
+       * sysdeps/libm-i387/s_llrint.c: ...this.
+       * sysdeps/libm-i387/s_rinttol.c: Renamed to...
+       * sysdeps/libm-i387/s_lrint.c: ...this.
+       * sysdeps/libm-i387/s_roundtoll.c: Renamed to...
+       * sysdeps/libm-i387/s_llround.c: ...this.
+       * sysdeps/libm-i387/s_roundtol.c: Renamed to...
+       * sysdeps/libm-i387/s_lround.c: ..this.
+       * sysdeps/libm-i387/s_scalbn.c: Change second parameter according to
+       ISO C.
+       * sysdeps/libm-i387/s_scalbnf.c: Likewise.
+       * sysdeps/libm-i387/s_scalbnl.c: Likewise.
+       * sysdeps/libm-i387/w_gamma.c: Call __ieee754_gamma_r if library
+       mode is not _SVID_.
+       * sysdeps/libm-i387/w_gammaf.c: Likewise.
+       * sysdeps/libm-i387/w_gammal.c: Likewise.
+       * sysdeps/m68k/fpu/__math.h: Rename __rinttol to __lrint and
+       rinttol to lrint.
+       * sysdeps/m68k/fpu/s_rinttol.c: Renamed to...
+       * sysdeps/m68k/fpu/s_lrint.c: ...this.
+       * sysdeps/m68k/fpu/s_rinttoll.c: Renamed to...
+       * sysdeps/m68k/fpu/s_llrint.c: ...this.
+
+       * md5-crypt/Makefile: Link md5test program with md5.o.
+
+       * stdio-common/temptest.c: Don't use __stdio_gen_tempname which
+       is not exported by the libc.so.
+
+       * stdio-common/vfscanf.c: Correct scanning of strings after last
+       change.
+
+       * sysdeps/unix/sysv/linux/i386/sysdep.S: Use .comm to define errno.
+
+1997-06-19 07:37  H.J. Lu  <hjl@gnu.ai.mit.edu>
+
+       * time/tzfile.c (__tzfile_read): Store getc () return in int.
+
+1997-06-13  Miles Bader  <miles@gnu.ai.mit.edu>
+
+       * argp/argp-parse.c (argp_version_parser): Include `(PROGRAM ERROR)' in
+       the no-version error text to indicate that something's fucked.
+       [!_] (N_): New macro.
+       (argp_default_options, argp_version_options): Wrap doc strings in N_().
+
+1997-06-12  Miles Bader  <miles@gnu.ai.mit.edu>
+
+       * argp/argp-parse.c (parser_parse_opt): Detect and report unhandled
+       options here.
+       (parser_parse_arg): Handle ARGP_KEY_ARGS here.
+       Adjust NEXT pointer back if we fail to parse anything.
+       (parser_parse_next): Simplify arg code.  Leave state NEXT frobbing
+       to parser_parse_arg.
+
+1997-06-11  Miles Bader  <miles@gnu.ai.mit.edu>
+
+       * argp/argp.h (ARGP_KEY_ARGS, ARGP_KEY_FINI): New macros.
+       * argp/argp-parse.c (parser_finalize): Do another pass over the
+       parsers with ARGP_KEY_FINI.
+
+1997-06-18  Miles Bader  <miles@gnu.ai.mit.edu>
+
+       * string/Makefile (routines): Add argz-replace.
+
+1997-06-16 00:16  Miles Bader  <miles@gnu.ai.mit.edu>
+
+       * manual/string.texi (Argz Functions): Document argz_replace.
+
+1997-06-12  Miles Bader  <miles@gnu.ai.mit.edu>
+
+       * string/argz.h (__argz_replace, argz_replace): New declarations.
+       * string/argz-replace.c: New file.
+
+1997-06-11  Miles Bader  <miles@gnu.ai.mit.edu>
+
+       * manual/argp.texi (Argp Special Keys): Document ARGP_KEY_ARGS.
+
+1997-06-16 23:08  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * Makeconfig (libc-map): Remove definition.
+       * Makerules (libc-map): Define it here, using the full name.
+       (load-map-file): Remove case for empty $(..).
+       ($(common-objpfx)libc.so): Revert last change.
+
+1997-06-17 22:18  Mark Kettenis  <kettenis@phys.uva.nl>
+
+       * login/programs/utmpd.c (main): Improve signal handling.
+
+       * login/programs/request.c (do_setutent, do_updwtmp):
+       Allow arbitrary length filenames.
+       * login/programs/utmpd.h (setutent_request, updwtmp_request):
+       Get rid of fixed length file field.
+       * login/utmp_daemon.c (do_setutent, do_updwtmp):
+       Allow arbitrary length filenames.
+
+       * login/programs/request.c (do_pututline):
+       Don't fail if connection->position is -1 on entry.
+
+1997-06-15 16:32  Mark Kettenis  <kettenis@phys.uva.nl>
+
+       * login/utmp_file.c (updwtmp_file): Use the same method for
+       appending an entry as in pututline_file.
+
+1997-06-11 18:59  Mark Kettenis  <kettenis@phys.uva.nl>
+
+       * login/utmp_file.c (getutent_r_file):
+       Use read lock instead of write lock.
+       (getutline_r_file, internal_getut_r): Lock utmp file.
+       (updwtmp_file): Use fcntl to lock file instead of flock.
+
+1997-06-18 00:11  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * stdio-common/vfscanf.c (inchar, ungetc): Don't count EOF as
+       character read in/put back.
+       * stdio-common/tstscanf.c: Add test case for this.
+
+1997-06-17 22:17  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * libc.map: Add more symbols.
+
+1997-06-18 12:01  Ulrich Drepper  <drepper@cygnus.com>
+
+       * manual/Makefile (install): Make sure `dir' file exists if we use
+       install-info.
+
+1997-06-17 19:32  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * manual/Makefile (info): Depend on dir-add.info.
+
+1997-06-17 17:19  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * elf/ldd.bash.in: Fix spacing in message.
+
+1997-06-17 14:28  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * elf/do-rel.h (elf_dynamic_do_rel): Always use version
+       information if available.
+
+1997-06-17 11:34  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sunrpc/Makefile ($(rpcsvc:%.x=$(objpfx)rpcsvc/%.h)): Make
+       command non-empty to force make to recheck modification time.
+       ($(rpcsvc:%.x=$(objpfx)x%.c)): Likewise.
+
+1997-06-17 00:26  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/stub/e_acoshl.c: Set errno to ENOSYS.
+       * sysdeps/stub/e_acosl.c: Likewise.
+       * sysdeps/stub/e_asinl.c: Likewise.
+       * sysdeps/stub/e_atan2l.c: Likewise.
+       * sysdeps/stub/e_expl.c: Likewise.
+       * sysdeps/stub/e_fmodl.c: Likewise.
+       * sysdeps/stub/e_j0l.c: Likewise.
+       * sysdeps/stub/e_j1l.c: Likewise.
+       * sysdeps/stub/e_jnl.c: Likewise.
+       * sysdeps/stub/e_lgammal_r.c: Likewise.
+       * sysdeps/stub/e_log10l.c: Likewise.
+       * sysdeps/stub/e_logl.c: Likewise.
+       * sysdeps/stub/e_powl.c: Likewise.
+       * sysdeps/stub/e_rem_pio2l.c: Likewise.
+       * sysdeps/stub/e_sqrtl.c: Likewise.
+       * sysdeps/stub/k_cosl.c: Likewise.
+       * sysdeps/stub/k_rem_pio2l.c: Likewise.
+       * sysdeps/stub/k_sinl.c: Likewise.
+       * sysdeps/stub/k_tanl.c: Likewise.
+       * sysdeps/stub/s_atanl.c: Likewise.
+       * sysdeps/stub/s_erfl.c: Likewise.
+       * sysdeps/stub/s_exp2.c: Likewise.
+       * sysdeps/stub/s_exp2f.c: Likewise.
+       * sysdeps/stub/s_exp2l.c: Likewise.
+       * sysdeps/stub/s_expm1l.c: Likewise.
+       * sysdeps/stub/s_log1pl.c: Likewise.
+       * sysdeps/stub/s_log2l.c: Likewise.
+
+1997-06-18 11:46  Ulrich Drepper  <drepper@cygnus.com>
+
+       * sysdeps/libm-ieee754/w_gamma.c: If _LIB_VERSION is _SVID_ compute
+       result as before last change.
+       * sysdeps/libm-ieee754/w_gammaf.c: Likewise.
+       * sysdeps/libm-ieee754/w_gammal.c: Likewise.
+
+1997-06-16 23:37  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/libm-ieee754/s_remquo.c: Fix off-by-one when computing
+       quotient.
+       * sysdeps/libm-ieee754/s_remquof.c: Likewise.
+       * sysdeps/libm-ieee754/s_remquol.c: Likewise.
+
+       * sysdeps/m68k/fpu/s_remquo.c: Remove FIXME and special case for
+       quotient.
+
+       * sysdeps/libm-ieee754/w_gamma.c: Add missing call to exp
+       function.  Don't use global signgam.
+       * sysdeps/libm-ieee754/w_gammaf.c: Likewise.
+       * sysdeps/libm-ieee754/w_gammal.c: Likewise.
+
+       * math/Makefile (libm-calls): Remove w_gamma_r.
+       * sysdeps/libm-ieee754/w_gamma_r.c: Remove file.
+       * sysdeps/libm-ieee754/w_gammaf_r.c: Remove file.
+       * sysdeps/libm-ieee754/w_gammal_r.c: Remove file.
+
+       * math/libm-test.c (atanh_test): Declare x only if needed.
+       (signbit_test): Fix typo.
+       (gamma_test): Check whether function is implemented.  Add
+       epsilons.
+       (lgamma_test): Likewise.
+       (fmod_test): Add epsilons.
+       (exp2_test): Use right function for existence test.
+
+1997-06-07 09:20  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/powerpc/Dist: Add fenv_const.c.
+       * sysdeps/unix/sysv/linux/Dist: Add net/if_slip.h.
+       * sysdeps/unix/sysv/linux/powerpc/Dist: Add init-first.h and
+       syscall.h.
+       * sysdeps/unix/sysv/linux/sparc/Dist: Add init-first.h.
+       * string/Makefile (distribute): Add tst-svc.expect.
+       * nis/Makefile (distribute): Add nis_intern.h and Banner.
+       * elf/Makefile (distribute): Add dl-hash.h.
+       * Rules (subdir_echo-distinfo): Add headers from $(distribute).
+
+       * login/Makefile (others): Add utmpdump.
+       * sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
+       net/if_slip.h.
+
+       * manual/Makefile (dir-add.texi): Also look in indirectly included
+       files.
+
+1997-06-16 23:15  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/unix/sysv/linux/configure.in: Remove commands to
+       generate stdio_lim.h.
+       * sysdeps/unix/sysv/linux/mk-stdiolim.c: Remove.
+       * sysdeps/unix/sysv/linux/Makefile: Add rules to generate
+       stdio_lim.h here.
+       (common-generated): Add generated files.
+       (inhibit-stdio_lim): Define.
+       * sysdeps/posix/Makefile [$(inhibit-stdio_lim)=yes]: Disable rules
+       to generate stdio_lim.h.
+
+       * sysdeps/unix/sysv/linux/Makefile: Suppress inclusion of
+       dependecy files if no_deps is set.
+       ($(objpfx)syscall-%.d): Add header file as target to dependency
+       generation.
+
+1997-06-14 19:19  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/unix/sysv/linux/arm/Dist: New file.
+
+1997-06-14 17:59  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * extra-lib.mk (others): Depend on versioned shared library, not
+       the unversioned one.
+       * Makerules (build-shlib): Don't make the version link here.
+       ($(common-objpfx)libc.so$(libc.so-version)): New rule for libc
+       version link.
+
+1997-06-16 03:07  Ulrich Drepper  <drepper@cygnus.com>
+
+       * sysdeps/libm-ieee754/k_standard.c: Undo change of Tue Aug 6
+       01:13:56 1996.
+
 1997-06-16 00:54  Ulrich Drepper  <drepper@cygnus.com>
 
        * libc.map: Add more symbols.
 
 1997-05-27 14:16  Miles Bader  <miles@gnu.ai.mit.edu>
 
-       * argp-help.c (argp_args_usage): Supply correct argp to filter_doc.
+       * argp/argp-help.c (argp_args_usage): Supply correct argp to
+       filter_doc.
 
 1997-05-27 17:51  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
 
 
 1997-05-21 17:53  Miles Bader  <miles@gnu.ai.mit.edu>
 
-       * argp-help.c (hol_add_cluster): Initialize CL->depth.
+       * argp/argp-help.c (hol_add_cluster): Initialize CL->depth.
 
 1997-05-24 03:51  Ulrich Drepper  <drepper@cygnus.com>
 
 
 1997-05-20 14:01  Miles Bader  <miles@gnu.ai.mit.edu>
 
-       * argp-help.c (_help): Supply STATE to argp_args_usage.
+       * argp/argp-help.c (_help): Supply STATE to argp_args_usage.
        (argp_args_usage): Add filtering of the args doc string.
        (comma): Print cluster headers for the first entry too.
-       * argp.h (ARGP_KEY_HELP_ARGS_DOC): New macro.
+       * argp/argp.h (ARGP_KEY_HELP_ARGS_DOC): New macro.
 
 1997-05-21 02:49  Ulrich Drepper  <drepper@cygnus.com>
 
 
        * rellns-sh: Rewrite to work also in presence of symlinks.
 
-       * arpg/argp-fmtstream.c: Add casts to prevent warnings.
+       * argp/argp-fmtstream.c: Add casts to prevent warnings.
        * argp/argp-fmtstream.h: Likewise.
        * argp/argp-help.c: Likewise.
 
 
 1997-02-21 10:41  Miles Bader  <miles@gnu.ai.mit.edu>
 
-       * argp.h (OPTION_NO_USAGE): New macro.
-       * argp-help.c (usage_long_opt, usage_argful_short_opt,
+       * argp/argp.h (OPTION_NO_USAGE): New macro.
+       * argp/argp-help.c (usage_long_opt, usage_argful_short_opt,
        add_argless_short_opt): Implement OPTION_NO_USAGE.
 
 1997-02-20 16:41  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
 
 1997-02-20 15:56  Miles Bader  <miles@gnu.ai.mit.edu>
 
-       * argp-fmtstream.c (__argp_fmtstream_update): Account for case
+       * argp/argp-fmtstream.c (__argp_fmtstream_update): Account for case
        where NEXTLINE points one past the end of the active buffer.
 
-       * argp-help.c <stddef.h>: New include.
+       * argp/argp-help.c <stddef.h>: New include.
        (__argp_failure): Only exit if STATE says it's ok.
        (print_header, hol_entry_help): Use UPARAMS fields rather than
        constants.
        (fill_in_uparams): New function.
        (__argp_failure, __argp_error, __argp_state_help): Make STATE
        parameter const.
-       * argp.h (argp_state_help, __argp_state_help, argp_usage,
+       * argp/argp.h (argp_state_help, __argp_state_help, argp_usage,
        __argp_usage, argp_error, __argp_error, argp_failure,
        __argp_failure): Make STATE parameter const.
        (ARGP_KEY_HELP_DUP_ARGS_NOTE): New macro.
 
-       * argp.h (argp_program_bug_address): Make const.
+       * argp/argp.h (argp_program_bug_address): Make const.
 
 1997-02-20 19:20  Ulrich Drepper  <drepper@cygnus.com>
 
 
 1997-02-19 18:48  Miles Bader  <miles@gnu.ai.mit.edu>
 
-       * argp-parse.c (argp_default_parser): Set STATE->name for OPT_PROGNAME.
+       * argp/argp-parse.c (argp_default_parser): Set STATE->name for OPT_PROGNAME.
        (parser_init): Use the basename for PARSER->state.name.
-       * argp-help.c (__argp_error, __argp_failure, __argp_state_help):
+       * argp/argp-help.c (__argp_error, __argp_failure, __argp_state_help):
        Use PROGRAM_INVOCATION_SHORT_NAME instead of PROGRAM_INVOCATION_NAME.
 
-       * argp-parse.c (parser_init): Set PARSER->state.flags.
+       * argp/argp-parse.c (parser_init): Set PARSER->state.flags.
        Make check whether PARSER has the prog name in argv[0] at the
        proper place.
 
index 73cae78aedef242532bfa0368a8aae048daf06e0..fbff6b3d3e17dd4ece4186cada3a68ff77a5af33 100644 (file)
@@ -381,13 +381,6 @@ link-libc = $(common-objpfx)libc.a $(gnulib) $(common-objpfx)libc.a
 endif
 endif
 
-# We have a versioning file for libc.so.  We must define this here since
-# otherwise in the subdirs this definition is not available and a rebuild
-# of libc.so happens without versioning.
-ifndef libc-map
-libc-map = libc.map
-endif
-
 ifndef link-extra-libs
 ifeq (yes,$(build-shared))
 ifneq ($(common-objpfx),$(objpfx))
index 4acf64cfdfb2ed59ee949cc229e5a73e4f4c0606..64301673d5c4e52875e7fa5d9a52bf7a5e491f2e 100644 (file)
--- a/Makerules
+++ b/Makerules
@@ -345,11 +345,7 @@ no-whole-archive =
 endif
 
 ifeq ($(versioning),yes)
-ifneq ($(..),)
-load-map-file = $(wildcard $($(@F:%.so=%)-map) $($(@F:%.so=%)-map):%=$(..)%)
-else
 load-map-file = $($(@F:%.so=%)-map)
-endif
 else
 load-map-file =
 endif
@@ -371,8 +367,6 @@ $(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS)  \
          -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
          -Wl,--whole-archive $(filter-out $(load-map-file),$^) \
          $(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so)
-         test -z "$($(@F)-version)" || \
-           (rm -f $@$($(@F)-version); $(LN_S) $(@F) $@$($(@F)-version))
 endef
 
 # Don't try to use -lc when making libc.so itself.
@@ -383,12 +377,18 @@ LDFLAGS-c.so = -nostdlib -nostartfiles
 LDLIBS-c.so = -lgcc
 # Give libc.so an entry point and make it directly runnable itself.
 LDFLAGS-c.so += -e __libc_main
+# We have a versioning file for libc.so.
+libc-map = $(..)libc.map
 # Use our own special initializer and finalizer files for libc.so.
 $(common-objpfx)libc.so: $(elfobjdir)/soinit.so \
                         $(common-objpfx)libc_pic.a \
                         $(elfobjdir)/sofini.so $(elfobjdir)/ld.so \
-                        $(libc-map:%=$(..)%)
+                        $(libc-map)
        $(build-shlib)
+ifdef libc.so-version
+$(common-objpfx)libc.so$(libc.so-version): $(common-objpfx)libc.so
+       $(make-link)
+endif
 endif
 \f
 # Some files must not be compiled with the exception handler mechanism
diff --git a/Rules b/Rules
index 45417e01427204c4b3d8826a18aa046973223e34..89050bedf1787d28676cf11e2c5caf0479cb385c 100644 (file)
--- a/Rules
+++ b/Rules
@@ -122,7 +122,7 @@ subdir_echo-headers: echo-headers
 
 .PHONY: subdir_echo-distinfo
 subdir_echo-distinfo:
-       @echo $(addprefix +header+,$(headers)) \
+       @echo $(addprefix +header+,$(headers) $(filter %.h,$(distribute))) \
              $(addprefix +nodist+,$(generated) $(common-generated) $(dont_distribute))
 
 # We want to install everything except the library itself, but update all
index edc5516851e04dd3786d55d9a5f5e295b7eb0c60..018a97807e99ca8cf510c871f1c479f983bf79cc 100644 (file)
@@ -38,6 +38,7 @@
 # define _(msgid)       (msgid)
 # define gettext(msgid) (msgid)
 #endif
+#define N_(msgid) (msgid)
 #endif
 
 #if _LIBC - 0
@@ -84,11 +85,11 @@ volatile int _argp_hang = 0;
 
 static const struct argp_option argp_default_options[] =
 {
-  {"help",       '?',          0, 0,  "Give this help list", -1},
-  {"usage",      OPT_USAGE,    0, 0,  "Give a short usage message"},
-  {"program-name",OPT_PROGNAME,"NAME", OPTION_HIDDEN, "Set the program name"},
+  {"help",       '?',          0, 0,  N_("Give this help list"), -1},
+  {"usage",      OPT_USAGE,    0, 0,  N_("Give a short usage message")},
+  {"program-name",OPT_PROGNAME,"NAME", OPTION_HIDDEN, N_("Set the program name")},
   {"HANG",       OPT_HANG,    "SECS", OPTION_ARG_OPTIONAL | OPTION_HIDDEN,
-     "Hang for SECS seconds (default 3600)"},
+     N_("Hang for SECS seconds (default 3600)")},
   {0, 0}
 };
 
@@ -145,7 +146,7 @@ static const struct argp argp_default_argp =
 \f
 static const struct argp_option argp_version_options[] =
 {
-  {"version",    'V',          0, 0,  "Print program version", -1},
+  {"version",    'V',          0, 0,  N_("Print program version"), -1},
   {0, 0}
 };
 
@@ -160,7 +161,7 @@ argp_version_parser (int key, char *arg, struct argp_state *state)
       else if (argp_program_version)
        fprintf (state->out_stream, "%s\n", argp_program_version);
       else
-       __argp_error (state, _("No version known!?"));
+       __argp_error (state, _("(PROGRAM ERROR) No version known!?"));
       if (! (state->flags & ARGP_NO_EXIT))
        exit (0);
       break;
@@ -637,8 +638,8 @@ parser_finalize (struct parser *parser,
        err = EBADKEY;
       }
 
-  /* Okay, we're all done, with either an error or success.  We only call the
-     parsers once more, to indicate which one.  */
+  /* Okay, we're all done, with either an error or success; call the parsers
+     to indicate which one.  */
 
   if (err)
     {
@@ -654,7 +655,7 @@ parser_finalize (struct parser *parser,
        group_parse (group, &parser->state, ARGP_KEY_ERROR, 0);
     }
   else
-    /* Do final cleanup, including propagating back values from parsers.  */
+    /* Notify parsers of success, and propagate back values from parsers.  */
     {
       /* We pass over the groups in reverse order so that child groups are
         given a chance to do there processing before passing back a value to
@@ -667,6 +668,10 @@ parser_finalize (struct parser *parser,
        err = 0;                /* Some parser didn't understand.  */
     }
 
+  /* Call parsers once more, to do any final cleanup.  Errors are ignored.  */
+  for (group = parser->egroup - 1; group >= parser->groups; group--)
+    group_parse (group, &parser->state, ARGP_KEY_FINI, 0);
+
   if (err == EBADKEY)
     err = EINVAL;
 
@@ -676,28 +681,55 @@ parser_finalize (struct parser *parser,
 }
 \f
 /* Call the user parsers to parse the non-option argument VAL, at the current
-   position, returning any error.  */
+   position, returning any error.  The state NEXT pointer is assumed to have
+   been adjusted (by getopt) to point after this argument; this function will
+   adjust it correctly to reflect however many args actually end up being
+   consumed.  */
 static error_t
 parser_parse_arg (struct parser *parser, char *val)
 {
-  int index = parser->state.next;
+  /* Save the starting value of NEXT, first adjusting it so that the arg
+     we're parsing is again the front of the arg vector.  */
+  int index = --parser->state.next;
   error_t err = EBADKEY;
   struct group *group;
+  int key = 0;                 /* Which of ARGP_KEY_ARG[S] we used.  */
 
+  /* Try to parse the argument in each parser.  */
   for (group = parser->groups
        ; group < parser->egroup && err == EBADKEY
        ; group++)
-    err = group_parse (group, &parser->state, ARGP_KEY_ARG, val);
-
-  if (!err)
-    if (parser->state.next >= index)
-      /* Remember that we successfully processed a non-option
-        argument -- but only if the user hasn't gotten tricky and set
-        the clock back.  */
-      (--group)->args_processed++;
-    else
-      /* The user wants to reparse some args, give getopt another try.  */
-      parser->try_getopt = 1;
+    {
+      parser->state.next++;    /* For ARGP_KEY_ARG, consume the arg.  */
+      key = ARGP_KEY_ARG;
+      err = group_parse (group, &parser->state, key, val);
+
+      if (err == EBADKEY)
+       /* This parser doesn't like ARGP_KEY_ARG; try ARGP_KEY_ARGS instead. */
+       {
+         parser->state.next--; /* For ARGP_KEY_ARGS, put back the arg.  */
+         key = ARGP_KEY_ARGS;
+         err = group_parse (group, &parser->state, key, 0);
+       }
+    }
+
+  if (! err)
+    {
+      if (key == ARGP_KEY_ARGS)
+       /* The default for ARGP_KEY_ARGS is to assume that if NEXT isn't
+          changed by the user, *all* arguments should be considered
+          consumed.  */
+       parser->state.next = parser->state.argc;
+
+      if (parser->state.next > index)
+       /* Remember that we successfully processed a non-option
+          argument -- but only if the user hasn't gotten tricky and set
+          the clock back.  */
+       (--group)->args_processed += (parser->state.next - index);
+      else
+       /* The user wants to reparse some args, give getopt another try.  */
+       parser->try_getopt = 1;
+    }
 
   return err;
 }
@@ -710,6 +742,7 @@ parser_parse_opt (struct parser *parser, int opt, char *val)
   /* The group key encoded in the high bits; 0 for short opts or
      group_number + 1 for long opts.  */
   int group_key = opt >> USER_BITS;
+  error_t err = EBADKEY;
 
   if (group_key == 0)
     /* A short option.  By comparing OPT's position in SHORT_OPTS to the
@@ -722,16 +755,39 @@ parser_parse_opt (struct parser *parser, int opt, char *val)
       if (short_index)
        for (group = parser->groups; group < parser->egroup; group++)
          if (group->short_end > short_index)
-           return group_parse (group, &parser->state, opt, optarg);
-
-      return EBADKEY;          /* until otherwise asserted */
+           {
+             err = group_parse (group, &parser->state, opt, optarg);
+             break;
+           }
     }
   else
     /* A long option.  We use shifts instead of masking for extracting
        the user value in order to preserve the sign.  */
-    return
+    err =
       group_parse (&parser->groups[group_key - 1], &parser->state,
                   (opt << GROUP_BITS) >> GROUP_BITS, optarg);
+
+  if (err == EBADKEY)
+    /* At least currently, an option not recognized is an error in the
+       parser, because we pre-compute which parser is supposed to deal
+       with each option.  */
+    {
+      static const char bad_key_err[] =
+       N_("(PROGRAM ERROR) Option should have been recognized!?");
+      if (group_key == 0)
+       __argp_error (&parser->state, "-%c: %s", opt, _(bad_key_err));
+      else
+       {
+         struct option *long_opt = parser->long_opts;
+         while (long_opt->val != opt && long_opt->name)
+           long_opt++;
+         __argp_error (&parser->state, "--%s: %s",
+                       long_opt->name ? long_opt->name : "???",
+                       _(bad_key_err));
+       }
+    }  
+
+  return err;
 }
 \f
 /* Parse the next argument in PARSER (as indicated by PARSER->state.next).
@@ -800,20 +856,20 @@ parser_parse_next (struct parser *parser, int *arg_ebadkey)
        return EBADKEY;
       }
     else
-      /* A non-option arg.  */
-      err =
-       parser_parse_arg (parser, parser->state.argv[parser->state.next++]);
-  else if (opt == KEY_ARG)
+      /* A non-option arg; simulate what getopt might have done.  */
+      {
+       opt = KEY_ARG;
+       optarg = parser->state.argv[parser->state.next++];
+      }
+
+  if (opt == KEY_ARG)
     /* A non-option argument; try each parser in turn.  */
     err = parser_parse_arg (parser, optarg);
   else
     err = parser_parse_opt (parser, opt, optarg);
-
+                     
   if (err == EBADKEY)
-    {
-      *arg_ebadkey = (opt == KEY_END || opt == KEY_ARG);
-      parser->state.next--;    /* Put back the unused argument.  */
-    }
+    *arg_ebadkey = (opt == KEY_END || opt == KEY_ARG);
 
   return err;
 }
index 61ed8351e625fa08e1820e548ba85f3b980ab365..2305590a5d38cec43572b388e4168e9f61fbcb81 100644 (file)
@@ -160,6 +160,12 @@ typedef error_t (*argp_parser_t)(int key, char *arg, struct argp_state *state);
    actually modify the argument (perhaps into an option), and have it
    processed again.  */
 #define ARGP_KEY_ARG           0
+/* There are remaining arguments not parsed by any parser, which may be found
+   starting at (STATE->argv + STATE->next).  If success is returned, but
+   STATE->next left untouched, it's assumed that all arguments were consume,
+   otherwise, the parser should adjust STATE->next to reflect any arguments
+   consumed.  */
+#define ARGP_KEY_ARGS          0x1000006
 /* There are no more command line arguments at all.  */
 #define ARGP_KEY_END           0x1000001
 /* Because it's common to want to do some special processing if there aren't
@@ -172,11 +178,12 @@ typedef error_t (*argp_parser_t)(int key, char *arg, struct argp_state *state);
    element of the CHILD_INPUT field, if any, in the state structure is
    copied to each child's state to be the initial value of the INPUT field.  */
 #define ARGP_KEY_INIT          0x1000003
+/* Use after all other keys, including SUCCESS & END.  */
+#define ARGP_KEY_FINI          0x1000007
 /* Passed in when parsing has successfully been completed (even if there are
    still arguments remaining).  */
 #define ARGP_KEY_SUCCESS       0x1000004
-/* Passed in if an error occurs (in which case a call with ARGP_KEY_SUCCESS is
-   never made, so any cleanup must be done here).  */
+/* Passed in if an error occurs.  */
 #define ARGP_KEY_ERROR         0x1000005
 
 /* An argp structure contains a set of options declarations, a function to
index 33d57ed70f2581bb50ca25938dcd03fa61d21688..489a565945f21a9cbc57fe85abba088ea90bf6fb 100644 (file)
@@ -35,7 +35,7 @@ elide-routines.so = $(dl-routines) dl-support enbl-secure
 # interpreter and operating independent of libc.
 rtld-routines  := rtld $(dl-routines) dl-sysdep dl-minimal
 distribute     = $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
-                 soinit.c sofini.c ldd.sh.in ldd.bash.in eval.c
+                 dl-hash.h soinit.c sofini.c ldd.sh.in ldd.bash.in eval.c
 
 extra-libs      = libdl
 extra-libs-others = $(extra-libs)
index 12d38c9a3a983831250cf08956219df9fb229479..f5b256808a6b72e0c23234511ba63c399a432210 100644 (file)
@@ -126,7 +126,6 @@ longjmp (jmp_buf env, int val) { __longjmp (env[0].__jmpbuf, val); }
 char * weak_function
 __dcgettext (const char *domainname, const char *msgid, int category)
 {
-  assert (domainname == _libc_intl_domainname);
   return (char *) msgid;
 }
 weak_alias (__dcgettext, dcgettext)
index 66f135916cc63fcc15212a14868ce467d91678ae..766e62c219dc40c8833053d99b4b3b6d4298bbb3 100644 (file)
@@ -53,7 +53,7 @@ elf_dynamic_do_rel (struct link_map *map,
       const ElfW(Sym) *const symtab =
        (const ElfW(Sym) *) (map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr);
 
-      if (map->l_info[VERSYMIDX (DT_VERNEEDNUM)])
+      if (map->l_info[VERSYMIDX (DT_VERSYM)])
        {
          const ElfW(Half) *const version =
            (const ElfW(Half) *) (map->l_addr
index 809c2717da4dd6ce44bce4f4001503943d08781e..32a9405422e1390c05a3136f80c4f1ba664a0348 100644 (file)
@@ -65,7 +65,7 @@ Report bugs using the \`glibcbug' script to <bugs@gnu.ai.mit.edu>."
     verbose=yes
     shift ;;
   --v | --ve | --ver)
-    echo >&2 $"ldd: option \`" $1 $"' is ambiguous"
+    echo >&2 $"ldd: option \`$1' is ambiguous"
     exit 1 ;;
   --)          # Stop option processing.
     shift; break ;;
index e6088943e2f02df08fd8f01828951b2431045c8c..f2efb4bf7e509ccf85d863d63d61c7da0a278db7 100644 (file)
@@ -37,7 +37,7 @@ endif
 # The linked shared library is never a dependent of lib-noranlib,
 # because linking it will depend on libc.so already being built.
 ifneq (,$(filter .so,$(object-suffixes-$(lib))))
-others: $(objpfx)$(lib).so
+others: $(objpfx)$(lib).so$($(lib).so-version)
 endif
 
 
index a14179b6a3451da0356555b573731398e6170b1b..c38480e6378992c0c1d5b1bc3d54546f37d97e0a 100644 (file)
 #define __USE_REENTRANT        1
 #endif
 
+/* We do support the IEC 559 math functionality, real and complex.  */
+#define __STDC_IEC_559__               1
+#define __STDC_IEC_559_COMPLEX__       1
 
 /* This macro indicates that the installed library is the GNU C Library.
    For historic reasons the value now is 6 and this will stay from now
index d390a8d809104264e4d0cb9753fe47edd7b160e4..6a680c18b72bd239c71089a9b97876fcf74803b2 100644 (file)
@@ -105,7 +105,7 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
                        else
                                (void)fprintf(stderr, "rcmd: socket: %m\n");
                        sigsetmask(oldmask);
-                       return (-1);
+                       return -1;
                }
                fcntl(s, F_SETOWN, pid);
                sin.sin_family = hp->h_addrtype;
@@ -140,7 +140,7 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
                }
                (void)fprintf(stderr, "%s: %m\n", hp->h_name);
                sigsetmask(oldmask);
-               return (-1);
+               return -1;
        }
        lport--;
        if (fd2p == 0) {
@@ -149,7 +149,7 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
        } else {
                char num[8];
                int s2 = rresvport(&lport), s3;
-               int len = sizeof(from);
+               size_t len = sizeof(from);
 
                if (s2 < 0)
                        goto bad;
@@ -211,14 +211,14 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
                goto bad2;
        }
        sigsetmask(oldmask);
-       return (s);
+       return s;
 bad2:
        if (lport)
                (void)close(*fd2p);
 bad:
        (void)close(s);
        sigsetmask(oldmask);
-       return (-1);
+       return -1;
 }
 
 int
@@ -232,20 +232,20 @@ rresvport(alport)
        sin.sin_addr.s_addr = INADDR_ANY;
        s = socket(AF_INET, SOCK_STREAM, 0);
        if (s < 0)
-               return (-1);
+               return -1;
        for (;;) {
                sin.sin_port = htons((u_short)*alport);
                if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) >= 0)
-                       return (s);
+                       return s;
                if (errno != EADDRINUSE) {
                        (void)close(s);
-                       return (-1);
+                       return -1;
                }
                (*alport)--;
                if (*alport == IPPORT_RESERVED/2) {
                        (void)close(s);
                        __set_errno (EAGAIN);           /* close */
-                       return (-1);
+                       return -1;
                }
        }
 }
@@ -282,9 +282,9 @@ ruserok(rhost, superuser, ruser, luser)
        for (ap = hp->h_addr_list; *ap; ++ap) {
                bcopy(*ap, &addr, sizeof(addr));
                if (iruserok(addr, superuser, ruser, luser) == 0)
-                       return (0);
+                       return 0;
        }
-       return (-1);
+       return -1;
 }
 
 /*
@@ -314,7 +314,7 @@ again:
        if (hostf) {
                if (__ivaliduser(hostf, raddr, luser, ruser) == 0) {
                        (void)fclose(hostf);
-                       return (0);
+                       return 0;
                }
                (void)fclose(hostf);
        }
@@ -349,7 +349,7 @@ again:
                  }
 
                if (hostf == NULL)
-                       return (-1);
+                       return -1;
                /*
                 * If not a regular file, or is owned by someone other than
                 * user or root or if writeable by anyone but the owner, quit.
@@ -369,11 +369,11 @@ again:
                if (cp) {
                        __rcmd_errstr = cp;
                        (void)fclose(hostf);
-                       return (-1);
+                       return -1;
                }
                goto again;
        }
-       return (-1);
+       return -1;
 }
 
 /*
@@ -415,11 +415,11 @@ __ivaliduser(hostf, raddr, luser, ruser)
                if (__icheckhost(raddr, buf) &&
                    strcmp(ruser, *user ? user : luser) == 0) {
                        free (buf);
-                       return (0);
+                       return 0;
                }
        }
        free (buf);
-       return (-1);
+       return -1;
 }
 
 /*
@@ -430,7 +430,7 @@ __icheckhost(raddr, lhost)
        u_int32_t raddr;
        register char *lhost;
 {
-       register struct hostent hostbuf, *hp;
+       struct hostent hostbuf, *hp;
        size_t buflen;
        char *buffer;
        register u_int32_t laddr;
@@ -439,7 +439,7 @@ __icheckhost(raddr, lhost)
 
        /* Try for raw ip address first. */
        if (isdigit(*lhost) && (int32_t)(laddr = inet_addr(lhost)) != -1)
-               return (raddr == laddr);
+               return raddr == laddr;
 
        /* Better be a hostname. */
        buflen = 1024;
@@ -452,14 +452,14 @@ __icheckhost(raddr, lhost)
            {
              /* Enlarge the buffer.  */
              buflen *= 2;
-             buflen = __alloca (buflen);
+             buffer = __alloca (buflen);
            }
 
        /* Spin through ip addresses. */
        for (pp = hp->h_addr_list; *pp; ++pp)
                if (!bcmp(&raddr, *pp, sizeof(u_int32_t)))
-                       return (1);
+                       return 1;
 
        /* No match. */
-       return (0);
+       return 0;
 }
index 29f67f6eacc1b068a21602acbdc247a8621a8ccc..c5100b829a9557fc31d0fabd3cea9a80cf5fc99a 100644 (file)
--- a/libc.map
+++ b/libc.map
@@ -6,14 +6,14 @@ GLIBC_2.0 {
     _IO_stderr_; _IO_stdin_; _IO_stdout_;
     _nl_msg_cat_cntr; __environ; _environ; _res;
     ___brk_addr; __curbrk; _nl_current_LC_CTYPE; _libc_intl_domainname;
-    _sys_errlist; _sys_siglist;
+    _sys_errlist; _sys_siglist; __progname;
 
     # helper functions
     __errno_location; __libc_init_first; __h_errno_location;
 
     # functions with special/multiple interfaces
     __sigsetjmp; _setjmp; __sigaddset; __sigdelset; __sigismember;
-    __sysv_signal; __bsd_getpgrp;
+    __sysv_signal; __bsd_getpgrp; _longjmp;
 
     # functions which have an additional interface since they are
     # are cancelable.
@@ -52,6 +52,22 @@ GLIBC_2.0 {
     __sched_getparam; __sched_getscheduler; __sched_setscheduler;
     __sched_yield; __on_exit; __gettimeofday; __fork; __clone;
     __nss_configure_lookup; _dl_open; _IO_file_setbuf;
+    _IO_file_init; _IO_file_attach; _IO_do_write; _IO_seekoff;
+    _IO_link_in; _IO_file_open; _IO_file_doallocate; _IO_file_fopen;
+    _IO_file_overflow; _IO_file_underflow; _IO_file_sync; _IO_file_seekoff;
+    _IO_file_close_it; _IO_file_read; _IO_file_seek; _IO_file_write;
+    _IO_file_stat; _IO_file_close; _IO_file_xsputn; _IO_sgetn;
+    _IO_seekpos; _IO_padn; _IO_getline; _IO_vfprintf;
+    _IO_proc_open; _IO_proc_close; _IO_vfscanf; _IO_free_backup_area;
+    _IO_un_link; _IO_switch_to_get_mode; _IO_default_uflow;
+    _IO_default_xsputn; _IO_default_xsgetn; _IO_default_pbackfail;
+    _IO_setb; _IO_default_doallocate; _IO_doallocbuf; _IO_init;
+    _IO_default_finish; _IO_sputbackc; _IO_sungetc; _IO_adjust_column;
+    _IO_flush_all; _IO_flush_all_linebuffered; _IO_init_marker;
+    _IO_remove_marker; _IO_marker_difference; _IO_marker_delta;
+    _IO_seekmark; _IO_unsave_markers; _IO_str_overflow;
+    _IO_str_underflow; _IO_str_init_static; _IO_str_init_readonly;
+    _IO_str_seekoff; _IO_str_pbackfail; _IO_list_all;
 
     # all functions and variables in the normal name space
     a*; b*; c*; d*; e*; f*; g*; h*; i*; j*; k*; l*; m*;
index 916dd6c5128d26009b41f5b53cbc92e8dbab05c3..e4f9a9e9be8e732123ccf01d95584731442b98e9 100644 (file)
@@ -27,7 +27,7 @@ headers       := utmp.h utmpbits.h lastlog.h pty.h
 routines := getutent getutent_r getutid getutline getutid_r getutline_r \
            utmp_file utmp_daemon utmpname updwtmp
 
-others = utmpd
+others = utmpd utmpdump
 install-sbin = utmpd
 utmpd-routines := connection database error request xtmp
 extra-objs := $(utmpd-routines:=.o)
index d2c12e68cf05c520dae6fdca8db1cbfb0d4994b0..5e6bfa19cf394f928a0f6f5c1c0a5a9969fd1f18 100644 (file)
@@ -182,12 +182,8 @@ do_setutent (client_connection *connection)
   setutent_request *request;
   setutent_reply reply;
 
+  /* The request size varies, so don't check it.  */
   request = (setutent_request *)connection->read_base;
-  if (request->header.size != sizeof (setutent_request))
-    {
-      warning (EINVAL, "invalid request size");
-      return -1;
-    }
 
   /* Initialize reply.  */
   reply.header.version = UTMPD_VERSION;
@@ -195,7 +191,8 @@ do_setutent (client_connection *connection)
   reply.header.type = UTMPD_REQ_SETUTENT;
 
   /* Select database.  */
-  if (!strncmp (request->file, _PATH_UTMP, sizeof request->file))
+  if (!strncmp (request->file, _PATH_UTMP,
+               request->header.size - sizeof (setutent_request)))
     connection->database = utmp_db;
   else
     {
@@ -450,7 +447,7 @@ do_pututline (client_connection *connection)
       goto return_error;
     }
 
-  if (connection->database == NULL || connection->position == -1)
+  if (connection->database == NULL)
     {
       errno = ESRCH;
       goto return_error;
@@ -520,12 +517,8 @@ do_updwtmp (client_connection *connection)
   updwtmp_reply reply;
   utmp_database *database;
 
+  /* The request size varies, so don't check it.  */
   request = (updwtmp_request *)connection->read_base;
-  if (request->header.size != sizeof (updwtmp_request))
-    {
-      warning (EINVAL, "invalid request size");
-      return -1;
-    }
 
   /* Initialize reply.  */
   reply.header.version = UTMPD_VERSION;
@@ -539,7 +532,8 @@ do_updwtmp (client_connection *connection)
     }
 
   /* Select database.  */
-  if (!strncmp (request->file, _PATH_UTMP, sizeof request->file))
+  if (!strncmp (request->file, _PATH_UTMP,
+               request->header.size - sizeof (updwtmp_request)))
     database = utmp_db;
   else
     {
index ca310a21de29221874231c19d267fc6023ec2f91..3c8d626a84037b2445bbadfadb1506eae7526557 100644 (file)
@@ -134,8 +134,9 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
     usage (EXIT_SUCCESS);
 
   signal (SIGINT, termination_handler);
+  signal (SIGQUIT, termination_handler);
   signal (SIGTERM, termination_handler);
-
+  
   /* Check if we are already running.  */
   if (check_pid (_PATH_UTMPDPID))
     error (EXIT_FAILURE, 0, "already running");
@@ -168,8 +169,13 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
 
       if (write_pid (_PATH_UTMPDPID) < 0)
        warning (errno, "%s", _PATH_UTMPDPID);
-    }
 
+      /* Ignore job control signals.  */
+      signal (SIGTTOU, SIG_IGN);
+      signal (SIGTTIN, SIG_IGN);
+      signal (SIGTSTP, SIG_IGN);
+    }
+  
   /* Drop priviliges.  */
   drop_priviliges ();
   
index 8fbc33c92318937cdba24a8f48d0b1b3d5015545..ef92a1490b9162374c63f5441fd83132af616a67 100644 (file)
@@ -22,7 +22,6 @@
 
 /* This is an *internal* header.  */
 
-#include <limits.h>
 #include <stddef.h>
 #include <utmp.h>
 
@@ -68,7 +67,7 @@ typedef struct
 {
   request_header header;
   /* File to use.  */
-  char file[_POSIX_PATH_MAX + 1];
+  char file[0];
 } setutent_request;
 
 typedef struct
@@ -100,10 +99,10 @@ typedef struct
 typedef struct
 {
   request_header header;
-  /* File to use.  */
-  char file[_POSIX_PATH_MAX + 1];
   /* Entry to write.  */
   struct utmp utmp;
+  /* File to use.  */
+  char file[0];
 } updwtmp_request;
 
 
index 705c8b3de95c9839e3b09e95184ae3335578d529..e0a20e9a9f707018c8e7e281f5f9eb1a2a31428b 100644 (file)
@@ -227,24 +227,35 @@ updwtmp_daemon (const char *file, const struct utmp *utmp)
 static int
 do_setutent (int sock)
 {
-  setutent_request request;
+  setutent_request *request;
   setutent_reply reply;
+  size_t size;
 
-  request.header.version = UTMPD_VERSION;
-  request.header.size = sizeof (setutent_request);
-  request.header.type = UTMPD_REQ_SETUTENT;
-  strncpy (request.file, __libc_utmp_file_name, sizeof request.file);
+  size = sizeof (setutent_request) + strlen (__libc_utmp_file_name) + 1;
+  
+  request = malloc (size);
+  if (request == NULL)
+    return -1;
+  
+  request->header.version = UTMPD_VERSION;
+  request->header.size = size;
+  request->header.type = UTMPD_REQ_SETUTENT;
+  strcpy (request->file, __libc_utmp_file_name);
 
   reply.header.version = UTMPD_VERSION;
   reply.header.size = sizeof (setutent_reply);
   reply.header.type = UTMPD_REQ_SETUTENT;
 
-  if (send_request (sock, &request.header, &reply.header) < 0)
-    return -1;
+  if (send_request (sock, &request->header, &reply.header) < 0)
+    {
+      free (request);
+      return -1;
+    }
 
   if (reply.result < 0)
     __set_errno (reply.errnum);
 
+  free (request);
   return reply.result;
 }
 
@@ -375,25 +386,36 @@ do_pututline (int sock, const struct utmp *utmp)
 static int
 do_updwtmp (int sock, const char *file, const struct utmp *utmp)
 {
-  updwtmp_request request;
+  updwtmp_request *request;
   updwtmp_reply reply;
+  size_t size;
 
-  request.header.version = UTMPD_VERSION;
-  request.header.size = sizeof (updwtmp_request);
-  request.header.type = UTMPD_REQ_UPDWTMP;
-  strncpy (request.file, file, sizeof request.file);
-  memcpy (&request.utmp, utmp, sizeof (struct utmp));
+  size = sizeof (updwtmp_request) + strlen (file) + 1;
+  
+  request = malloc (size);
+  if (request == NULL)
+    return -1;
+  
+  request->header.version = UTMPD_VERSION;
+  request->header.size = size;
+  request->header.type = UTMPD_REQ_UPDWTMP;
+  memcpy (&request->utmp, utmp, sizeof (struct utmp));
+  strcpy (request->file, file);
 
   reply.header.version = UTMPD_VERSION;
   reply.header.size = sizeof (updwtmp_reply);
   reply.header.type = UTMPD_REQ_UPDWTMP;
 
-  if (send_request (sock, &request.header, &reply.header) < 0)
-    return -1;
+  if (send_request (sock, &request->header, &reply.header) < 0)
+    {
+      free (request);
+      return -1;
+    }
 
   if (reply.result < 0)
     __set_errno (reply.errnum);
 
+  free (request);
   return reply.result;
 }
 
index 2026070f14945adf21cdb9a52f860344dc5384b7..51b33226e02204bd8847b8ecb0c2b434eb40b03e 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/stat.h>
 #include <unistd.h>
 #include <utmp.h>
-#include <sys/file.h>
-#include <sys/stat.h>
 
 #include "utmp-private.h"
 
@@ -116,7 +115,7 @@ endutent_file (void)
 static int
 getutent_r_file (struct utmp *buffer, struct utmp **result)
 {
-  int nbytes;
+  ssize_t nbytes;
   struct flock fl;                     /* Information struct for locking.  */
 
   /* Open utmp file if not already done.  */
@@ -136,7 +135,7 @@ getutent_r_file (struct utmp *buffer, struct utmp **result)
 
   /* Try to get the lock.  */
   memset (&fl, '\0', sizeof (struct flock));
-  fl.l_type = F_WRLCK;
+  fl.l_type = F_RDLCK;
   fl.l_whence = SEEK_SET;
   fcntl (file_fd, F_SETLKW, &fl);
 
@@ -170,12 +169,20 @@ static int
 getutline_r_file (const struct utmp *line, struct utmp *buffer,
                  struct utmp **result)
 {
+  struct flock fl;
+  
   if (file_fd < 0 || file_offset == -1l)
     {
       *result = NULL;
       return -1;
     }
 
+  /* Try to get the lock.  */
+  memset (&fl, '\0', sizeof (struct flock));
+  fl.l_type = F_RDLCK;
+  fl.l_whence = SEEK_SET;
+  fcntl (file_fd, F_SETLKW, &fl);
+
   while (1)
     {
       /* Read the next entry.  */
@@ -185,7 +192,7 @@ getutline_r_file (const struct utmp *line, struct utmp *buffer,
          __set_errno (ESRCH);
          file_offset = -1l;
          *result = NULL;
-         return -1;
+         goto unlock_return;
        }
       file_offset += sizeof (struct utmp);
 
@@ -203,7 +210,12 @@ getutline_r_file (const struct utmp *line, struct utmp *buffer,
   memcpy (buffer, &last_entry, sizeof (struct utmp));
   *result = buffer;
 
-  return 0;
+unlock_return:
+  /* And unlock the file.  */
+  fl.l_type = F_UNLCK;
+  fcntl (file_fd, F_SETLKW, &fl);
+
+  return ((result == NULL) ? -1 : 0);
 }
 
 
@@ -237,6 +249,15 @@ proc_utmp_eq (const struct utmp *entry, const struct utmp *match)
 static int
 internal_getut_r (const struct utmp *id, struct utmp *buffer)
 {
+  int result = -1;
+  struct flock fl;
+  
+  /* Try to get the lock.  */
+  memset (&fl, '\0', sizeof (struct flock));
+  fl.l_type = F_RDLCK;
+  fl.l_whence = SEEK_SET;
+  fcntl (file_fd, F_SETLKW, &fl);
+
 #if _HAVE_UT_TYPE - 0
   if (id->ut_type == RUN_LVL || id->ut_type == BOOT_TIME
       || id->ut_type == OLD_TIME || id->ut_type == NEW_TIME)
@@ -252,7 +273,7 @@ internal_getut_r (const struct utmp *id, struct utmp *buffer)
            {
              __set_errno (ESRCH);
              file_offset = -1l;
-             return -1;
+             goto unlock_return;
            }
          file_offset += sizeof (struct utmp);
 
@@ -274,7 +295,7 @@ internal_getut_r (const struct utmp *id, struct utmp *buffer)
            {
              __set_errno (ESRCH);
              file_offset = -1l;
-             return -1;
+             goto unlock_return;
            }
          file_offset += sizeof (struct utmp);
 
@@ -283,7 +304,14 @@ internal_getut_r (const struct utmp *id, struct utmp *buffer)
        }
     }
 
-  return 0;
+  result = 0;
+
+unlock_return:
+  /* And unlock the file.  */
+  fl.l_type = F_UNLCK;
+  fcntl (file_fd, F_SETLKW, &fl);
+
+  return result;
 }
 
 
@@ -401,47 +429,50 @@ static int
 updwtmp_file (const char *file, const struct utmp *utmp)
 {
   int result = -1;
-  struct stat st;
-  ssize_t nbytes;
+  struct flock fl;
+  off_t offset;
   int fd;
   
   /* Open WTMP file.  */
-  fd = __open (file, O_WRONLY | O_APPEND);
+  fd = open (file, O_WRONLY);
   if (fd < 0)
     return -1;
 
-  /* Try to lock the file.  */
-  if (__flock (fd, LOCK_EX | LOCK_NB) < 0 && errno != ENOSYS)
+  /* Try to get the lock.  */
+  memset (&fl, '\0', sizeof (struct flock));
+  fl.l_type = F_WRLCK;
+  fl.l_whence = SEEK_SET;
+  fcntl (fd, F_SETLKW, &fl);
+  
+  /* Remember original size of log file.  */
+  offset = lseek (fd, 0, SEEK_END);
+  if (offset % sizeof (struct utmp) != 0)
     {
-      /* Oh, oh.  The file is already locked.  Wait a bit and try again.  */
-      sleep (1);
+      offset -= offset % sizeof (struct utmp);
+      ftruncate (fd, offset);
 
-      /*  This time we ignore the error.  */
-      __flock (fd, LOCK_EX | LOCK_NB);
+      if (lseek (fd, 0, SEEK_END) < 0)
+       goto unlock_return;
     }
 
-  /* Remember original size of log file.  */
-  if (__fstat (fd, &st) < 0)
-    goto fail;
-
   /* Write the entry.  If we can't write all the bytes, reset the file
      size back to the original size.  That way, no partial entries
      will remain.  */
-  nbytes = __write (fd, utmp, sizeof (struct utmp));
-  if (nbytes != sizeof (struct utmp))
+  if (write (fd, utmp, sizeof (struct utmp)) != sizeof (struct utmp))
     {
-      ftruncate (fd, st.st_size);
-      goto fail;
+      ftruncate (fd, offset);
+      goto unlock_return;
     }
 
   result = 0;
   
-fail:
+unlock_return:
   /* And unlock the file.  */
-  __flock (fd, LOCK_UN);
+  fl.l_type = F_UNLCK;
+  fcntl (fd, F_SETLKW, &fl);
 
   /* Close WTMP file.  */
-  __close (fd);
+  close (fd);
 
   return result;
 }
index 80ab3dc30a51011f16955f5cbc403df27785b2f9..836229356e42a2ce1930a36797a92af795439cc1 100644 (file)
@@ -27,7 +27,7 @@ GAWK = gawk
 .PHONY: all dvi info
 all: dvi info
 dvi: libc.dvi
-info: libc.info
+info: libc.info dir-add.info
 
 # Get glibc's configuration info.
 ifneq (,$(wildcard ../Makeconfig))
@@ -75,7 +75,7 @@ stamp-summary: summary.awk $(chapters) $(chapters-incl)
 # Generate a file which can be added to the `dir' content to provide direct
 # access to the documentation of the function, variables, and other
 # definitions.
-dir-add.texi: xtract-typefun.awk $(chapters)
+dir-add.texi: xtract-typefun.awk $(chapters) $(chapters-incl)
        (echo "@dircategory GNU C library functions";                   \
         echo "@direntry";                                              \
         $(GAWK) -f $^ | sort;                                          \
@@ -101,7 +101,7 @@ distribute = $(minimal-dist)                                                \
                        $(minimal-dist)))                               \
             libc.info* libc.?? libc.??s texinfo.tex summary.texi       \
             stamp-summary chapters chapters-incl1 chapters-incl2       \
-            xtract-typefun.awk dir-add.texi dir-add.info
+            xtract-typefun.awk dir-add.texi dir-add.info dir
 export distribute := $(distribute)
 
 tar-it = tar chovf $@ $^
@@ -143,6 +143,7 @@ realclean: distclean
 install-data subdir_install: install
 install: $(inst_infodir)/libc.info dir-add.info
        @if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
+         test -f $(inst_infodir)/dir || cp dir $(inst_infodir);\
          install-info --info-dir=$(inst_infodir) $(inst_infodir)/libc.info;\
          install-info --info-dir=$(inst_infodir) dir-add.info;\
        else : ; fi
index 53a405e93f74cce41b463ee230be7d1b9916e66c..f28a87afc6814cbf142d84bc22db2f2b1a3598c1 100644 (file)
@@ -271,13 +271,13 @@ group); in this usage, it's conventional to end the string with a
 The group this option is in.
 
 In a long help message, options are sorted alphabetically within each
-group, and the groups presented in the order 0, 1, 2, @dots{}, @var{n},
--@var{m}, @dots{}, -2, -1.  Every entry in an options array with this
+group, and the groups presented in the order @math{0, 1, 2, @dots{}, @var{n},
+-@var{m}, @dots{}, -2, -1}.  Every entry in an options array with this
 field 0 will inherit the group number of the previous entry, or zero if
 it's the first one, unless its a group header (@code{name} and
-@code{key} fields both zero), in which case, the previous entry + 1 is
+@code{key} fields both zero), in which case, the previous entry @math{+ 1} is
 the default.  Automagic options such as @samp{--help} are put into group
--1.
+--1.
 
 Note that because of C structure initialization rules, this field
 often need not be specified, because 0 is the right value.
@@ -458,6 +458,35 @@ decrements the @code{next} field of its @var{state} argument, the option
 won't be considered processed; this is to allow you to actually modify
 the argument (perhaps into an option), and have it processed again.
 
+@comment argp.h
+@comment GNU
+@item ARGP_KEY_ARGS
+If a parser function returns @code{ARGP_ERR_UNKNOWN} for
+@code{ARGP_KEY_ARG}, it is immediately called again with the key
+@code{ARGP_KEY_ARGS}, which has a similar meaning, but is slightly more
+convenient for consuming all remaining arguments.  @var{arg} is 0, and
+the tail of the argument vector may be found at @code{@var{state}->argv
++ @var{state}->next}.  If success is returned for this key, and
+@code{@var{state}->next} is unchanged, then all remaining arguments are
+considered to have been consumed, otherwise, the amount by which
+@code{@var{state}->next} has been adjust indicates how many were used.
+For instance, here's an example that uses both, for different args:
+
+@smallexample
+...
+case ARGP_KEY_ARG:
+  if (@var{state}->arg_num == 0)
+    /* First argument */
+    first_arg = @var{arg};
+  else
+    return ARGP_KEY_UNKNOWN;    /* Let the next case parse it.  */
+  break;
+case ARGP_KEY_ARGS:
+  remaining_args = @var{state}->argv + @var{state}->next;
+  num_remaining_args = @var{state}->argc - @var{state}->next;
+  break;
+@end smallexample
+
 @comment argp.h
 @comment GNU
 @item ARGP_KEY_END
@@ -797,7 +826,11 @@ Don't exit on errors (they may still result in error messages).
 @comment argp.h
 @comment GNU
 @item ARGP_LONG_ONLY
-Use the gnu getopt `long-only' rules for parsing arguments.
+Use the gnu getopt `long-only' rules for parsing arguments.  This
+allows long-options to be recognized with only a single @samp{-} (for
+instances, @samp{-help}), but results in a generally somewhat less
+useful interface, that conflicts with the way most GNU programs work.
+For this reason, its use is discouraged.
 
 @comment argp.h
 @comment GNU
diff --git a/manual/dir b/manual/dir
new file mode 100644 (file)
index 0000000..f5920b1
--- /dev/null
@@ -0,0 +1,16 @@
+$Id$
+This is the file .../info/dir, which contains the topmost node of the
+Info hierarchy.  The first time you invoke Info you start off
+looking at that node, which is (dir)Top.
+\1f
+File: dir      Node: Top       This is the top of the INFO tree
+
+  This (the Directory node) gives a menu of major topics. 
+  Typing "q" exits, "?" lists all Info commands, "d" returns here,
+  "h" gives a primer for first-timers,
+  "mEmacs<Return>" visits the Emacs topic, etc.
+
+  In Emacs, you can click mouse button 2 on a menu item or cross reference
+  to select it.
+
+* Menu: 
index cb9f5412f840ea26d37e0fa6e1e3dbeb4a799e8d..46101ded99f33995b58a3e4d987ae08126ac224c 100644 (file)
@@ -1443,6 +1443,15 @@ it is empty (rather than a pointer to an empty block of memory); this
 invariant is maintained for argz vectors created by the functions here.
 @end deftypefun
 
+@comment argz.h
+@comment GNU
+@deftypefun error_t argz_replace (@w{char **@var{argz}, size_t *@var{argz_len}}, @w{const char *@var{str}, const char *@var{with}}, @w{unsigned *@var{replace_count}})
+Replace any occurances of the string @var{str} in @var{argz} with
+@var{with}, reallocating @var{argz} as necessary.  If
+@var{replace_count} is non-zero, @code{*@var{replace_count}} will be
+incremented by number of replacements performed.
+@end deftypefun
+
 @node Envz Functions, , Argz Functions, Argz and Envz Vectors
 @subsection Envz Functions
 
index 8e42adc34fd0c2ed449f9204c77ddfde63e22f55..cce85615de9986a53c4f6d10c3af63f0ebd7f2a6 100644 (file)
@@ -1,5 +1,5 @@
 %% TeX macros to handle Texinfo files.
-%% $Id: texinfo.tex,v 2.203 1997/06/13 22:43:07 drepper Exp $
+%% \$Id: texinfo.tex,v 2.204 1997/06/19 18:21:08 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.203 $
+\deftexinfoversion\$Revision: 2.204 $
 \message{Loading texinfo package [Version \texinfoversion]:}
 
 % If in a .fmt file, print the version number
       %
       \unvbox\headlinebox
       \pagebody{#1}%
-      \unvbox\footlinebox
+      \ifdim\ht\footlinebox > 0pt
+        % Only leave this space if the footline is nonempty.
+        % (We lessened \vsize for it in \oddfootingxxx.)
+        % The \baselineskip=24pt in plain's \makefootline has no effect.
+        \vskip 2\baselineskip
+        \unvbox\footlinebox
+      \fi
       %
       \ifcropmarks
           \egroup % end of \vbox\bgroup
@@ -1006,6 +1012,15 @@ where each line of input produces a line of output.}
    \openindices
    \fixbackslash  % Turn off hack to swallow `\input texinfo'.
    \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
+   %
+   % If texinfo.cnf is present on the system, read it.
+   % Useful for site-wide @afourpaper, etc.
+   % Just to be on the safe side, close the input stream before the \input.
+   \openin 1 texinfo.cnf
+   \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
+   \closein1
+   \temp
+   %
    \comment % Ignore the actual filename.
 }
 
@@ -1504,10 +1519,7 @@ where each line of input produces a line of output.}
 \gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
 \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish}
-\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
 
 \gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
 \gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
@@ -1515,12 +1527,15 @@ where each line of input produces a line of output.}
 
 \gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
 \gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+  %
+  % Leave some space for the footline.  Hopefully ok to assume
+  % @evenfooting will not be used by itself.
+  \global\advance\pageheight by -3\baselineskip
+  \global\advance\vsize by -3\baselineskip
+}
 
-\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish}
-\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
 %
 }% unbind the catcode of @.
 
@@ -2244,7 +2259,13 @@ width0pt\relax} \fi
 %\def\char{\realbackslash char}%
 \def\TeX{\realbackslash TeX}%
 \def\dots{\realbackslash dots }%
-\def\copyright{\realbackslash copyright }%
+\def\result{\realbackslash result}%
+\def\equiv{\realbackslash equiv}%
+\def\expansion{\realbackslash expansion}%
+\def\print{\realbackslash print}%
+\def\error{\realbackslash error}%
+\def\point{\realbackslash point}%
+\def\copyright{\realbackslash copyright}%
 \def\tclose##1{\realbackslash tclose {##1}}%
 \def\code##1{\realbackslash code {##1}}%
 \def\dotless##1{\realbackslash dotless {##1}}%
@@ -2696,6 +2717,12 @@ width0pt\relax} \fi
   \def\print{\realbackslash print}%
   \def\TeX{\realbackslash TeX}%
   \def\dots{\realbackslash dots}%
+  \def\result{\realbackslash result}%
+  \def\equiv{\realbackslash equiv}%
+  \def\expansion{\realbackslash expansion}%
+  \def\print{\realbackslash print}%
+  \def\error{\realbackslash error}%
+  \def\point{\realbackslash point}%
   \def\copyright{\realbackslash copyright}%
   \def\tt{\realbackslash tt}%
   \def\bf{\realbackslash bf}%
index fbbcad6ea9b83287e2af9bc5d98039da40d23a91..bd4506b99e03daf76e18eeb8cf14a6560496fc37 100644 (file)
@@ -39,20 +39,20 @@ extra-libs-others = $(extra-libs)
 libm-map       := libm.map
 
 libm-support = k_standard s_lib_version s_matherr s_signgam            \
-              s_rinttol s_rinttoll s_roundtol s_roundtoll              \
+              s_lrint s_llrint s_lround s_llround                      \
               fclrexcpt fgetexcptflg fraiseexcpt fsetexcptflg          \
               ftestexcept fegetround fesetround fegetenv feholdexcpt   \
               fesetenv feupdateenv
 libm-calls = e_acos e_acosh e_asin e_atan2 e_atanh e_cosh e_exp e_fmod \
             e_hypot e_j0 e_j1 e_jn e_lgamma_r e_log e_log10 e_pow      \
-            e_rem_pio2 e_remainder e_scalb e_sinh e_sqrt k_cos         \
-            k_rem_pio2 k_sin k_tan s_asinh s_atan s_cbrt               \
+            e_rem_pio2 e_remainder e_scalb e_sinh e_sqrt e_gamma_r     \
+            k_cos k_rem_pio2 k_sin k_tan s_asinh s_atan s_cbrt         \
             s_ceil s_copysign s_cos s_erf s_expm1 s_fabs s_finite      \
             s_floor s_frexp s_ilogb s_ldexp s_log1p s_logb             \
             s_modf s_nextafter s_rint s_scalbn s_significand           \
             s_sin s_tan s_tanh w_acos w_acosh w_asin                   \
             w_atan2 w_atanh w_cosh w_drem w_exp w_fmod w_gamma         \
-            w_gamma_r w_hypot w_j0 w_j1 w_jn w_lgamma w_lgamma_r       \
+            w_hypot w_j0 w_j1 w_jn w_lgamma w_lgamma_r                 \
             w_log w_log10 w_pow w_remainder w_scalb w_sinh w_sqrt      \
             s_signbit s_fpclassify s_fmax s_fmin s_fdim s_nan s_trunc  \
             s_remquo s_log2 s_exp2 s_round s_nearbyint s_sincos        \
index be7538350b97b8f95103339f19802b67194b9951..5bf968f844eba6f77766fe70d6267d4e56d4d2bf 100644 (file)
@@ -47,8 +47,8 @@
    ilogb, isfinite, isinf, isnan, isnormal,
    ldexp, lgamma, log, log10, log1p, log2, logb,
    modf, nearbyint, nextafter,
-   pow, remainder, remquo, rint, rinttol, rinttoll,
-   round, roundtol, roundtoll,
+   pow, remainder, remquo, rint, lrint, llrint,
+   round, lround, llround,
    scalb, scalbn, signbit, sin, sincos, sinh, sqrt, tan, tanh, trunc
 
    and for the following complex math functions:
@@ -593,6 +593,35 @@ check_int (const char *test_name, int computed, int expected)
   fpstack_test (test_name);
 }
 
+static void
+check_int_exc (const char *test_name, int computed, int expected,
+              short exception)
+{
+  int diff = computed - expected;
+  int result = diff == 0;
+
+  output_new_test (test_name);
+  test_exceptions (test_name, exception);
+
+  if (result)
+    {
+      output_pass_value ();
+    }
+  else
+    {
+      output_fail_value (test_name);
+      if (verbose > 1)
+       {
+         printf ("Result:\n");
+         printf (" is:         %d\n", computed);
+         printf (" should be:  %d\n", expected);
+       }
+      noErrors++;
+    }
+
+  fpstack_test (test_name);
+}
+
 
 /*
   check that computed and expected values are equal (long int values)
@@ -953,7 +982,9 @@ atan2_test (void)
 static void
 atanh_test (void)
 {
+#ifndef TEST_INLINE
   MATHTYPE x;
+#endif
 
   check ("atanh(+0) == +0", FUNC(atanh) (0), 0);
 #ifndef TEST_INLINE
@@ -1089,7 +1120,7 @@ static void
 exp2_test (void)
 {
   errno = 0;
-  exp2(0);
+  FUNC(exp2) (0);
   if (errno == ENOSYS)
     /* Function not implemented.  */
     return;
@@ -1257,7 +1288,6 @@ signbit_test (void)
   check_bool ("signbit (-0) != 0", signbit (minus_zero));
   check_bool ("signbit (+inf) == 0", signbit (plus_infty) == 0);
   check_bool ("signbit (-inf) != 0", signbit (minus_infty));
-  check_bool ("signbit (NaN) == 0", signbit (nan_value));
 
   x = random_less (0);
   check_bool ("signbit (x) != 0 for x < 0", signbit (x));
@@ -1272,21 +1302,26 @@ signbit_test (void)
 static void
 gamma_test (void)
 {
-  MATHTYPE x;
+  errno = 0;
+  FUNC(gamma) (0);
+  if (errno == ENOSYS)
+    /* Function not implemented.  */
+    return;
+  feclearexcept (FE_ALL_EXCEPT);
 
   check_isinfp ("gamma (+inf) == +inf", FUNC(gamma) (plus_infty));
   check_isnan_exc ("gamma (0) == NaN plus invalid exception",
                     FUNC(gamma) (0), INVALID_EXCEPTION);
 
-  x = random_less (0.0);
-  check_isnan_exc_ext ("gamma (x) == NaN plus invalid exception for x <= 0",
-                        FUNC(gamma) (x), INVALID_EXCEPTION, x);
+  check_isnan_exc_ext ("gamma (x) == NaN plus invalid exception for integer x <= 0",
+                        FUNC(gamma) (-2), INVALID_EXCEPTION, -2);
   check_isnan_exc ("gamma (-inf) == NaN plus invalid exception",
                    FUNC(gamma) (minus_infty), INVALID_EXCEPTION);
 
-  check ("gamma (0.5) == sqrt(pi)", FUNC(gamma) (0.5), FUNC(sqrt) (M_PI));
-  check ("gamma (-0.5) == -2*sqrt(pi)", FUNC(gamma) (-0.5),
-         -2*FUNC(sqrt) (M_PI));
+  check_eps ("gamma (0.5) == sqrt(pi)", FUNC(gamma) (0.5), FUNC(sqrt) (M_PI),
+            CHOOSE (0, 5e-16, 2e-7));
+  check_eps ("gamma (-0.5) == -2*sqrt(pi)", FUNC(gamma) (-0.5),
+            -2*FUNC(sqrt) (M_PI), CHOOSE (0, 5e-16, 3e-7));
 
   check ("gamma (1) == 1", FUNC(gamma) (1), 1);
   check ("gamma (4) == 6", FUNC(gamma) (4), 6);
@@ -1297,15 +1332,19 @@ gamma_test (void)
 static void
 lgamma_test (void)
 {
-  MATHTYPE x;
+  errno = 0;
+  FUNC(lgamma) (0);
+  if (errno == ENOSYS)
+    /* Function not implemented.  */
+    return;
+  feclearexcept (FE_ALL_EXCEPT);
 
   check_isinfp ("lgamma (+inf) == +inf", FUNC(lgamma) (plus_infty));
-  check_isnan_exc ("lgamma (0) == +inf plus divide by zero exception",
-                   FUNC(lgamma) (0), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfp_exc ("lgamma (0) == +inf plus divide by zero exception",
+                   FUNC(lgamma) (0), DIVIDE_BY_ZERO_EXCEPTION);
 
-  x = random_less (0.0);
-  check_isnan_exc_ext ("lgamma (x) == +inf plus divide by zero exception for x <= 0",
-                       FUNC(lgamma) (x), DIVIDE_BY_ZERO_EXCEPTION, x);
+  check_isinfp_exc ("lgamma (x) == +inf plus divide by zero exception for integer x <= 0",
+                   FUNC(lgamma) (-3), DIVIDE_BY_ZERO_EXCEPTION);
   check_isnan_exc ("lgamma (-inf) == NaN plus invalid exception",
                    FUNC(lgamma) (minus_infty), INVALID_EXCEPTION);
 
@@ -1331,23 +1370,15 @@ static void
 ilogb_test (void)
 {
 
-  /* XXX Are these tests correct? I couldn't find any specification */
-#if 0
-  /* the source suggests that the following calls should fail -
-     but shall we test these special cases or just ignore them? */
-  check_isinfp ("ilogb (+inf) == +inf", FUNC(ilogb) (plus_infty));
-  check_isinfp ("ilogb (-inf) == +inf", FUNC(ilogb) (minus_infty));
-
-  check_isinfn_exc ("ilogb (+0) == -inf plus divide-by-zero exception",
-                   FUNC(ilogb) (0), DIVIDE_BY_ZERO_EXCEPTION);
+  check_int ("ilogb (1) == 0", FUNC(ilogb) (1), 0);
+  check_int ("ilogb (e) == 1", FUNC(ilogb) (M_E), 1);
+  check_int ("ilogb (1024) == 10", FUNC(ilogb) (1024), 10);
+  check_int ("ilogb (-2000) == 10", FUNC(ilogb) (-2000), 10);
 
-  check_isinfn_exc ("ilogb (-0) == -inf plus divide-by-zero exception",
-                   FUNC(ilogb) (minus_zero), DIVIDE_BY_ZERO_EXCEPTION);
-#endif
-  check ("ilogb (1) == 0", FUNC(ilogb) (1), 0);
-  check ("ilogb (e) == 1", FUNC(ilogb) (M_E), 1);
-  check ("ilogb (1024) == 10", FUNC(ilogb) (1024), 10);
-  check ("ilogb (-2000) == 10", FUNC(ilogb) (-2000), 10);
+  check_int_exc ("ilogb (0) == FP_ILOGB0", FUNC(ilogb) (0.0), FP_ILOGB0,
+                DIVIDE_BY_ZERO_EXCEPTION|INVALID_EXCEPTION);
+  check_int_exc ("ilogb (NaN) == FP_ILOGBNAN", FUNC(ilogb) (nan_value),
+                FP_ILOGBNAN, INVALID_EXCEPTION);
 
 }
 
@@ -1526,17 +1557,72 @@ scalb_test (void)
 {
   MATHTYPE x;
 
-  check ("scalb (0, 0) == 0", FUNC(scalb) (0, 0), 0);
+  check_isnan ("scalb (2, 0.5) == NaN", FUNC(scalb) (2, 0.5));
+  check_isnan ("scalb (3, -2.5) == NaN", FUNC(scalb) (3, -2.5));
+
+  check_isnan ("scalb (0, NaN) == NaN", FUNC(scalb) (0, nan_value));
+  check_isnan ("scalb (1, NaN) == NaN", FUNC(scalb) (1, nan_value));
+
+  x = random_greater (0.0);
+  check ("scalb (x, 0) == 0", FUNC(scalb) (x, 0), x);
+  x = random_greater (0.0);
+  check ("scalb (-x, 0) == 0", FUNC(scalb) (-x, 0), -x);
+
+  check_isnan_exc ("scalb (+0, +inf) == NaN plus invalid exception",
+                  FUNC(scalb) (0, plus_infty), INVALID_EXCEPTION);
+  check_isnan_exc ("scalb (-0, +inf) == NaN plus invalid exception",
+                  FUNC(scalb) (minus_zero, plus_infty), INVALID_EXCEPTION);
+
+  check ("scalb (+0, 2) == +0", FUNC(scalb) (0, 2), 0);
+  check ("scalb (-0, 4) == -0", FUNC(scalb) (minus_zero, -4), minus_zero);
+  check ("scalb (+0, 0) == +0", FUNC(scalb) (0, 0), 0);
+  check ("scalb (-0, 0) == -0", FUNC(scalb) (minus_zero, 0), minus_zero);
+  check ("scalb (+0, -1) == +0", FUNC(scalb) (0, -1), 0);
+  check ("scalb (-0, -10) == -0", FUNC(scalb) (minus_zero, -10), minus_zero);
+  check ("scalb (+0, -inf) == +0", FUNC(scalb) (0, minus_infty), 0);
+  check ("scalb (-0, -inf) == -0", FUNC(scalb) (minus_zero, minus_infty),
+        minus_zero);
+
+  check_isinfp ("scalb (+inf, -1) == +inf", FUNC(scalb) (plus_infty, -1));
+  check_isinfn ("scalb (-inf, -10) == -inf", FUNC(scalb) (minus_infty, -10));
+  check_isinfp ("scalb (+inf, 0) == +inf", FUNC(scalb) (plus_infty, 0));
+  check_isinfn ("scalb (-inf, 0) == -inf", FUNC(scalb) (minus_infty, 0));
+  check_isinfp ("scalb (+inf, 2) == +inf", FUNC(scalb) (plus_infty, 2));
+  check_isinfn ("scalb (-inf, 100) == -inf", FUNC(scalb) (minus_infty, 100));
+
+  check ("scalb (0, -inf) == 0", FUNC(scalb) (0.0, minus_infty), 0.0);
+  check ("scalb (-0, -inf) == -0", FUNC(scalb) (minus_zero, minus_infty),
+        minus_zero);
+  x = random_greater (0.0);
+  check ("scalb (x, -inf) == 0", FUNC(scalb) (x, minus_infty), 0.0);
+  check ("scalb (-x, -inf) == -0", FUNC(scalb) (-x, minus_infty), minus_zero);
+
+  x = random_greater (0.0);
+  check_isinfp ("scalb (x, +inf) == +inf", FUNC(scalb) (x, plus_infty));
+  x = random_greater (0.0);
+  check_isinfn ("scalb (-x, +inf) == -inf", FUNC(scalb) (-x, plus_infty));
+  check_isinfp ("scalb (+inf, +inf) == +inf",
+               FUNC(scalb) (plus_infty, plus_infty));
+  check_isinfn ("scalb (-inf, +inf) == -inf",
+               FUNC(scalb) (minus_infty, plus_infty));
+
+  check_isnan ("scalb (+inf, -inf) == NaN",
+              FUNC(scalb) (plus_infty, minus_infty));
+  check_isnan ("scalb (-inf, -inf) == NaN",
+              FUNC(scalb) (minus_infty, minus_infty));
 
-  check_isinfp ("scalb (+inf, 1) == +inf", FUNC(scalb) (plus_infty, 1));
-  check_isinfn ("scalb (-inf, 1) == -inf", FUNC(scalb) (minus_infty, 1));
   check_isnan ("scalb (NaN, 1) == NaN", FUNC(scalb) (nan_value, 1));
+  check_isnan ("scalb (1, NaN) == NaN", FUNC(scalb) (1, nan_value));
+  check_isnan ("scalb (NaN, 0) == NaN", FUNC(scalb) (nan_value, 0));
+  check_isnan ("scalb (0, NaN) == NaN", FUNC(scalb) (0, nan_value));
+  check_isnan ("scalb (NaN, +inf) == NaN",
+              FUNC(scalb) (nan_value, plus_infty));
+  check_isnan ("scalb (+inf, NaN) == NaN",
+              FUNC(scalb) (plus_infty, nan_value));
+  check_isnan ("scalb (NaN, NaN) == NaN", FUNC(scalb) (nan_value, nan_value));
 
   check ("scalb (0.8, 4) == 12.8", FUNC(scalb) (0.8L, 4), 12.8L);
   check ("scalb (-0.854375, 5) == -27.34", FUNC(scalb) (-0.854375L, 5), -27.34L);
-
-  x = random_greater (0.0);
-  check_ext ("scalb (x, 0) == x", FUNC(scalb) (x, 0L), x, x);
 }
 
 
@@ -1630,14 +1716,15 @@ sincos_test (void)
   check ("sincos (pi/2, &sin, &cos) puts 1 in sin", sin_res, 1);
   fesetenv (&fenv);
   check_eps ("sincos (pi/2, &sin, &cos) puts 0 in cos", cos_res, 0,
-             CHOOSE(0, 1e-16, 1e-7));
+            CHOOSE (1e-18L, 1e-16, 1e-7));
 
   FUNC(sincos) (M_PI / 6.0, &sin_res, &cos_res);
-  check ("sincos (pi/6, &sin, &cos) puts 0.5 in sin", sin_res, 0.5);
+  check_eps ("sincos (pi/6, &sin, &cos) puts 0.5 in sin", sin_res, 0.5,
+            CHOOSE (5e-18L, 0, 0));
 
   FUNC(sincos) (M_PI / 3.0, &sin_res, &cos_res);
   check_eps ("sincos (pi/3, &sin, &cos) puts 0.5 in cos", cos_res, 0.5,
-             CHOOSE(0, 1e-15, 1e-7));
+            CHOOSE (5e-18L, 1e-15, 1e-7));
 
 
 }
@@ -2045,13 +2132,13 @@ fmod_test (void)
              FUNC(fmod) (x, minus_infty), x, x);
 
   check_eps ("fmod (6.5, 2.3) == 1.9", FUNC(fmod) (6.5, 2.3), 1.9,
-             CHOOSE(0, 1e-15, 0));
+             CHOOSE(5e-16, 1e-15, 2e-7));
   check_eps ("fmod (-6.5, 2.3) == -1.9", FUNC(fmod) (-6.5, 2.3), -1.9,
-             CHOOSE(0, 1e-15, 0));
+             CHOOSE(5e-16, 1e-15, 2e-7));
   check_eps ("fmod (6.5, -2.3) == 1.9", FUNC(fmod) (6.5, -2.3), 1.9,
-             CHOOSE(0, 1e-15, 0));
+             CHOOSE(5e-16, 1e-15, 2e-7));
   check_eps ("fmod (-6.5, -2.3) == -1.9", FUNC(fmod) (-6.5, -2.3), -1.9,
-             CHOOSE(0, 1e-15, 0));
+             CHOOSE(5e-16, 1e-15, 2e-7));
 
 
 }
@@ -4355,44 +4442,44 @@ rint_test (void)
 
 
 static void
-rinttol_test (void)
+lrint_test (void)
 {
   /* XXX this test is incomplete.  We need to have a way to specifiy
      the rounding method and test the critical cases.  So far, only
      unproblematic numbers are tested.  */
 
-  check_long ("rinttol(0) = 0", rinttol (0.0), 0);
-  check_long ("rinttol(-0) = 0", rinttol (minus_zero), 0);
-  check_long ("rinttol(0.2) = 0", rinttol (0.2), 0);
-  check_long ("rinttol(-0.2) = 0", rinttol (-0.2), 0);
+  check_long ("lrint(0) = 0", lrint (0.0), 0);
+  check_long ("lrint(-0) = 0", lrint (minus_zero), 0);
+  check_long ("lrint(0.2) = 0", lrint (0.2), 0);
+  check_long ("lrint(-0.2) = 0", lrint (-0.2), 0);
 
-  check_long ("rinttol(1.4) = 1", rinttol (1.4), 1);
-  check_long ("rinttol(-1.4) = -1", rinttol (-1.4), -1);
+  check_long ("lrint(1.4) = 1", lrint (1.4), 1);
+  check_long ("lrint(-1.4) = -1", lrint (-1.4), -1);
 
-  check_long ("rinttol(8388600.3) = 8388600", rinttol (8388600.3), 8388600);
-  check_long ("rinttol(-8388600.3) = -8388600", rinttol (-8388600.3),
+  check_long ("lrint(8388600.3) = 8388600", lrint (8388600.3), 8388600);
+  check_long ("lrint(-8388600.3) = -8388600", lrint (-8388600.3),
              -8388600);
 }
 
 
 static void
-rinttoll_test (void)
+llrint_test (void)
 {
   /* XXX this test is incomplete.  We need to have a way to specifiy
      the rounding method and test the critical cases.  So far, only
      unproblematic numbers are tested.  */
 
-  check_longlong ("rinttoll(0) = 0", rinttoll (0.0), 0);
-  check_longlong ("rinttoll(-0) = 0", rinttoll (minus_zero), 0);
-  check_longlong ("rinttoll(0.2) = 0", rinttoll (0.2), 0);
-  check_longlong ("rinttoll(-0.2) = 0", rinttoll (-0.2), 0);
+  check_longlong ("llrint(0) = 0", llrint (0.0), 0);
+  check_longlong ("llrint(-0) = 0", llrint (minus_zero), 0);
+  check_longlong ("llrint(0.2) = 0", llrint (0.2), 0);
+  check_longlong ("llrint(-0.2) = 0", llrint (-0.2), 0);
 
-  check_longlong ("rinttoll(1.4) = 1", rinttoll (1.4), 1);
-  check_longlong ("rinttoll(-1.4) = -1", rinttoll (-1.4), -1);
+  check_longlong ("llrint(1.4) = 1", llrint (1.4), 1);
+  check_longlong ("llrint(-1.4) = -1", llrint (-1.4), -1);
 
-  check_longlong ("rinttoll(8388600.3) = 8388600", rinttoll (8388600.3),
+  check_longlong ("llrint(8388600.3) = 8388600", llrint (8388600.3),
                  8388600);
-  check_longlong ("rinttoll(-8388600.3) = -8388600", rinttoll (-8388600.3),
+  check_longlong ("llrint(-8388600.3) = -8388600", llrint (-8388600.3),
                  -8388600);
 }
 
@@ -4416,45 +4503,45 @@ round_test (void)
 
 
 static void
-roundtol_test (void)
+lround_test (void)
 {
-  check_long ("roundtol(0) = 0", roundtol (0), 0);
-  check_long ("roundtol(-0) = 0", roundtol (minus_zero), 0);
-  check_long ("roundtol(0.2) = 0", roundtol (0.2), 0.0);
-  check_long ("roundtol(-0.2) = 0", roundtol (-0.2), 0);
-  check_long ("roundtol(0.5) = 1", roundtol (0.5), 1);
-  check_long ("roundtol(-0.5) = -1", roundtol (-0.5), -1);
-  check_long ("roundtol(0.8) = 1", roundtol (0.8), 1);
-  check_long ("roundtol(-0.8) = -1", roundtol (-0.8), -1);
-  check_long ("roundtol(1.5) = 2", roundtol (1.5), 2);
-  check_long ("roundtol(-1.5) = -2", roundtol (-1.5), -2);
-  check_long ("roundtol(2097152.5) = 2097153", roundtol (2097152.5), 2097153);
-  check_long ("roundtol(-2097152.5) = -2097153", roundtol (-2097152.5),
+  check_long ("lround(0) = 0", lround (0), 0);
+  check_long ("lround(-0) = 0", lround (minus_zero), 0);
+  check_long ("lround(0.2) = 0", lround (0.2), 0.0);
+  check_long ("lround(-0.2) = 0", lround (-0.2), 0);
+  check_long ("lround(0.5) = 1", lround (0.5), 1);
+  check_long ("lround(-0.5) = -1", lround (-0.5), -1);
+  check_long ("lround(0.8) = 1", lround (0.8), 1);
+  check_long ("lround(-0.8) = -1", lround (-0.8), -1);
+  check_long ("lround(1.5) = 2", lround (1.5), 2);
+  check_long ("lround(-1.5) = -2", lround (-1.5), -2);
+  check_long ("lround(2097152.5) = 2097153", lround (2097152.5), 2097153);
+  check_long ("lround(-2097152.5) = -2097153", lround (-2097152.5),
              -2097153);
 }
 
 
 static void
-roundtoll_test (void)
+llround_test (void)
 {
-  check_longlong ("roundtoll(0) = 0", roundtoll (0), 0);
-  check_longlong ("roundtoll(-0) = 0", roundtoll (minus_zero), 0);
-  check_longlong ("roundtoll(0.2) = 0", roundtoll (0.2), 0.0);
-  check_longlong ("roundtoll(-0.2) = 0", roundtoll (-0.2), 0);
-  check_longlong ("roundtoll(0.5) = 1", roundtoll (0.5), 1);
-  check_longlong ("roundtoll(-0.5) = -1", roundtoll (-0.5), -1);
-  check_longlong ("roundtoll(0.8) = 1", roundtoll (0.8), 1);
-  check_longlong ("roundtoll(-0.8) = -1", roundtoll (-0.8), -1);
-  check_longlong ("roundtoll(1.5) = 2", roundtoll (1.5), 2);
-  check_longlong ("roundtoll(-1.5) = -2", roundtoll (-1.5), -2);
-  check_longlong ("roundtoll(2097152.5) = 2097153",
-                 roundtoll (2097152.5), 2097153);
-  check_longlong ("roundtoll(-2097152.5) = -2097153",
-                 roundtoll (-2097152.5), -2097153);
-  check_longlong ("roundtoll(34359738368.5) = 34359738369",
-                 roundtoll (34359738368.5), 34359738369ll);
-  check_longlong ("roundtoll(-34359738368.5) = -34359738369",
-                 roundtoll (-34359738368.5), -34359738369ll);
+  check_longlong ("llround(0) = 0", llround (0), 0);
+  check_longlong ("llround(-0) = 0", llround (minus_zero), 0);
+  check_longlong ("llround(0.2) = 0", llround (0.2), 0.0);
+  check_longlong ("llround(-0.2) = 0", llround (-0.2), 0);
+  check_longlong ("llround(0.5) = 1", llround (0.5), 1);
+  check_longlong ("llround(-0.5) = -1", llround (-0.5), -1);
+  check_longlong ("llround(0.8) = 1", llround (0.8), 1);
+  check_longlong ("llround(-0.8) = -1", llround (-0.8), -1);
+  check_longlong ("llround(1.5) = 2", llround (1.5), 2);
+  check_longlong ("llround(-1.5) = -2", llround (-1.5), -2);
+  check_longlong ("llround(2097152.5) = 2097153",
+                 llround (2097152.5), 2097153);
+  check_longlong ("llround(-2097152.5) = -2097153",
+                 llround (-2097152.5), -2097153);
+  check_longlong ("llround(34359738368.5) = 34359738369",
+                 llround (34359738368.5), 34359738369ll);
+  check_longlong ("llround(-34359738368.5) = -34359738369",
+                 llround (-34359738368.5), -34359738369ll);
 }
 
 
@@ -4811,11 +4898,11 @@ main (int argc, char *argv[])
   floor_test ();
   nearbyint_test ();
   rint_test ();
-  rinttol_test ();
-  rinttoll_test ();
+  lrint_test ();
+  llrint_test ();
   round_test ();
-  roundtol_test ();
-  roundtoll_test ();
+  lround_test ();
+  llround_test ();
   trunc_test ();
 
   /* remainder functions */
index 5229a020e01f8b58674598071dc76763e2c4cd7f..aa37f71f3ca8f37827e0c0c54febe0c3a0204b0e 100644 (file)
@@ -186,13 +186,13 @@ enum
 
 /* Round X to nearest integral value according to current rounding
    direction.  */
-extern long int rinttol __P ((long double __x));
-extern long long int rinttoll __P ((long double __x));
+extern long int lrint __P ((long double __x));
+extern long long int llrint __P ((long double __x));
 
 /* Round X to nearest integral value, rounding halfway cases away from
    zero.  */
-extern long int roundtol __P ((long double __x));
-extern long long int roundtoll __P ((long double __x));
+extern long int lround __P ((long double __x));
+extern long long int llround __P ((long double __x));
 
 
 /* Comparison macros.  */
index 0aac420bd0471c01234c370e92a737c265bd3a71..735b5953a77c6dec6f9d08650a9368e414335691 100644 (file)
@@ -138,9 +138,7 @@ __MATHCALL (sqrt,, (_Mdouble_ __x));
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC9X
 /* Return `sqrt(X*X + Y*Y)'.  */
 __MATHCALL (hypot,, (_Mdouble_ __x, _Mdouble_ __y));
-#endif
 
-#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
 /* Return the cube root of X.  */
 __MATHCALL (cbrt,, (_Mdouble_ __x));
 #endif
@@ -177,9 +175,6 @@ __MATHDECLX (int,finite,, (_Mdouble_ __value), (__const__));
    and may return an infinity or NaN, or may do something else.  */
 __MATHCALLX (infnan,, (int __error), (__const__));
 
-/* Return X times (2 to the Nth power).  */
-__MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
-
 /* Return the remainder of X/Y.  */
 __MATHCALL (drem,, (_Mdouble_ __x, _Mdouble_ __y));
 
@@ -203,9 +198,6 @@ __MATHCALLX (nan,, (__const char *__tagb), (__const__));
 /* Return nonzero if VALUE is not a number.  */
 __MATHDECLX (int,isnan,, (_Mdouble_ __value), (__const__));
 
-/* Return the binary exponent of X, which must be nonzero.  */
-__MATHDECL (int,ilogb,, (_Mdouble_ __x));
-
 /* Bessel functions.  */
 __MATHCALL (j0,, (_Mdouble_));
 __MATHCALL (j1,, (_Mdouble_));
@@ -222,6 +214,7 @@ __MATHCALL (erf,, (_Mdouble_));
 __MATHCALL (erfc,, (_Mdouble_));
 __MATHCALL (gamma,, (_Mdouble_));
 __MATHCALL (lgamma,, (_Mdouble_));
+#endif
 
 #ifdef __USE_MISC
 /* Reentrant versions of gamma and lgamma.  Those functions use the global
@@ -231,8 +224,6 @@ __MATHCALL (gamma,_r, (_Mdouble_, int *));
 __MATHCALL (lgamma,_r, (_Mdouble_, int *));
 #endif
 
-#endif /* Use misc or X/Open.  */
-
 
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC9X
 /* Return the integer nearest X in the direction of the
@@ -244,11 +235,15 @@ __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
 
 /* Return the remainder of integer divison X / Y with infinite precision.  */
 __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
-#endif
 
-#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
 /* Return X times (2 to the Nth power).  */
 __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
+
+/* Return X times (2 to the Nth power).  */
+__MATHCALL (scalbn,, (_Mdouble_ __x, long int __n));
+
+/* Return the binary exponent of X, which must be nonzero.  */
+__MATHDECL (int,ilogb,, (_Mdouble_ __x));
 #endif
 
 #ifdef __USE_ISOC9X
index aae6e8c2161ecc7664cacf10eb88afba9c7ce82f..6e88eb6053e3b004e59b0965466fd859ac2aaa56 100644 (file)
@@ -45,6 +45,8 @@ ifeq ($(crypt-in-libc),yes)
 routines += $(libcrypt-routines)
 endif
 
+$(objpfx)md5test: $(objpfx)md5.o
+
 include ../Rules
 
 ifeq ($(build-shared),yes)
index 770f3b82831cfccbae45e067f7a3b228dfaa532f..23a71446bb69040eafd53e67a138994133a996e7 100644 (file)
@@ -22,7 +22,7 @@
 subdir := nis
 
 headers                        := $(wildcard rpcsvc/*.[hx])
-distribute             := nss-nis.h nss-nisplus.h
+distribute             := nss-nis.h nss-nisplus.h nis_intern.h Banner
 
 # These are the databases available for the nis (and perhaps later nisplus)
 # service.  This must be a superset of the services in nss.
index 71868174db8dcc9dcf3eca666bd87a41b1cb5090..35ea4dc80866846d700a223503d7cfafde178977 100644 (file)
@@ -6,21 +6,17 @@ char *files[500];
 int
 main (int argc, char *argv[])
 {
-  char buf[FILENAME_MAX];
-  char *fn;
   FILE *fp;
   int i;
 
   for (i = 0; i < 500; i++) {
-    fn = __stdio_gen_tempname(buf, sizeof (buf), (const char *) NULL,
-       "file", 0, (size_t *) NULL, (FILE **) NULL);
-    if (fn == NULL) {
-      printf ("__stdio_gen_tempname failed\n");
+    files[i] = tempnam (NULL, "file");
+    if (files[i] == NULL) {
+      printf ("tempnam failed\n");
       exit (1);
     }
-    files[i] = strdup (fn);
-    printf ("file: %s\n", fn);
-    fp = fopen (fn, "w");
+    printf ("file: %s\n", files[i]);
+    fp = fopen (files[i], "w");
     fclose (fp);
   }
 
index eb2f30d0f9ebf74c70f2431c65d2af9261b73b57..d0ff6c8b4101689fbe3a151c8a1109e76171cd94 100644 (file)
@@ -166,6 +166,12 @@ main (int argc, char **argv)
 
     if (res != 1 || a != 0)
       exit (EXIT_FAILURE);
+
+    res = sscanf ("1e3", "%lg%n", &a, &n);
+    printf ("res = %d, a = %g, n = %d\n", res, a, n);
+
+    if (res != 1 || a != 1000 || n != 3)
+      exit (EXIT_FAILURE);
   }
 
   exit(EXIT_SUCCESS);
index 3738e44f0a69eeccecbeb67e6a3d7344e2370f36..0b24b8bb52f4c1b7c145b8bb576b8752ba5f77d9 100644 (file)
 
 # undef va_list
 # define va_list       _IO_va_list
-# define ungetc(c, s)  (--read_in, _IO_ungetc (c, s))
-# define inchar()      ((c = _IO_getc_unlocked (s)), (void) ++read_in, c)
+# define ungetc(c, s)  ((void) ((int) c != EOF && --read_in),                \
+                        _IO_ungetc (c, s))
+# define inchar()      ((c = _IO_getc_unlocked (s)), \
+                        (void) (c != EOF && ++read_in), c)
 # define encode_error()        do {                                                  \
                          if (errp != NULL) *errp |= 4;                       \
                          _IO_funlockfile (s);                                \
   _IO_flockfile (S)
 # define UNLOCK_STREAM __libc_cleanup_region_end (1)
 #else
-# define ungetc(c, s)  (--read_in, ungetc (c, s))
-# define inchar()      ((c = getc (s)), (void) ++read_in, c)
+# define ungetc(c, s)  ((void) (c != EOF && --read_in), ungetc (c, s))
+# define inchar()      ((c = getc (s)), (void) (c != EOF && ++read_in), c)
 # define encode_error()        do {                                                  \
                          funlockfile (s);                                    \
                          __set_errno (EILSEQ);                               \
@@ -719,9 +721,6 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
              STRING_ADD_CHAR (str, c, char);
            } while ((width <= 0 || --width > 0) && inchar () != EOF);
 
-         if (c == EOF)
-           --read_in;
-
          if (!(flags & SUPPRESS))
            {
              *str = '\0';
index b924dfc87d604ec7c3fee5f46054ac58f6e0e1e1..d2629e60dcc2a9eda0aa050a61b2dbcf866aa20e 100644 (file)
@@ -36,13 +36,13 @@ routines    := strcat strchr strcmp strcoll strcpy strcspn          \
                   swab strfry memfrob memmem                           \
                   $(addprefix argz-,append count create ctsep next     \
                                     delete extract insert stringify    \
-                                    addsep)                            \
+                                    addsep replace)                    \
                   envz basename                                        \
                   strcoll_l strxfrm_l
 
 tests          := tester testcopy test-ffs tst-strlen stratcliff \
                   tst-svc
-distribute     := memcopy.h pagecopy.h
+distribute     := memcopy.h pagecopy.h tst-svc.expect
 
 
 include ../Rules
diff --git a/string/argz-replace.c b/string/argz-replace.c
new file mode 100644 (file)
index 0000000..4d658f4
--- /dev/null
@@ -0,0 +1,135 @@
+/* String replacement in an argz vector
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>
+
+   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 <stdlib.h>
+#include <argz.h>
+
+/* Append BUF, of length BUF_LEN to *TO, of length *TO_LEN, reallocating and
+   updating *TO & *TO_LEN appropriately.  If an allocation error occurs,
+   *TO's old value is freed, and *TO is set to 0.  */
+static void
+str_append (char **to, size_t *to_len, const char *buf, const size_t buf_len)
+{
+  size_t new_len = *to_len + buf_len;
+  char *new_to = realloc (*to, new_len + 1);
+
+  if (new_to)
+    {
+      memcpy (new_to + *to_len, buf, buf_len);
+      new_to[new_len] = '\0';
+      *to = new_to;
+      *to_len = new_len;
+    }
+  else
+    {
+      free (*to);
+      *to = 0;
+    }
+}
+
+/* Replace any occurances of the string STR in ARGZ with WITH, reallocating
+   ARGZ as necessary.  If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be
+   incremented by number of replacements performed.  */
+error_t
+__argz_replace (char **argz, size_t *argz_len, const char *str, const char *with,
+               unsigned *replace_count)
+{
+  error_t err = 0;
+
+  if (str && *str)
+    {
+      char *arg = 0;
+      char *src = *argz;
+      size_t src_len = *argz_len;
+      char *dst = 0;
+      size_t dst_len = 0;
+      int delayed_copy = 1;    /* True while we've avoided copying anything.  */
+      size_t str_len = strlen (str), with_len = strlen (with);
+
+      while (!err && (arg = argz_next (src, src_len, arg)))
+       {
+         char *match = strstr (arg, str);
+         if (match)
+           {
+             char *from = match + str_len;
+             size_t to_len = match - arg;
+             char *to = strndup (arg, to_len);
+
+             while (to && from)
+               {
+                 str_append (&to, &to_len, with, with_len);
+                 if (to)
+                   {
+                     match = strstr (from, str);
+                     if (match)
+                       {
+                         str_append (&to, &to_len, from, match - from);
+                         from = match + str_len;
+                       }
+                     else
+                       {
+                         str_append (&to, &to_len, from, strlen (from));
+                         from = 0;
+                       }
+                   }
+               }
+
+             if (to)
+               {
+                 if (delayed_copy)
+                   /* We avoided copying SRC to DST until we found a match;
+                       now that we've done so, copy everything from the start
+                       of SRC.  */
+                   {
+                     if (arg > src)
+                       err = argz_append (&dst, &dst_len, src, (arg - src));
+                     delayed_copy = 0;
+                   }
+                 if (! err)
+                   err = argz_add (&dst, &dst_len, to);
+                 free (to);
+               }
+             else
+               err = ENOMEM;
+
+             if (replace_count)
+               (*replace_count)++;
+           }
+         else if (! delayed_copy)
+           err = argz_add (&dst, &dst_len, arg);
+       }
+
+      if (! err)
+       {
+         if (! delayed_copy)
+           /* We never found any instances of str.  */
+           {
+             if (src)
+               free (src);
+             *argz = dst;
+             *argz_len = dst_len;
+           }
+       }
+      else if (dst_len > 0)
+       free (dst);
+    }
+
+  return err;
+}
+weak_alias (__argz_replace, argz_replace)
index e17b742cf73fac765526fb7a7cb98d0b488c131e..0126235b8f2d39754f9c7ef8f24510355ad13db7 100644 (file)
@@ -103,6 +103,16 @@ extern error_t __argz_insert __P ((char **__argz, size_t *__argz_len,
                                   char *__before, __const char *__entry));
 extern error_t argz_insert __P ((char **__argz, size_t *__argz_len,
                                 char *__before, __const char *__entry));
+
+/* Replace any occurances of the string STR in ARGZ with WITH, reallocating
+   ARGZ as necessary.  If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be
+   incremented by number of replacements performed.  */
+extern error_t __argz_replace (char **__argz, size_t *__argz_len,
+                              __const char *__str, __const char *__with,
+                              unsigned *__replace_count);
+extern error_t argz_replace (char **__argz, size_t *__argz_len,
+                            __const char *__str, __const char *__with,
+                            unsigned *__replace_count);
 \f
 /* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there
    are no more.  If entry is NULL, then the first entry is returned.  This
index ee66e532f1cb61bec9b0f9fcc522d1e794bf60c0..ad21cb251e7fb20b47dc4ebd6026689a430eeebf 100644 (file)
@@ -127,7 +127,8 @@ $(inst_sysconfdir)/rpc: etc.rpc
 # Generate the rpcsvc headers with rpcgen.
 # We use a stamp file to avoid unnessary recompilation each time rpcgen is
 # relinked.
-$(rpcsvc:%.x=$(objpfx)rpcsvc/%.h): $(objpfx)rpcsvc/%.h: $(objpfx)rpcsvc/%.stmp;
+$(rpcsvc:%.x=$(objpfx)rpcsvc/%.h): $(objpfx)rpcsvc/%.h: $(objpfx)rpcsvc/%.stmp
+       @:
 $(objpfx)rpcsvc/%.stmp: rpcsvc/%.x $(objpfx)rpcgen
        $(make-target-directory)
        -@rm -f ${@:stmp=T} $@
@@ -138,7 +139,8 @@ $(objpfx)rpcsvc/%.stmp: rpcsvc/%.x $(objpfx)rpcgen
        touch $@
 
 # Generate the rpcsvc XDR functions with rpcgen.
-$(rpcsvc:%.x=$(objpfx)x%.c): $(objpfx)x%.c: $(objpfx)x%.stmp;
+$(rpcsvc:%.x=$(objpfx)x%.c): $(objpfx)x%.c: $(objpfx)x%.stmp
+       @:
 $(objpfx)x%.stmp: rpcsvc/%.x $(objpfx)rpcgen
        -@rm -f ${@:stmp=T} $@
        $(rpcgen-cmd) -c $< -o ${@:stmp=T}
index e4db3dcf198d08d2b8d939e6b902afeefdd347a3..b14b52d901a41784613b7d1c09c145a5785fb744 100644 (file)
@@ -32,4 +32,9 @@ typedef double double_t;      /* `double' expressions are evaluated as
 /* Define `INFINITY' as value of type `float_t'.  */
 #define INFINITY       HUGE_VAL
 
+
+/* The values returned by `ilogb' for 0 and NaN respectively.  */
+#define FP_ILOGB0      0x80000001
+#define FP_ILOGBNAN    0x7fffffff
+
 #endif /* mathbits.h */
index 7885afeec0187d46ac22da21ad047bbb4829c659..f4a22c075762789350700eca6fe6d9772f2d89b0 100644 (file)
@@ -33,4 +33,9 @@ typedef long double double_t; /* `double' expressions are evaluated as
 /* Define `INFINITY' as value of type `float_t'.  */
 #define INFINITY       HUGE_VALL
 
+
+/* The values returned by `ilogb' for 0 and NaN respectively.  */
+#define FP_ILOGB0      0x80000000
+#define FP_ILOGBNAN    0x80000000
+
 #endif /* mathbits.h */
index 427a3b905e7567e9e97246dceca46011b8ed6df7..790f1c1d568baf3fab32b51257aaa7422494c1fd 100644 (file)
@@ -1,16 +1,94 @@
 /*
  * Written by J.T. Conklin <jtc@netbsd.org>.
  * Public domain.
+ *
+ * Correct handling of y==-inf <drepper@gnu>
  */
 
 #include <machine/asm.h>
 
 RCSID("$NetBSD: e_scalb.S,v 1.4 1995/05/08 23:49:52 jtc Exp $")
 
+#ifdef __ELF__
+       .section .rodata
+#else
+       .text
+#endif
+
+       .align ALIGNARG(4)
+       ASM_TYPE_DIRECTIVE(zero_nan,@object)
+zero_nan:
+       .double 0.0
+nan:   .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
+minus_zero:
+       .byte 0, 0, 0, 0, 0, 0, 0, 0x80
+       .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
+       ASM_SIZE_DIRECTIVE(zero_nan)
+
+
+#ifdef PIC
+#define MO(op) op##@GOTOFF(%ecx)
+#define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
+#else
+#define MO(op) op
+#define MOX(op,x,f) op(,x,f)
+#endif
+
+
 ENTRY(__ieee754_scalb)
        fldl    12(%esp)
+       fxam
+       fnstsw
        fldl    4(%esp)
+       andl    $0x4700, %eax
+       cmpl    $0x0700, %eax
+       je      1f
+       andl    $0x4500, %eax
+       cmpl    $0x0100, %eax
+       je      2f
+       fxam
+       fnstsw
+       andl    $0x4500, %eax
+       cmpl    $0x0100, %eax
+       je      2f
+       fld     %st(1)
+       frndint
+       fcomp   %st(2)
+       fnstsw
+       sahf
+       jne     2f
        fscale
        fstp    %st(1)
        ret
+
+       /* y is -inf */
+1:     fxam
+#ifdef  PIC
+        call    1f
+1:      popl    %ecx
+        addl    $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
+#endif
+       fnstsw
+       movl    8(%esp), %edx
+       shrl    $5, %eax
+       fstp    %st(1)
+       andl    $0x80000000, %edx
+       andl    $8, %eax
+       fstp    %st(1)
+       shrl    $27, %edx
+       addl    %edx, %eax
+       fldl    MOX(zero_nan, %eax, 1)
+       ret
+
+       /* The result is NaN, but we must not raise an exception.
+          So use a variable.  */
+2:     fstp    %st
+       fstp    %st
+#ifdef  PIC
+        call    1f
+1:      popl    %ecx
+        addl    $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
+#endif
+       fldl    MO(nan)
+       ret
 END(__ieee754_scalb)
index 4c62134a0c38dbb96cfd9ef23e8fa5165890dd7e..c869da9b3824b144f4547cd3767881817976cc63 100644 (file)
@@ -2,16 +2,95 @@
  * Written by J.T. Conklin <jtc@netbsd.org>.
  * Public domain.
  * Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
+ *
+ * Correct handling of y==-inf <drepper@gnu>
  */
 
 #include <machine/asm.h>
 
 RCSID("$NetBSD: $")
 
+#ifdef __ELF__
+       .section .rodata
+#else
+       .text
+#endif
+
+       .align ALIGNARG(4)
+       ASM_TYPE_DIRECTIVE(zero_nan,@object)
+zero_nan:
+       .double 0.0
+nan:   .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
+minus_zero:
+       .byte 0, 0, 0, 0, 0, 0, 0, 0x80
+       .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
+       ASM_SIZE_DIRECTIVE(zero_nan)
+
+
+#ifdef PIC
+#define MO(op) op##@GOTOFF(%ecx)
+#define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
+#else
+#define MO(op) op
+#define MOX(op,x,f) op(,x,f)
+#endif
+
+
+       .text
 ENTRY(__ieee754_scalbf)
        flds    8(%esp)
+       fxam
+       fnstsw
        flds    4(%esp)
+       andl    $0x4700, %eax
+       cmpl    $0x0700, %eax
+       je      1f
+       andl    $0x4500, %eax
+       cmpl    $0x0100, %eax
+       je      2f
+       fxam
+       fnstsw
+       andl    $0x4500, %eax
+       cmpl    $0x0100, %eax
+       je      2f
+       fld     %st(1)
+       frndint
+       fcomp   %st(2)
+       fnstsw
+       sahf
+       jne     2f
        fscale
        fstp    %st(1)
        ret
+
+       /* y is -inf */
+1:     fxam
+#ifdef  PIC
+        call    1f
+1:      popl    %ecx
+        addl    $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
+#endif
+       fnstsw
+       movl    4(%esp), %edx
+       shrl    $5, %eax
+       fstp    %st(1)
+       andl    $0x80000000, %edx
+       andl    $8, %eax
+       fstp    %st(1)
+       shrl    $27, %edx
+       addl    %edx, %eax
+       fldl    MOX(zero_nan, %eax, 1)
+       ret
+
+       /* The result is NaN, but we must not raise an exception.
+          So use a variable.  */
+2:     fstp    %st
+       fstp    %st
+#ifdef  PIC
+        call    1f
+1:      popl    %ecx
+        addl    $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
+#endif
+       fldl    MO(nan)
+       ret
 END(__ieee754_scalbf)
index 3b746ad363bb532db35accfae2cfb09c35705bca..e272614acff49128bba55aaff84c2b562e63e746 100644 (file)
@@ -3,16 +3,94 @@
  * Public domain.
  *
  * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
+ *
+ * Correct handling of y==-inf <drepper@gnu>
  */
 
 #include <machine/asm.h>
 
 RCSID("$NetBSD: $")
 
+#ifdef __ELF__
+       .section .rodata
+#else
+       .text
+#endif
+
+       .align ALIGNARG(4)
+       ASM_TYPE_DIRECTIVE(zero_nan,@object)
+zero_nan:
+       .double 0.0
+nan:   .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
+minus_zero:
+       .byte 0, 0, 0, 0, 0, 0, 0, 0x80
+       .byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
+       ASM_SIZE_DIRECTIVE(zero_nan)
+
+
+#ifdef PIC
+#define MO(op) op##@GOTOFF(%ecx)
+#define MOX(op,x,f) op##@GOTOFF(%ecx,x,f)
+#else
+#define MO(op) op
+#define MOX(op,x,f) op(,x,f)
+#endif
+
+
 ENTRY(__ieee754_scalbl)
        fldt    16(%esp)
+       fxam
+       fnstsw
        fldt    4(%esp)
+       andl    $0x4700, %eax
+       cmpl    $0x0700, %eax
+       je      1f
+       andl    $0x4500, %eax
+       cmpl    $0x0100, %eax
+       je      2f
+       fxam
+       fnstsw
+       andl    $0x4500, %eax
+       cmpl    $0x0100, %eax
+       je      2f
+       fld     %st(1)
+       frndint
+       fcomp   %st(2)
+       fnstsw
+       sahf
+       jne     2f
        fscale
        fstp    %st(1)
        ret
+
+       /* y is -inf */
+1:     fxam
+#ifdef  PIC
+        call    1f
+1:      popl    %ecx
+        addl    $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
+#endif
+       fnstsw
+       movl    12(%esp), %edx
+       shrl    $5, %eax
+       fstp    %st(1)
+       andl    $0x8000, %edx
+       andl    $8, %eax
+       fstp    %st(1)
+       shrl    $11, %edx
+       addl    %edx, %eax
+       fldl    MOX(zero_nan, %eax, 1)
+       ret
+
+       /* The result is NaN, but we must not raise an exception.
+          So use a variable.  */
+2:     fstp    %st
+       fstp    %st
+#ifdef  PIC
+        call    1f
+1:      popl    %ecx
+        addl    $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx
+#endif
+       fldl    MO(nan)
+       ret
 END(__ieee754_scalbl)
index 45153fe2d3fab65f7af3e8206738fe6240ff0e35..a4c52cb67cd751e553b1fb98e7d901afca0ad605 100644 (file)
@@ -49,14 +49,14 @@ ENTRY(__asinh)
        movl    $0x7fffffff, %eax
        andl    %ecx, %eax
        andl    $0x80000000, %ecx
+       movl    %eax, %edx
+       orl     $0x800fffff, %edx
+       incl    %edx
+       jz      7f                      // x in Â±Inf or NaN
        xorl    %ecx, 8(%esp)
        fldl    4(%esp)                 // |x|
-       movl    %eax, %edx
        cmpl    $0x3e300000, %eax
        jb      2f                      // |x| < 2^-28
-       orl     $0x800fffff, %edx
-       incl    %edx
-       jz      4f                      // x in Â±Inf or NaN
        fldln2                          // log(2) : |x|
        cmpl    $0x41b00000, %eax
        fxch                            // |x| : log(2)
@@ -87,6 +87,9 @@ ENTRY(__asinh)
        fchs
 4:     ret
 
+7:     fldl    4(%esp)
+       ret
+
 6:     faddl   MO(one)
        fyl2x
        jecxz   4f
index 7e5176c4a6e75f6fe984409f3ed89305c5fc59a2..6369e19ac62dd6eeb3054e4775ae555b071d0293 100644 (file)
@@ -49,14 +49,14 @@ ENTRY(__asinhf)
        movl    $0x7fffffff, %eax
        andl    %ecx, %eax
        andl    $0x80000000, %ecx
+       movl    %eax, %edx
+       orl     $0x807fffff, %edx
+       incl    %edx
+       jz      7f                      // x in Â±Inf or NaN
        xorl    %ecx, 8(%esp)
        flds    4(%esp)                 // |x|
-       movl    %eax, %edx
        cmpl    $0x38000000, %eax
        jb      2f                      // |x| < 2^-14
-       orl     $0x807fffff, %edx
-       incl    %edx
-       jz      4f                      // x in Â±Inf or NaN
        fldln2                          // log(2) : |x|
        cmpl    $0x47000000, %eax
        fxch                            // |x| : log(2)
@@ -87,6 +87,9 @@ ENTRY(__asinhf)
        fchs
 4:     ret
 
+7:     flds    4(%esp)
+       ret
+
 6:     faddl   MO(one)
        fyl2x
        jecxz   4f
index f764381aabbf478a04bd347d54ff4128432726a8..62e29bc58e1456033a12ee0cf4e89200de7f8e6f 100644 (file)
@@ -56,14 +56,14 @@ ENTRY(__asinhl)
        movl    $0x7fff, %eax
        andl    %ecx, %eax
        andl    $0x8000, %ecx
+       movl    %eax, %edx
+       orl     $0xffff8000, %edx
+       incl    %edx
+       jz      7f                      // x in Â±Inf or NaN
        xorl    %ecx, 12(%esp)
        fldt    4(%esp)                 // |x|
-       movl    %eax, %edx
        cmpl    $0x3fde, %eax
        jb      2f                      // |x| < 2^-34
-       orl     $0xffff8000, %edx
-       incl    %edx
-       jz      4f                      // x in Â±Inf or NaN
        fldln2                          // log(2) : |x|
        cmpl    $0x4020, %eax
        fxch                            // |x| : log(2)
@@ -94,6 +94,9 @@ ENTRY(__asinhl)
        fchs
 4:     ret
 
+7:     fldt    4(%esp)
+       ret
+
 6:     faddl   MO(one)
        fyl2x
        jecxz   4f
index 01b8afac10984a10c41f9770c329bff99a69bbdd..6c125586c70a1643ccb1ad637934f66825a563b7 100644 (file)
@@ -8,18 +8,14 @@
 RCSID("$NetBSD: s_ilogb.S,v 1.5 1995/10/12 15:53:09 jtc Exp $")
 
 ENTRY(__ilogb)
-       pushl   %ebp
-       movl    %esp,%ebp
-       subl    $4,%esp
-
-       fldl    8(%ebp)
+       fldl    4(%esp)
        fxtract
+       pushl   %eax
        fstpl   %st
 
-       fistpl  -4(%ebp)
-       movl    -4(%ebp),%eax
+       fistpl  (%esp)
+       popl    %eax
 
-       leave
        ret
 END (__ilogb)
 weak_alias (__ilogb, ilogb)
index 6a943265b27c3301019d068f454e1a0b02689b2a..b08a32f4ef697f03dcece9ef19d827658be95074 100644 (file)
@@ -8,18 +8,14 @@
 RCSID("$NetBSD: s_ilogbf.S,v 1.4 1995/10/22 20:32:43 pk Exp $")
 
 ENTRY(__ilogbf)
-       pushl   %ebp
-       movl    %esp,%ebp
-       subl    $4,%esp
-
-       flds    8(%ebp)
+       flds    4(%esp)
        fxtract
+       pushl   %eax
        fstpl   %st
 
-       fistpl  -4(%ebp)
-       movl    -4(%ebp),%eax
+       fistpl  (%esp)
+       popl    %eax
 
-       leave
        ret
 END (__ilogbf)
 weak_alias (__ilogbf, ilogbf)
index 2422a4135553f593f5c794b776e7ee57ea48640f..adc88aababb35d56f8b3eeb81887c81b1204f8c5 100644 (file)
@@ -9,17 +9,14 @@
 RCSID("$NetBSD: $")
 
 ENTRY(__ilogbl)
-       pushl   %ebp
-       movl    %esp,%ebp
-       subl    $4,%esp
-
-       fldt    8(%ebp)
+       fldt    4(%esp)
        fxtract
+       pushl   %eax
+       fstp    %st
 
-       fistpl  -4(%ebp)
-       movl    -4(%ebp),%eax
+       fistpl  (%esp)
+       popl    %eax
 
-       leave
        ret
 END (__ilogbl)
 weak_alias (__ilogbl, ilogbl)
similarity index 94%
rename from sysdeps/libm-i387/s_rinttoll.S
rename to sysdeps/libm-i387/s_llrint.S
index 99395052de1c769dc482009ec96748dc6f847b61..cfb8e86f7d46557883f8c68a071adca226e1357a 100644 (file)
 #include <sysdep.h>
 
        .text
-ENTRY(__rinttoll)
+ENTRY(__llrint)
        fldt    4(%esp)
        subl    $8, %esp
        fistpll (%esp)
        popl    %eax
        popl    %edx
        ret
-END(__rinttoll)
-weak_alias (__rinttoll, rinttoll)
+END(__llrint)
+weak_alias (__llrint, llrint)
similarity index 94%
rename from sysdeps/libm-i387/s_rinttol.S
rename to sysdeps/libm-i387/s_lrint.S
index 22a3e46bd6691868c8b4ec225b732d3bbd4ffc98..19241456a802a2d220a785a62bac86aaeeccd3e0 100644 (file)
 #include <sysdep.h>
 
        .text
-ENTRY(__rinttol)
+ENTRY(__lrint)
        fldt    4(%esp)
        subl    $4, %esp
        fistpl  (%esp)
        popl    %eax
        ret
-END(__rinttol)
-weak_alias (__rinttol, rinttol)
+END(__lrint)
+weak_alias (__lrint, lrint)
index a4c5a35468d79051f196e91892cc075541d4747c..252bf2678aad37e80ca9fcf389c208659c225c7c 100644 (file)
@@ -25,7 +25,12 @@ ENTRY(__remquo)
        shrl    %cl, %eax
        andl    $3, %eax
        movl    20(%esp), %ecx
-       movl    %eax, (%ecx)
+       movl    8(%esp), %edx
+       xorl    16(%esp), %edx
+       testl   $0x80000000, %edx
+       jz      1f
+       negl    %eax
+1:     movl    %eax, (%ecx)
        ret
 END (__remquo)
 weak_alias (__remquo, remquo)
index 56954323a6f014da99b7ab9609389c7c4932bd6f..144eb3034c7dd47c343c8c06b28980f2a3dc6acb 100644 (file)
@@ -25,7 +25,12 @@ ENTRY(__remquof)
        shrl    %cl, %eax
        andl    $3, %eax
        movl    12(%esp), %ecx
-       movl    %eax, (%ecx)
+       movl    4(%esp), %edx
+       xorl    8(%esp), %edx
+       testl   $0x80000000, %edx
+       jz      1f
+       negl    %eax
+1:     movl    %eax, (%ecx)
        ret
 END (__remquof)
 weak_alias (__remquof, remquof)
index 9c91d90c45d274a1fac814df20871bae30badcb0..2cbcdf18af151124f4286e633207eb5aa8e57e42 100644 (file)
@@ -25,7 +25,12 @@ ENTRY(__remquol)
        shrl    %cl, %eax
        andl    $3, %eax
        movl    28(%esp), %ecx
-       movl    %eax, (%ecx)
+       movl    12(%esp), %edx
+       xorl    24(%esp), %edx
+       testl   $0x8000, %edx
+       jz      1f
+       negl    %eax
+1:     movl    %eax, (%ecx)
        ret
 END (__remquol)
 weak_alias (__remquol, remquol)
diff --git a/sysdeps/libm-ieee754/e_gamma_r.c b/sysdeps/libm-ieee754/e_gamma_r.c
new file mode 100644 (file)
index 0000000..eb80809
--- /dev/null
@@ -0,0 +1,47 @@
+/* Implementation of gamma function according to ISO C.
+   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 <math.h>
+#include <math_private.h>
+
+
+double
+__ieee754_gamma_r (double x, int *signgamp)
+{
+  /* We don't have a real gamma implementation now.  We'll use lgamma
+     and the exp function.  But due to the required boundary
+     conditions we must check some values separately.  */
+  int32_t hx;
+  u_int32_t lx;
+
+  EXTRACT_WORDS (hx, lx, x);
+
+  if ((hx & 0x7fffffff | lx) == 0)
+    /* Return value for x == 0 is NaN with invalid exception.  */
+    return x / x;
+  if (hx < 0 && (u_int32_t) hx < 0xfff00000 && __rint (x) == x)
+    {
+      /* Return value for integer x < 0 is NaN with invalid exception.  */
+      return (x - x) / (x - x);
+    }
+
+  /* XXX FIXME.  */
+  return __ieee754_exp (__ieee754_lgamma_r (x, signgamp));
+}
diff --git a/sysdeps/libm-ieee754/e_gammaf_r.c b/sysdeps/libm-ieee754/e_gammaf_r.c
new file mode 100644 (file)
index 0000000..bf79ffe
--- /dev/null
@@ -0,0 +1,46 @@
+/* Implementation of gamma function according to ISO C.
+   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 <math.h>
+#include <math_private.h>
+
+
+float
+__ieee754_gammaf_r (float x, int *signgamp)
+{
+  /* We don't have a real gamma implementation now.  We'll use lgamma
+     and the exp function.  But due to the required boundary
+     conditions we must check some values separately.  */
+  int32_t hx;
+
+  GET_FLOAT_WORD (hx, x);
+
+  if ((hx & 0x7fffffff) == 0)
+    /* Return value for x == 0 is NaN with invalid exception.  */
+    return x / x;
+  if (hx < 0 && (u_int32_t) hx < 0xff800000 && __rintf (x) == x)
+    {
+      /* Return value for integer x < 0 is NaN with invalid exception.  */
+      return (x - x) / (x - x);
+    }
+
+  /* XXX FIXME.  */
+  return __ieee754_expf (__ieee754_lgammaf_r (x, signgamp));
+}
diff --git a/sysdeps/libm-ieee754/e_gammal_r.c b/sysdeps/libm-ieee754/e_gammal_r.c
new file mode 100644 (file)
index 0000000..4fd4988
--- /dev/null
@@ -0,0 +1,46 @@
+/* Implementation of gamma function according to ISO C.
+   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 <math.h>
+#include <math_private.h>
+
+
+long double
+__ieee754_gammal_r (long double x, int *signgamp)
+{
+  /* We don't have a real gamma implementation now.  We'll use lgamma
+     and the exp function.  But due to the required boundary
+     conditions we must check some values separately.  */
+  u_int32_t es, hx, lx;
+
+  GET_LDOUBLE_WORDS (es, hx, lx, x);
+
+  if (((es & 0x7fff) | hx | lx) == 0)
+    /* Return value for x == 0 is NaN with invalid exception.  */
+    return x / x;
+  if ((hx & 0x8000) != 0 && (hx & 0x7fff) != 0x7fff && __rintl (x) == x)
+    {
+      /* Return value for integer x < 0 is NaN with invalid exception.  */
+      return (x - x) / (x - x);
+    }
+
+  /* XXX FIXME.  */
+  return __ieee754_expl (__ieee754_lgammal_r (x, signgamp));
+}
index 1be4ddad8f93d35212a0d60dc8cb38d67117b2de..92e955656871bc310a5d92987c74571ccb61d108 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Developed at SunPro, a Sun Microsystems, Inc. business.
  * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice 
+ * software is freely granted, provided that this notice
  * is preserved.
  * ====================================================
  */
@@ -15,12 +15,12 @@ static char rcsid[] = "$NetBSD: e_lgamma_r.c,v 1.7 1995/05/10 20:45:42 jtc Exp $
 #endif
 
 /* __ieee754_lgamma_r(x, signgamp)
- * Reentrant version of the logarithm of the Gamma function 
- * with user provide pointer for the sign of Gamma(x). 
+ * Reentrant version of the logarithm of the Gamma function
+ * with user provide pointer for the sign of Gamma(x).
  *
  * Method:
  *   1. Argument Reduction for 0 < x <= 8
- *     Since gamma(1+s)=s*gamma(s), for x in [0,8], we may 
+ *     Since gamma(1+s)=s*gamma(s), for x in [0,8], we may
  *     reduce x to a number in [1.5,2.5] by
  *             lgamma(1+s) = log(s) + lgamma(s)
  *     for example,
@@ -58,36 +58,36 @@ static char rcsid[] = "$NetBSD: e_lgamma_r.c,v 1.7 1995/05/10 20:45:42 jtc Exp $
  *     by
  *                                 3       5             11
  *             w = w0 + w1*z + w2*z  + w3*z  + ... + w6*z
- *     where 
+ *     where
  *             |w - f(z)| < 2**-58.74
- *             
+ *
  *   4. For negative x, since (G is gamma function)
  *             -x*G(-x)*G(x) = pi/sin(pi*x),
  *     we have
  *             G(x) = pi/(sin(pi*x)*(-x)*G(-x))
  *     since G(-x) is positive, sign(G(x)) = sign(sin(pi*x)) for x<0
- *     Hence, for x<0, signgam = sign(sin(pi*x)) and 
+ *     Hence, for x<0, signgam = sign(sin(pi*x)) and
  *             lgamma(x) = log(|Gamma(x)|)
  *                       = log(pi/(|x*sin(pi*x)|)) - lgamma(-x);
- *     Note: one should avoid compute pi*(-x) directly in the 
+ *     Note: one should avoid compute pi*(-x) directly in the
  *           computation of sin(pi*(-x)).
- *             
+ *
  *   5. Special Cases
  *             lgamma(2+s) ~ s*(1-Euler) for tiny s
  *             lgamma(1)=lgamma(2)=0
  *             lgamma(x) ~ -log(x) for tiny x
  *             lgamma(0) = lgamma(inf) = inf
  *             lgamma(-integer) = +-inf
- *     
+ *
  */
 
 #include "math.h"
 #include "math_private.h"
 
 #ifdef __STDC__
-static const double 
+static const double
 #else
-static double 
+static double
 #endif
 two52=  4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
 half=  5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
@@ -200,9 +200,9 @@ static double zero=  0.00000000000000000000e+00;
         }
        switch (n) {
            case 0:   y =  __kernel_sin(pi*y,zero,0); break;
-           case 1:   
+           case 1:
            case 2:   y =  __kernel_cos(pi*(0.5-y),zero); break;
-           case 3:  
+           case 3:
            case 4:   y =  __kernel_sin(pi*(one-y),zero,0); break;
            case 5:
            case 6:   y = -__kernel_cos(pi*(y-1.5),zero); break;
@@ -226,9 +226,11 @@ static double zero=  0.00000000000000000000e+00;
 
     /* purge off +-inf, NaN, +-0, and negative arguments */
        *signgamp = 1;
+       if ((unsigned int) hx==0xfff00000&&lx==0)
+         return x-x;
        ix = hx&0x7fffffff;
        if(ix>=0x7ff00000) return x*x;
-       if((ix|lx)==0) return one/zero;
+       if((ix|lx)==0) return one/fabs(x);
        if(ix<0x3b900000) {     /* |x|<2**-70, return -log(|x|) */
            if(hx<0) {
                *signgamp = -1;
@@ -237,9 +239,9 @@ static double zero=  0.00000000000000000000e+00;
        }
        if(hx<0) {
            if(ix>=0x43300000)  /* |x|>=2**52, must be -integer */
-               return one/zero;
+               return x/zero;
            t = sin_pi(x);
-           if(t==zero) return one/zero; /* -integer */
+           if(t==zero) return one/fabsf(t); /* -integer */
            nadj = __ieee754_log(pi/fabs(t*x));
            if(t<zero) *signgamp = -1;
            x = -x;
@@ -275,7 +277,7 @@ static double zero=  0.00000000000000000000e+00;
                p3 = t2+w*(t5+w*(t8+w*(t11+w*t14)));
                p  = z*p1-(tt-w*(p2+y*p3));
                r += (tf + p); break;
-             case 2:   
+             case 2:
                p1 = y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*u5)))));
                p2 = one+y*(v1+y*(v2+y*(v3+y*(v4+y*v5))));
                r += (-0.5*y + p1/p2);
@@ -304,7 +306,7 @@ static double zero=  0.00000000000000000000e+00;
            y = z*z;
            w = w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6)))));
            r = (x-half)*(t-one)+w;
-       } else 
+       } else
     /* 2**58 <= x <= inf */
            r =  x*(__ieee754_log(x)-one);
        if(hx<0) r = nadj - r;
index 1d0122dbb2697877958ee9bcf70a8837a39c44c9..f744d5320e686e82f91fcad5379533b82882bd26 100644 (file)
@@ -8,7 +8,7 @@
  *
  * Developed at SunPro, a Sun Microsystems, Inc. business.
  * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice 
+ * software is freely granted, provided that this notice
  * is preserved.
  * ====================================================
  */
@@ -21,9 +21,9 @@ static char rcsid[] = "$NetBSD: e_lgammaf_r.c,v 1.3 1995/05/10 20:45:47 jtc Exp
 #include "math_private.h"
 
 #ifdef __STDC__
-static const float 
+static const float
 #else
-static float 
+static float
 #endif
 two23=  8.3886080000e+06, /* 0x4b000000 */
 half=  5.0000000000e-01, /* 0x3f000000 */
@@ -136,9 +136,9 @@ static float zero=  0.0000000000e+00;
         }
        switch (n) {
            case 0:   y =  __kernel_sinf(pi*y,zero,0); break;
-           case 1:   
+           case 1:
            case 2:   y =  __kernel_cosf(pi*((float)0.5-y),zero); break;
-           case 3:  
+           case 3:
            case 4:   y =  __kernel_sinf(pi*(one-y),zero,0); break;
            case 5:
            case 6:   y = -__kernel_cosf(pi*(y-(float)1.5),zero); break;
@@ -162,9 +162,11 @@ static float zero=  0.0000000000e+00;
 
     /* purge off +-inf, NaN, +-0, and negative arguments */
        *signgamp = 1;
+       if ((unsigned int)hx==0xff800000)
+         return x-x;
        ix = hx&0x7fffffff;
        if(ix>=0x7f800000) return x*x;
-       if(ix==0) return one/zero;
+       if(ix==0) return one/fabsf(x);
        if(ix<0x1c800000) {     /* |x|<2**-70, return -log(|x|) */
            if(hx<0) {
                *signgamp = -1;
@@ -173,9 +175,9 @@ static float zero=  0.0000000000e+00;
        }
        if(hx<0) {
            if(ix>=0x4b000000)  /* |x|>=2**23, must be -integer */
-               return one/zero;
+               return x/zero;
            t = sin_pif(x);
-           if(t==zero) return one/zero; /* -integer */
+           if(t==zero) return one/fabsf(t); /* -integer */
            nadj = __ieee754_logf(pi/fabsf(t*x));
            if(t<zero) *signgamp = -1;
            x = -x;
@@ -211,7 +213,7 @@ static float zero=  0.0000000000e+00;
                p3 = t2+w*(t5+w*(t8+w*(t11+w*t14)));
                p  = z*p1-(tt-w*(p2+y*p3));
                r += (tf + p); break;
-             case 2:   
+             case 2:
                p1 = y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*u5)))));
                p2 = one+y*(v1+y*(v2+y*(v3+y*(v4+y*v5))));
                r += (-(float)0.5*y + p1/p2);
@@ -240,7 +242,7 @@ static float zero=  0.0000000000e+00;
            y = z*z;
            w = w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6)))));
            r = (x-half)*(t-one)+w;
-       } else 
+       } else
     /* 2**58 <= x <= inf */
            r =  x*(__ieee754_logf(x)-one);
        if(hx<0) r = nadj - r;
similarity index 98%
rename from sysdeps/libm-ieee754/s_rinttoll.c
rename to sysdeps/libm-ieee754/s_llrint.c
index b2fccd17b76ba9d85dc7181dfb051f6db0cf3cae..faae106ece07d1e583cfe5c5589d5b78ba4a26e7 100644 (file)
@@ -33,7 +33,7 @@ static long double two52[2] =
 
 
 long long int
-__rinttoll (long double x)
+__llrint (long double x)
 {
   int32_t j0,sx;
   u_int32_t i0, i1, i;
@@ -141,7 +141,7 @@ static long double two63[2] =
 
 
 long long int
-__rinttoll (long double x)
+__llrint (long double x)
 {
   int32_t se,j0,sx;
   u_int32_t i0, i1, i;
@@ -239,4 +239,4 @@ __rinttoll (long double x)
 }
 #endif
 
-weak_alias (__rinttoll, rinttoll)
+weak_alias (__llrint, llrint)
similarity index 97%
rename from sysdeps/libm-ieee754/s_roundtoll.c
rename to sysdeps/libm-ieee754/s_llround.c
index 49167236a6bd9b6036fc55939f09e8fd54184611..aee0e31fc0fa442ab87ec8c88115f2c58b0a2b56 100644 (file)
@@ -27,7 +27,7 @@
 /* The `long double' is in fact the IEEE `double' type.  */
 
 long long int
-__roundtoll (long double x)
+__llround (long double x)
 {
   int32_t j0;
   u_int32_t i1, i0;
@@ -103,7 +103,7 @@ __roundtoll (long double x)
 }
 #else
 long long int
-__roundtoll (long double x)
+__llround (long double x)
 {
   int32_t j0;
   u_int32_t se, i1, i0;
@@ -176,4 +176,4 @@ __roundtoll (long double x)
   return se & 0x8000 ? -result : result;
 }
 #endif
-weak_alias (__roundtoll, roundtoll)
+weak_alias (__llround, llround)
similarity index 98%
rename from sysdeps/libm-ieee754/s_rinttol.c
rename to sysdeps/libm-ieee754/s_lrint.c
index 257bdc744c05d13f260a1eb507255d7327de3827..6779f974bde32aaf186dedf78f73958b7311e9f4 100644 (file)
@@ -33,7 +33,7 @@ static long double two52[2] =
 
 
 long int
-__rinttol (long double x)
+__lrint (long double x)
 {
   int32_t j0,sx;
   u_int32_t i0,i1,i;
@@ -141,7 +141,7 @@ static long double two63[2] =
 
 
 long int
-__rinttol (long double x)
+__lrint (long double x)
 {
   int32_t se,j0,sx;
   u_int32_t i0,i1,i;
@@ -239,4 +239,4 @@ __rinttol (long double x)
 }
 #endif
 
-weak_alias (__rinttol, rinttol)
+weak_alias (__lrint, lrint)
similarity index 97%
rename from sysdeps/libm-ieee754/s_roundtol.c
rename to sysdeps/libm-ieee754/s_lround.c
index bc0ceae0f85baad2550a30d386cc04191a20ddd2..0f91280a791d41d7e5cb1587b7abd36b3c1bf84f 100644 (file)
@@ -27,7 +27,7 @@
 /* The `long double' is in fact the IEEE `double' type.  */
 
 long int
-__roundtol (long double x)
+__lround (long double x)
 {
   int32_t j0;
   u_int32_t i1, i0;
@@ -101,7 +101,7 @@ __roundtol (long double x)
 }
 #else
 long int
-__roundtol (long double x)
+__lround (long double x)
 {
   int32_t j0;
   u_int32_t se, i1, i0;
@@ -174,4 +174,4 @@ __roundtol (long double x)
   return se & 0x8000 ? -result : result;
 }
 #endif
-weak_alias (__roundtol, roundtol)
+weak_alias (__lround, lround)
index f0a32130a2cfcef2aaede661033abaedee5e3799..39f6ceab2ea9803e68602a7b20a5d543e8d73659 100644 (file)
@@ -82,6 +82,7 @@ __remquo (double x, double y, int *quo)
       if (x + x > y)
        {
          x -= y;
+         ++cquo;
          if (x + x >= y)
            {
              x -= y;
@@ -95,6 +96,7 @@ __remquo (double x, double y, int *quo)
       if (x > y_half)
        {
          x -= y;
+         ++cquo;
          if (x >= y_half)
            {
              x -= y;
index 6fa02e47b31867391e2225abcce64e931e36381b..b3870f4b020b21d9a621e304c2638558b767e816 100644 (file)
@@ -81,6 +81,7 @@ __remquof (float x, float y, int *quo)
       if (x + x > y)
        {
          x -= y;
+         ++cquo;
          if (x + x >= y)
            {
              x -= y;
@@ -94,6 +95,7 @@ __remquof (float x, float y, int *quo)
       if (x > y_half)
        {
          x -= y;
+         ++cquo;
          if (x >= y_half)
            {
              x -= y;
index 9ef424901b0dedc76522c32ffe5fdfd7c4b71bf0..b7835e6dc75f32b6665798813ecdd9d82f6e88f0 100644 (file)
@@ -82,6 +82,7 @@ __remquol (long double x, long double p, int *quo)
       if (x + x > p)
        {
          x -= p;
+         ++cquo;
          if (x + x >= p)
            {
              x -= p;
@@ -95,6 +96,7 @@ __remquol (long double x, long double p, int *quo)
       if (x > p_half)
        {
          x -= p;
+         ++cquo;
          if (x >= p_half)
            {
              x -= p;
index 439b966e69179e46250944611e1335b71b269e66..0ce0ffdf2f848d433e17b1b02cf12a136bfd464e 100644 (file)
@@ -35,10 +35,10 @@ huge   = 1.0e+300,
 tiny   = 1.0e-300;
 
 #ifdef __STDC__
-       double __scalbn (double x, int n)
+       double __scalbn (double x, long int n)
 #else
        double __scalbn (x,n)
-       double x; int n;
+       double x; long int n;
 #endif
 {
        int32_t k,hx,lx;
@@ -49,17 +49,16 @@ tiny   = 1.0e-300;
            x *= two54;
            GET_HIGH_WORD(hx,x);
            k = ((hx&0x7ff00000)>>20) - 54;
-            if (n< -50000) return tiny*x;      /*underflow*/
            }
         if (k==0x7ff) return x+x;              /* NaN or Inf */
         k = k+n;
-        if (k >  0x7fe) return huge*__copysign(huge,x); /* overflow  */
+        if (n> 50000 || k >  0x7fe)
+         return huge*__copysign(huge,x); /* overflow  */
+       if (n< -50000) return tiny*__copysign(tiny,x); /*underflow*/
         if (k > 0)                             /* normal result */
            {SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;}
         if (k <= -54)
-            if (n > 50000)     /* in case integer overflow in n+k */
-               return huge*__copysign(huge,x); /*overflow*/
-           else return tiny*__copysign(tiny,x);        /*underflow*/
+         return tiny*__copysign(tiny,x);       /*underflow*/
         k += 54;                               /* subnormal result */
        SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20));
         return x*twom54;
index 3a83e54c569d19d92e13b35d6351cc6d95bf8f61..4799c825c97b2ac403b725c86d05377c2000bd09 100644 (file)
@@ -8,7 +8,7 @@
  *
  * Developed at SunPro, a Sun Microsystems, Inc. business.
  * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice 
+ * software is freely granted, provided that this notice
  * is preserved.
  * ====================================================
  */
@@ -31,10 +31,10 @@ huge   = 1.0e+30,
 tiny   = 1.0e-30;
 
 #ifdef __STDC__
-       float __scalbnf (float x, int n)
+       float __scalbnf (float x, long int n)
 #else
        float __scalbnf (x,n)
-       float x; int n;
+       float x; long int n;
 #endif
 {
        int32_t k,ix;
@@ -44,18 +44,18 @@ tiny   = 1.0e-30;
             if ((ix&0x7fffffff)==0) return x; /* +-0 */
            x *= two25;
            GET_FLOAT_WORD(ix,x);
-           k = ((ix&0x7f800000)>>23) - 25; 
-            if (n< -50000) return tiny*x;      /*underflow*/
+           k = ((ix&0x7f800000)>>23) - 25;
            }
         if (k==0xff) return x+x;               /* NaN or Inf */
-        k = k+n; 
-        if (k >  0xfe) return huge*copysignf(huge,x); /* overflow  */
+        k = k+n;
+        if (n> 50000 || k >  0xfe)
+         return huge*copysignf(huge,x); /* overflow  */
+       if (n< -50000)
+         return tiny*copysignf(tiny,x);        /*underflow*/
         if (k > 0)                             /* normal result */
            {SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23)); return x;}
         if (k <= -25)
-            if (n > 50000)     /* in case integer overflow in n+k */
-               return huge*copysignf(huge,x);  /*overflow*/
-           else return tiny*copysignf(tiny,x); /*underflow*/
+           return tiny*copysignf(tiny,x);      /*underflow*/
         k += 25;                               /* subnormal result */
        SET_FLOAT_WORD(x,(ix&0x807fffff)|(k<<23));
         return x*twom25;
index 6825e9c7b3a4cec06b9dc69ebdfa7c402d0d9b95..3e80d85136b78e207d5f3ca0b3c89686db1e8b31 100644 (file)
@@ -33,16 +33,16 @@ static const long double
 #else
 static long double
 #endif
-two54   =  1.80143985094819840000e+16, /* 0x4035, 0x00000000, 0x00000000 */
-twom54  =  5.55111512312578270212e-17, /* 0x3FC9, 0x00000000, 0x00000000 */
+two63   =  4.50359962737049600000e+15,
+twom63  =  1.08420217248550443400e-19;
 huge   = 1.0e+4900L,
 tiny   = 1.0e-4900L;
 
 #ifdef __STDC__
-       long double __scalbnl (long double x, int n)
+       long double __scalbnl (long double x, long int n)
 #else
        long double __scalbnl (x,n)
-       long double x; int n;
+       long double x; long int n;
 #endif
 {
        int32_t k,es,hx,lx;
@@ -50,22 +50,22 @@ tiny   = 1.0e-4900L;
         k = es&0x7fff;                         /* extract exponent */
         if (k==0) {                            /* 0 or subnormal x */
             if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
-           x *= two54;
-           GET_HIGH_WORD(hx,x);
-           k = ((hx&0x7ff00000)>>20) - 54;
-            if (n< -50000) return tiny*x;      /*underflow*/
+           x *= two63;
+           GET_LDOUBLE_EXP(es,x);
+           k = (hx&0x7fff) - 63;
            }
-        if (k==0x7ff) return x+x;              /* NaN or Inf */
+        if (k==0x7fff) return x+x;             /* NaN or Inf */
         k = k+n;
-        if (k >  0x7fe) return huge*__copysign(huge,x); /* overflow  */
+        if (n> 50000 || k > 0x7ffe)
+         return huge*__copysignl(huge,x); /* overflow  */
+       if (n< -50000)
+         return tiny*__copysignl(tiny,x);
         if (k > 0)                             /* normal result */
-           {SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;}
-        if (k <= -54)
-            if (n > 50000)     /* in case integer overflow in n+k */
-               return huge*__copysign(huge,x); /*overflow*/
-           else return tiny*__copysign(tiny,x);        /*underflow*/
+           {SET_LDOUBLE_EXP(x,(es&0x8000)|k); return x;}
+        if (k <= -63)
+           return tiny*__copysignl(tiny,x);    /*underflow*/
         k += 54;                               /* subnormal result */
-       SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20));
-        return x*twom54;
+       SET_LDOUBLE_EXP(x,(es&0x8000)|k);
+        return x*twom63;
 }
 weak_alias (__scalbnl, scalbnl)
index 49e4bcf3c303bdf0d0373bb426e8f34d4edfc3a5..87a3408c3f8e9fa519d3fb4e5d07955c4d131af5 100644 (file)
@@ -15,16 +15,13 @@ static char rcsid[] = "$NetBSD: w_gamma.c,v 1.7 1995/11/20 22:06:43 jtc Exp $";
 #endif
 
 /* double gamma(double x)
- * Return the logarithm of the Gamma function of x.
- *
- * Method: call gamma_r
+ * Return  the logarithm of the Gamma function of x or the Gamma function of x,
+ * depending on the library mode.
  */
 
 #include "math.h"
 #include "math_private.h"
 
-extern int signgam;
-
 #ifdef __STDC__
        double __gamma(double x)
 #else
@@ -32,12 +29,19 @@ extern int signgam;
        double x;
 #endif
 {
+       int signgam;
+        double y;
+       if (_LIB_VERSION == _SVID_)
+         y = __ieee754_lgamma_r(x,&signgam);
+       else
+         {
+           y = __ieee754_gamma_r(x,&signgam);
+           if (signgam < 0) y = -y;
 #ifdef _IEEE_LIBM
-       return __ieee754_lgamma_r(x,&signgam);
+           return y;
 #else
-        double y;
-        y = __ieee754_lgamma_r(x,&signgam);
-        if(_LIB_VERSION == _IEEE_) return y;
+           if(_LIB_VERSION == _IEEE_) return y;
+         }
         if(!__finite(y)&&__finite(x)) {
             if(__floor(x)==x&&x<=0.0)
                 return __kernel_standard(x,x,41); /* gamma pole */
diff --git a/sysdeps/libm-ieee754/w_gamma_r.c b/sysdeps/libm-ieee754/w_gamma_r.c
deleted file mode 100644 (file)
index f9efc8c..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/* @(#)wr_gamma.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: w_gamma_r.c,v 1.7 1995/11/20 22:06:45 jtc Exp $";
-#endif
-
-/*
- * wrapper double gamma_r(double x, int *signgamp)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-
-#ifdef __STDC__
-       double __gamma_r(double x, int *signgamp) /* wrapper lgamma_r */
-#else
-       double __gamma_r(x,signgamp)              /* wrapper lgamma_r */
-        double x; int *signgamp;
-#endif
-{
-#ifdef _IEEE_LIBM
-       return __ieee754_lgamma_r(x,signgamp);
-#else
-        double y;
-        y = __ieee754_lgamma_r(x,signgamp);
-        if(_LIB_VERSION == _IEEE_) return y;
-        if(!__finite(y)&&__finite(x)) {
-            if(__floor(x)==x&&x<=0.0)
-                return __kernel_standard(x,x,41); /* gamma pole */
-            else
-                return __kernel_standard(x,x,40); /* gamma overflow */
-        } else
-            return y;
-#endif
-}
-weak_alias (__gamma_r, gamma_r)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__gamma_r, __gammal_r)
-weak_alias (__gamma_r, gammal_r)
-#endif
index c2d21daf4703f50d0d0f83b1f9c85055174f695d..ecde18382456db0566a3a0b1f683aa91edb6cd0f 100644 (file)
@@ -8,7 +8,7 @@
  *
  * Developed at SunPro, a Sun Microsystems, Inc. business.
  * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice 
+ * software is freely granted, provided that this notice
  * is preserved.
  * ====================================================
  */
@@ -20,8 +20,6 @@ static char rcsid[] = "$NetBSD: w_gammaf.c,v 1.4 1995/11/20 22:06:48 jtc Exp $";
 #include "math.h"
 #include "math_private.h"
 
-extern int signgam;
-
 #ifdef __STDC__
        float __gammaf(float x)
 #else
@@ -29,12 +27,19 @@ extern int signgam;
        float x;
 #endif
 {
+       int signgam;
+        float y;
+       if (_LIB_VERSION == _SVID_)
+         y = __ieee754_lgammaf_r(x,&signgam);
+       else
+         {
+           y = __ieee754_gammaf_r(x,&signgam);
+           if (signgam < 0) y = -y;
 #ifdef _IEEE_LIBM
-       return __ieee754_lgammaf_r(x,&signgam);
+           return y;
 #else
-        float y;
-        y = __ieee754_lgammaf_r(x,&signgam);
-        if(_LIB_VERSION == _IEEE_) return y;
+           if(_LIB_VERSION == _IEEE_) return y;
+         }
         if(!__finitef(y)&&__finitef(x)) {
             if(__floorf(x)==x&&x<=(float)0.0)
                /* gammaf pole */
@@ -45,5 +50,5 @@ extern int signgam;
         } else
             return y;
 #endif
-}             
+}
 weak_alias (__gammaf, gammaf)
diff --git a/sysdeps/libm-ieee754/w_gammaf_r.c b/sysdeps/libm-ieee754/w_gammaf_r.c
deleted file mode 100644 (file)
index b15d5e8..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* w_gammaf_r.c -- float version of w_gamma_r.c.
- * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
- */
-
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice 
- * is preserved.
- * ====================================================
- */
-
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: w_gammaf_r.c,v 1.4 1995/11/20 22:06:50 jtc Exp $";
-#endif
-
-/* 
- * wrapper float gammaf_r(float x, int *signgamp)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-
-#ifdef __STDC__
-       float __gammaf_r(float x, int *signgamp) /* wrapper lgammaf_r */
-#else
-       float __gammaf_r(x,signgamp)              /* wrapper lgammaf_r */
-        float x; int *signgamp;
-#endif
-{
-#ifdef _IEEE_LIBM
-       return __ieee754_lgammaf_r(x,signgamp);
-#else
-        float y;
-        y = __ieee754_lgammaf_r(x,signgamp);
-        if(_LIB_VERSION == _IEEE_) return y;
-        if(!__finitef(y)&&__finitef(x)) {
-            if(__floorf(x)==x&&x<=(float)0.0)
-               /* gammaf pole */
-                return (float)__kernel_standard((double)x,(double)x,141);
-            else
-               /* gamma overflow */
-                return (float)__kernel_standard((double)x,(double)x,140);
-        } else
-            return y;
-#endif
-}             
-weak_alias (__gammaf_r, gammaf_r)
index f72e2e7e4405900c050da46266c6bea7cc085240..605a4167c45a6d4668b4f953c7508655f33af6fb 100644 (file)
@@ -19,16 +19,12 @@ static char rcsid[] = "$NetBSD: $";
 #endif
 
 /* long double gammal(double x)
- * Return the logarithm of the Gamma function of x.
- *
- * Method: call gammal_r
+ * Return the Gamma function of x.
  */
 
 #include "math.h"
 #include "math_private.h"
 
-extern int signgam;
-
 #ifdef __STDC__
        long double __gammal(long double x)
 #else
@@ -36,12 +32,19 @@ extern int signgam;
        long double x;
 #endif
 {
+        long double y;
+       int signgam;
+       if (_LIB_VERSION == _SVID_)
+         y = __ieee754_lgammal_r(x,&signgam);
+       else
+         {
+           y = __ieee754_gammal_r(x,&signgam);
+           if (signgam < 0) y = -y;
 #ifdef _IEEE_LIBM
-       return __ieee754_lgammal_r(x,&signgam);
+           return y;
 #else
-        long double y;
-        y = __ieee754_lgammal_r(x,&signgam);
-        if(_LIB_VERSION == _IEEE_) return y;
+           if(_LIB_VERSION == _IEEE_) return y;
+         }
         if(!__finitel(y)&&__finitel(x)) {
             if(__floorl(x)==x&&x<=0.0)
                 return __kernel_standard(x,x,241); /* gamma pole */
diff --git a/sysdeps/libm-ieee754/w_gammal_r.c b/sysdeps/libm-ieee754/w_gammal_r.c
deleted file mode 100644 (file)
index ad6a43a..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* w_gammal_r.c -- long double version of w_gamma_r.c.
- * Conversion to long double by Ulrich Drepper,
- * Cygnus Support, drepper@cygnus.com.
- */
-
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
-
-#if defined(LIBM_SCCS) && !defined(lint)
-static char rcsid[] = "$NetBSD: $";
-#endif
-
-/*
- * wrapper long double gammal_r(long double x, int *signgamp)
- */
-
-#include "math.h"
-#include "math_private.h"
-
-
-#ifdef __STDC__
-       long double __gammal_r(long double x, int *signgamp)
-                                               /* wrapper lgammal_r */
-#else
-       long double __gammal_r(x,signgamp)      /* wrapper lgamma_r */
-        long double x; int *signgamp;
-#endif
-{
-#ifdef _IEEE_LIBM
-       return __ieee754_lgammal_r(x,signgamp);
-#else
-        long double y;
-        y = __ieee754_lgammal_r(x,signgamp);
-        if(_LIB_VERSION == _IEEE_) return y;
-        if(!__finitel(y)&&__finitel(x)) {
-            if(__floorl(x)==x&&x<=0.0)
-                return __kernel_standard(x,x,241); /* gamma pole */
-            else
-                return __kernel_standard(x,x,240); /* gamma overflow */
-        } else
-            return y;
-#endif
-}
-weak_alias (__gammal_r, gammal_r)
index fd90a2de1baa3181703536ed1dc849a122cb6635..bdeaa9efb0f7d7ee30f0ca44ede705988888a270 100644 (file)
@@ -309,7 +309,7 @@ __inline_functions (float,f)
 __inline_functions (long double,l)
 #undef __inline_functions
 
-__m81_defun (long int, __rinttol, (long double __x))
+__m81_defun (long int, __lrint, (long double __x))
 {
   long int __result;
   __asm ("fmove%.l %1, %0" : "=dm" (__result) : "f" (__x));
@@ -391,7 +391,7 @@ __inline_forward_c(int,ilogbl, (long double __value), (__value))
 #endif
 #ifdef __USE_ISOC9X
 __inline_forward_c(long double,nearbyintl, (long double __value), (__value))
-__inline_forward_c(long int,rinttol, (long double __value), (__value))
+__inline_forward_c(long int,lrint, (long double __value), (__value))
 #endif
 #ifdef __USE_GNU
 __inline_forward(void,sincosl,
similarity index 96%
rename from sysdeps/m68k/fpu/s_rinttoll.c
rename to sysdeps/m68k/fpu/s_llrint.c
index bad8082bd1ca250e9c48c8f343e5dc691ed35022..f5d0d51122247f6947f0c9dcf7069a67470076d0 100644 (file)
@@ -24,7 +24,7 @@
 #include "math_private.h"
 
 long long int
-__rinttoll (long double x)
+__llrint (long double x)
 {
   int32_t se, sx;
   u_int32_t h, l;
@@ -59,4 +59,4 @@ __rinttoll (long double x)
   return result;
 }
 
-weak_alias (__rinttoll, rinttoll)
+weak_alias (__llrint, llrint)
similarity index 92%
rename from sysdeps/m68k/fpu/s_rinttol.c
rename to sysdeps/m68k/fpu/s_lrint.c
index 7476d785a6fa1cb6c166d4d80c849aa85f426cb6..a7044113af3f0a3f54db13c37714b8263e63bc75 100644 (file)
@@ -23,9 +23,9 @@
 #include <math.h>
 
 long int
-__rinttol (long double x)
+__lrint (long double x)
 {
-  return __m81_u(__rinttol) (x);
+  return __m81_u(__lrint) (x);
 }
 
-weak_alias (__rinttol, rinttol)
+weak_alias (__lrint, lrint)
index 3682ba7896d8ab7b167f9d52522ce3865b278e2d..0332eccfd0cf4e209ce0f55088b52b9536a8ad27 100644 (file)
@@ -37,18 +37,9 @@ s(__remquo) (float_type x, float_type y, int *quo)
   float_type result;
   int cquo, fpsr;
 
-  /* FIXME: Which of frem and fmod is correct?  */
-#if 1
   __asm ("frem%.x %2,%0\n\tfmove%.l %/fpsr,%1"
         : "=f" (result), "=dm" (fpsr) : "f" (y), "0" (x));
   cquo = (fpsr >> 16) & 0x7f;
-  if ((result > 0) != (x > 0))
-    cquo--;
-#else
-  __asm ("fmod%.x %2,%0\n\tfmove%.l %/fpsr,%1"
-        : "=f" (result), "=dm" (fpsr) : "f" (y), "0" (x));
-  cquo = (fpsr >> 16) & 0x7f;
-#endif
   if (fpsr & (1 << 23))
     cquo = -cquo;
   *quo = cquo;
index 7c1013ad2bbdbb62990dd90621b379620689bb0e..a47f77af328e5b6a890fb4ae4cb7727a18015362 100644 (file)
@@ -16,6 +16,9 @@
 # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 # Boston, MA 02111-1307, USA.
 
+ifneq (yes,$(inhibit-stdio_lim))
+# Disable these rules if we generate stdio_lim.h by other means.
+
 ifeq (yes,$(cross-compiling))
 $(common-objpfx)stdio_lim.h:
        @echo
@@ -38,3 +41,5 @@ $(common-objpfx)mk-stdiolim: $(sysdep_dir)/posix/mk-stdiolim.c \
 
 common-generated := $(common-generated) stdio_lim.h mk-stdiolim
 before-compile := $(before-compile) $(common-objpfx)stdio_lim.h
+
+endif # inhibit-stdio_lim
index ba908dc0cb06b530f12f21f9a8e47d17be99d6ef..ae16c0f8fb9d17a6a9797c31e1d69dad1c4e387e 100644 (file)
@@ -1 +1,2 @@
+fenv_const.c
 fenv_libc.h
index 6ec9a15d385b11cbb23a2801feb343b50df8bc2e..3383c14872fe7aeb8ff649470fa224e9844a705b 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_acoshl (long double x)
 {
   fputs ("__ieee754_acoshl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 5c10b526ccdfad09dae8d24e0926b3527b3c41e3..af1e6261c3f9663aced2a1ee6e59d222c664ed2b 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_acosl (long double x)
 {
   fputs ("__ieee754_acosl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index f9260913e823416b2eed57e03d67b4ca77fe9824..ce8c8cdaeaef3bb637285b62a9efd42cc7c90670 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_asinl (long double x)
 {
   fputs ("__ieee754_asinl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 3edfacd68afc9429d3f19111672dc5d91ffd118d..6c500d4c8ad8bd2670afbc52819c6762eca974cc 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_atan2l (long double x, long double y)
 {
   fputs ("__ieee754_atan2l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 246b5ae83f7fe2c3dfc18de12b49df7ac30b7110..4ea8c795971033a74c561462e9e32660b4214862 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_expl (long double x)
 {
   fputs ("__ieee754_expl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index b47912581bc7cd37aaa5e10b5cc5c1d810c929c7..25cc114808b9cea3967434f24a4774d095feb2a0 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_fmodl (long double x, long double y)
 {
   fputs ("__ieee754_fmodl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index c16e8a8a9dc064a6ac3859c8e9b8cb8ee1f27c9c..ecb8a8ed168ff4d68b655029843599236ae9a8ca 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_j0l (long double x)
 {
   fputs ("__ieee754_j0l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
@@ -14,6 +16,7 @@ long double
 __ieee754_y0l (long double x)
 {
   fputs ("__ieee754_y0l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 0a781e5cc1f0fee8e7892a8f661ad7ec206d3954..24655700e3ef8686700857ec855713f520304f59 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_j1l (long double x)
 {
   fputs ("__ieee754_j1l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
@@ -14,6 +16,7 @@ long double
 __ieee754_y1l (long double x)
 {
   fputs ("__ieee754_y1l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 86ff03b0318483d65f10e279ae8549bf378ff546..8ced34d4616f040718d7f6eaf04b77acfac11446 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_jnl (int n, long double x)
 {
   fputs ("__ieee754_jnl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
@@ -14,6 +16,7 @@ long double
 __ieee754_ynl (int n, long double x)
 {
   fputs ("__ieee754_ynl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 015511818c4cb0cf955d0f1e4964fbf07ce9c6c0..d7fbbca4df0fc3a3acfdb4a01b69f3dd091885e1 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_lgammal_r (long double x, int *signgamp)
 {
   fputs ("__ieee754_lgammal_r not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 0e8cdcaaa910153331049f566010741352d6860a..a414d04d74f2410ffcfe974e1e0cada732562588 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_log10l (long double x)
 {
   fputs ("__ieee754_log10l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index b8357543b017c15969e0fa2dd081d7290096c3b9..45248a375aef91de716f54ee62cbe81d0dcc1287 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_logl (long double x)
 {
   fputs ("__ieee754_logl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 2fa7862ea56d10dd00bc4ab207feba371651d347..611dfb583c7274b12e1da0264c458a965bd628f7 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_powl (long double x, long double y)
 {
   fputs ("__ieee754_powl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 0a9ac79917edd31f67c63e937f58c231a0758901..eec7d793bb915047b348eebcf5d3cfb129575644 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_rem_pio2l (long double x, long double *y)
 {
   fputs ("__ieee754_rem_pio2l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 88a7668330a0e117d3c43b67d8598c954eeb868d..c583a27673316c93e321688b3905c4ef81ef2fd2 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __ieee754_sqrtl (long double x)
 {
   fputs ("__ieee754_sqrtl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 3e6c9688f0dcb39ac50fd6625e339988231db7ec..10016ab72e3fa5bac5d8def2463bbe7c1585094c 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __kernel_cosl (long double x, long double y)
 {
   fputs ("__kernel_cosl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index a51c44546ba44671cdd7b1fd49df0d38f3ec17c4..01bf1582493d76b605d39fe276eb6439a1ed7ee7 100644 (file)
@@ -1,12 +1,14 @@
 #include <math.h>
 #include <math_private.h>
 #include <stdio.h>
+#include <errno.h>
 
 int
 __kernel_rem_pio2l (long double *x, long double *y, int e0, int nx, int prec,
                    const int *ipio2)
 {
   fputs ("__kernel_rem_pio2l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 2057bf8bffc576100e265f9b3792cf13fc6acf0e..40cf22a59602a2d18d369638441d11177647c4aa 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __kernel_sinl (long double x, long double y)
 {
   fputs ("__kernel_sinl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 713c8cdfe699861fcce32db52c2e6458b518cd44..95ffc23bd953f0b065f322b77ed980b6e4962c52 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __kernel_tanl (long double x, long double y, int iy)
 {
   fputs ("__kernel_tanl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 
index 38dd6f59915959d9d44d86dd87f6abdd10387315..2957d702d5552d17ac4c3dfbf33da08d787dce6c 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __atanl (long double x)
 {
   fputs ("__atanl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 weak_alias (__atanl, atanl)
index efcf490fa7c01f6ce679a40e7dc3fd22feaa2dbe..7ae25d625246f0bcbaf7e803c07e1bdc4de5348b 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __erfl (long double x)
 {
   fputs ("__erfl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 weak_alias (__erfl, erfl)
@@ -15,6 +17,7 @@ long double
 __erfcl (long double x)
 {
   fputs ("__erfcl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 weak_alias (__erfcl, erfcl)
index a3d0906a3387f3c33d3ab6787daa14a8643a132c..5adda4107abfa7e6264d82e61d818dcb2d74c0bd 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 double
 __exp2 (double x)
 {
   fputs ("__exp2 not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 weak_alias (__exp2, exp2)
index 5d6540e07464dd8c937653e6afd4a7c1ae5b2a98..51b268c9e00adfc3b6b3309df90f21585f1869a9 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 float
 __exp2f (float x)
 {
   fputs ("__exp2f not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 weak_alias (__exp2f, exp2f)
index 4c52fc904d17d7120860e95cacb2d226bd75a41b..cab2cb2a6932e69c097d89df55f34b6cd4526f63 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __exp2l (long double x)
 {
   fputs ("__exp2l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 weak_alias (__exp2l, exp2l)
index fb8bda5eca68c93f0f87ae8ca0796b92b995f49e..38798812ff2d80800aa45c34b06c21f47dc52021 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __expm1l (long double x)
 {
   fputs ("__expm1l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 weak_alias (__expm1l, expm1l)
index 07282482f3baa4c56605c3316496b67ef462a3b2..9e51ce2d437b16afe344de85bd30528a4801f9c4 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __log1pl (long double x)
 {
   fputs ("__log1pl not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 weak_alias (__log1pl, log1pl)
index d8d86af995925d9741cd91b01ed1365129d820e8..cc09569422b4b0088899920028ba55650e1032fd 100644 (file)
@@ -1,10 +1,12 @@
 #include <math.h>
 #include <stdio.h>
+#include <errno.h>
 
 long double
 __log2l (long double x)
 {
   fputs ("__log2l not implemented\n", stderr);
+  __set_errno (ENOSYS);
   return 0.0;
 }
 weak_alias (__log2l, log2l)
index fc403871f39b04d3fad4c67e45da9e2822c4828b..ae7960071704e1b1a7617e5efa8715849c8b0869 100644 (file)
@@ -10,6 +10,7 @@ net/ethernet.h
 net/if.h
 net/if_arp.h
 net/if_ppp.h
+net/if_slip.h
 net/ppp-comp.h
 net/ppp_defs.h
 net/route.h
index c61904a3b8f77e8c035244189bb92d8749487881..7255a69ece4c6d7dd8789d32f281612c87e9807c 100644 (file)
@@ -19,13 +19,15 @@ $(objpfx)syscall-%.h $(objpfx)syscall-%.d: ../sysdeps/unix/sysv/linux/sys/syscal
        echo > $(@:.d=.h).new \
             '/* Generated at libc build time from kernel syscall list.  */'
        SUNPRO_DEPENDENCIES='$(@:.h=.d) $(patsubst $(objpfx)%,$$(objpfx)%,\
-                            $(@:.h=.d))' \
+                                                  $(@:.d=.h) $(@:.h=.d))' \
        $(CC) -E -x c $< -D_LIBC -dM | \
        sed -n >> $(@:.d=.h).new \
              's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p'
        mv -f $(@:.d=.h).new $(@:.d=.h)
+ifndef no_deps
 # Get the generated list of dependencies (probably /usr/include/asm/unistd.h).
 -include $(objpfx)syscall-list.d
+endif
 generated += syscall-list.h syscall-list.d
 endif
 
@@ -35,7 +37,8 @@ endif
 
 ifeq ($(subdir),socket)
 sysdep_headers += sys/socketcall.h net/if.h net/if_ppp.h net/ppp-comp.h \
-                 net/ppp_defs.h net/if_arp.h net/route.h net/ethernet.h
+                 net/ppp_defs.h net/if_arp.h net/route.h net/ethernet.h \
+                 net/if_slip.h
 sysdep_routines += cmsg_nxthdr
 endif
 
@@ -61,3 +64,30 @@ endif
 
 # Don't compile the ctype glue code, since there is no old non-GNU C library.
 inhibit-glue = yes
+
+# Tell sysdeps/posix/Makefile that we create stdio_lim.h differently.
+inhibit-stdio_lim = yes
+
+$(common-objpfx)stdio_%.h $(common-objpfx)stdio_%.d: \
+ $(..)sysdeps/unix/sysv/linux/stdio_%.h.in
+       rm -f $(@:.h=.d) $(@:.d=.h)-t
+       echo '#include <linux/limits.h>' | \
+       SUNPRO_DEPENDENCIES='$(@:.h=.d) \
+                            $(patsubst $(common-objpfx)%,$$(common-objpfx)%,\
+                                       $(@:.d=.h) $(@:.h=.d))' \
+       $(CC) -E -dM - > $(@:.d=.h)-t
+       fopen_max=`sed -n 's/^#define OPEN_MAX //p' $(@:.d=.h)-t`; \
+       filename_max=`sed -n 's/^#define PATH_MAX //p' $(@:.d=.h)-t`; \
+       if test -n "$$fopen_max" && test -n "$$filename_max"; then \
+               sed -e "s/DEFAULT_FOPEN_MAX/$$fopen_max/" \
+                   -e "s/DEFAULT_FILENAME_MAX/$$filename_max/" $< \
+                   > $(@:.d=.h).new && \
+               mv -f $(@:.d=.h).new $(@:.d=.h); \
+       else exit 1; fi
+# Remove this last so that it can be examined if something went wrong.
+       rm -f $(@:.d=.h)-t
+ifndef no_deps
+# Get the list of dependencies (probably /usr/include/linux/limits.h).
+-include $(common-objpfx)stdio_lim.d
+endif
+common-generated += stdio_lim.h stdio_lim.d
diff --git a/sysdeps/unix/sysv/linux/arm/Dist b/sysdeps/unix/sysv/linux/arm/Dist
new file mode 100644 (file)
index 0000000..738b9cc
--- /dev/null
@@ -0,0 +1 @@
+clone.S
index a8780df917d050649ba2cf5418e2b3c7cf27cd78..79dbf169120162549c696544d353a531b38c9949 100644 (file)
@@ -98,27 +98,3 @@ fi
 if test -f $srcdir/elf/ldconfig.c; then
   has_ldconfig=yes
 fi
-
-# Generate stdio_lim.h
-default_fopen_max="`${CC-gcc} -E $srcdir/sysdeps/unix/sysv/linux/mk-stdiolim.c | grep DEFAULT_FOPEN_MAX | cut -f2 -d':'`"
-default_filename_max="`${CC-gcc} -E $srcdir/sysdeps/unix/sysv/linux/mk-stdiolim.c | grep DEFAULT_FILENAME_MAX | cut -f2 -d':'`"
-# We double check if "default_fopen_max" and "default_filename_max" are
-# ok or not.
-if test "x$default_fopen_max" != "xOPEN_MAX" \
-       -a "x$default_filename_max" != "xPATH_MAX"
-then
-  sed -e "s/DEFAULT_FOPEN_MAX/$default_fopen_max/" \
-       -e "s/DEFAULT_FILENAME_MAX/$default_filename_max/" \
-       $srcdir/sysdeps/unix/sysv/linux/stdio_lim.h.in > stdio_lim.h.new
-  if test -r stdio_lim.h.new && cmp -s stdio_lim.h.new stdio_lim.h
-  then
-    echo stdio_lim.h unchanged
-    rm -f stdio_lim.h.new
-  else
-    mv -f stdio_lim.h.new stdio_lim.h
-  fi
-else
-  # We remove the old one if we cannot generate the new one during
-  # configure.
-  rm -f stdio_lim.h
-fi
index f24af67f1e60bce882b2102fa047a3dd7a25f08b..18bb6dc4696cf4342d91740863b73cfa8a5b63b2 100644 (file)
@@ -83,27 +83,3 @@ fi
 if test -f $srcdir/elf/ldconfig.c; then
   has_ldconfig=yes
 fi
-
-# Generate stdio_lim.h
-default_fopen_max="`${CC-gcc} -E $srcdir/sysdeps/unix/sysv/linux/mk-stdiolim.c | grep DEFAULT_FOPEN_MAX | cut -f2 -d':'`"
-default_filename_max="`${CC-gcc} -E $srcdir/sysdeps/unix/sysv/linux/mk-stdiolim.c | grep DEFAULT_FILENAME_MAX | cut -f2 -d':'`"
-# We double check if "default_fopen_max" and "default_filename_max" are
-# ok or not.
-if test "x$default_fopen_max" != "xOPEN_MAX" \
-       -a "x$default_filename_max" != "xPATH_MAX"
-then
-  sed -e "s/DEFAULT_FOPEN_MAX/$default_fopen_max/" \
-       -e "s/DEFAULT_FILENAME_MAX/$default_filename_max/" \
-       $srcdir/sysdeps/unix/sysv/linux/stdio_lim.h.in > stdio_lim.h.new
-  if test -r stdio_lim.h.new && cmp -s stdio_lim.h.new stdio_lim.h
-  then
-    echo stdio_lim.h unchanged
-    rm -f stdio_lim.h.new
-  else
-    mv -f stdio_lim.h.new stdio_lim.h
-  fi
-else
-  # We remove the old one if we cannot generate the new one during
-  # configure.
-  rm -f stdio_lim.h
-fi
index a6864958184836f77c841bcd963733bfd0b52076..5a615efecbd1f6bb782870745c22031de4ff571e 100644 (file)
    it somewhere else.
 
    ...and this place is here.  */
-       .bss
-       .globl errno
-       .type errno,@object
-       .size errno,4
-errno: .zero 4
-       .globl _errno
-       .type _errno,@object
+       .comm errno,4,4
 _errno = errno /* This name is expected by hj's libc.so.5 startup code.  */
-       .text
 
 /* The following code is only used in the shared library when we
    compile the reentrant version.  Otherwise each system call defines
diff --git a/sysdeps/unix/sysv/linux/mk-stdiolim.c b/sysdeps/unix/sysv/linux/mk-stdiolim.c
deleted file mode 100644 (file)
index 23295f0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <linux/limits.h>
-
-DEFAULT_FOPEN_MAX:OPEN_MAX
-DEFAULT_FILENAME_MAX:PATH_MAX
index 27a951f169c5228a379a1caeec71b09f7ab393ab..4410266d710489a16b8b7f8df184a05662430566 100644 (file)
@@ -4,3 +4,5 @@ termbits.h
 kernel_stat.h
 kernel_termios.h
 sys/kernel_termios.h
+init-first.h
+syscall.h
index c31f140137c501d300632e15024f3dcd71a6efe0..d93c64865181e3c6046d2aaca718510c72420d68 100644 (file)
@@ -4,3 +4,4 @@ pipe.S
 fork.S
 kernel_stat.h
 kernel_sigaction.h
+init-first.h
index 44b33cb02c5c81794064e51177f6c00f4d0608d9..2d0752c1471ab332e6cb83ce9ce12c91ecfafc94 100644 (file)
@@ -244,7 +244,7 @@ __tzfile_read (const char *file)
 
   for (i = 0; i < num_isstd; ++i)
     {
-      char c = getc (f);
+      int c = getc (f);
       if (c == EOF)
        goto lose;
       types[i].isstd = c != 0;
@@ -254,7 +254,7 @@ __tzfile_read (const char *file)
 
   for (i = 0; i < num_isgmt; ++i)
     {
-      char c = getc (f);
+      int c = getc (f);
       if (c == EOF)
        goto lose;
       types[i].isgmt = c != 0;