diff options
36 files changed, 1665 insertions, 233 deletions
@@ -1,3 +1,107 @@ +1997-04-21 13:25 Ulrich Drepper <drepper@cygnus.com> + + * manual/arith.texi: Add description for INFINITY, _Imaginary_I, + fpclassify & friends, and complex number operations. + Update various other math functions for ISO C 9X. + * manual/math.texi: Update various entries for ISO C 9X. + Add description for complex number functions. + Add description of rand48 function family. + * manual/string.h: Add description of a64l and l64a. + + * math/cmathcalls.h: Fix typo. + + * stdlib/a64l.c: Pretty printing. + + * stdlib/seed48_r.c: Also reset `a' and `c' to default values. + * stdlib/srand48_r.c: Likewise. + * stdlib/stdlib.h: Pretty printing. + + * sysdeps/i386/fpu/__math.h: Fix typo. + + * sysdeps/libm-ieee754/s_nearbyintf.c: Correctly name function. + * sysdeps/libm-ieee754/s_nearbyintl.c: Likewise. + +1997-04-19 22:16 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * sysdeps/m68k/fpu/e_pow.c: Rewrite handling of integral exponent. + +1997-04-18 19:34 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * sysdeps/m68k/fpu/__math.h: Define optimized versions of + isgreater, isgreaterequal, isless, islessequal, islessgreater, and + isunordered. + +1997-04-20 01:28 Richard Henderson <rth@tamu.edu> + + * rellns-sh: Handle files in the same directory correctly. + +1997-04-20 11:22 Ulrich Drepper <drepper@cygnus.com> + + * csu/initfini.c: Place ALIGN instruction at correct positions. + Patch by Richard Henderson <richard@twiddle.rth.home>. + +1997-04-19 17:12 Ulrich Drepper <drepper@cygnus.com> + + * Make-dist: Don't automatically ignore .c files if the .S or .s file + is ignored. + + * csu/Makefile (distribute): Add defs.awk. + +1997-04-19 15:39 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/stub/shmat.c: Update to XPG4.2 interface. + * sysdeps/stub/shmdt.c: Likewise. + Reported by Thomas Bushnell, n/BSG. + +1997-04-19 13:22 Ulrich Drepper <drepper@cygnus.com> + + * manual/stdio.texi: Add description of printf_size and + printf_size_info. Partly based on the documentation by Larry McVoy. + +1997-04-19 02:21 Ulrich Drepper <drepper@cygnus.com> + + * stdio-common/printf_size.c (printf_size): Correct values for + `units'. + Report by Larry McVoy <lm@neteng.engr.sgi.com>. + * stdio-common/tst-printfsz.c: New file. + * stdio-common/Makefile (tests): Add tst-printfsz.c. + (CFLAGS-tst-printfsz.c): Define to prevent warnings about format + strings. + +1997-04-18 15:48 Ulrich Drepper <drepper@cygnus.com> + + * login/utmp.h: Add prototype for updwtmp. + * login/logwtmp.c: Add new function updwtmp which allows to write + a complete record to the wtmp file. + Patch by Miquel van Smoorenburg <miquels@cistron.nl>. + +1997-04-17 17:57 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * math/Makefile (headers): Add mathbits.h. + +1997-04-16 21:20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * sysdeps/m68k/fpu/__math.h: Add inlined sincos{,l,f}. + * sysdeps/m68k/fpu/s_sincos.c: New file. + * sysdeps/m68k/fpu/s_sincosf.c: New file. + * sysdeps/m68k/fpu/s_sincosl.c: New file. + + * sysdeps/libm-ieee754/e_scalb.c: Use internal names of the + functions. + * sysdeps/libm-ieee754/e_scalbl.c: Likewise. + + * sysdeps/libm-ieee754/s_ctanh.c: Use isfinite instead of finite. + * sysdeps/libm-ieee754/s_ctanhf.c: Likewise. + * sysdeps/libm-ieee754/s_ctanhl.c: Likewise. + * sysdeps/libm-ieee754/s_ctan.c: Likewise. + * sysdeps/libm-ieee754/s_ctanf.c: Likewise. + * sysdeps/libm-ieee754/s_ctanl.c: Likewise. Fix type of `res'. + +1997-04-18 11:21 Ulrich Drepper <drepper@cygnus.com> + + * shadow/fgetspent_r.c: Set *RESULT to NULL before returning error. + Patch by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>. + 1997-04-18 02:18 Ulrich Drepper <drepper@cygnus.com> * csu/initfini.c: Rewrite by Zack Weinberg @@ -118,8 +118,8 @@ foo:=$(shell echo '+out=$(+out)' >&2; echo foofoo >&2) $(+sysdeps) foo:=$(shell echo 'made +tsrcs=$(+tsrcs)'>&2) foo:=$(shell echo generated='$(generated)' >&2) -generated := $(sort $(generated) $(generated:.S=.c) $(generated:.s=.c)) -foo:=$(shell echo now generated='$(generated)' >&2) +#generated := $(sort $(generated) $(generated:.S=.c) $(generated:.s=.c)) +#foo:=$(shell echo now generated='$(generated)' >&2) +tsrcs := $(sort $(filter-out $(generated),$(+tsrcs))) foo:=$(shell echo '+tsrcs=$(+tsrcs)'>&2) foo:=$(shell echo foobie, dammit! >&2) diff --git a/config.guess b/config.guess index 5ef19b5a18..b6f37c9919 100755 --- a/config.guess +++ b/config.guess @@ -70,17 +70,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - arc:OpenBSD:*:*) + arc64:OpenBSD:*:*) echo mips64el-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - laguna:OpenBSD:*:*) - echo mips64-unknown-openbsd${UNAME_RELEASE} + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) - echo mips64el-unknown-openbsd${UNAME_RELEASE} + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) - echo mips64el-unknown-openbsd${UNAME_RELEASE} + echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} diff --git a/csu/initfini.c b/csu/initfini.c index 96ee7bc2ae..6906c901c4 100644 --- a/csu/initfini.c +++ b/csu/initfini.c @@ -76,12 +76,12 @@ _init (void) if (__gmon_start__) __gmon_start__ (); + asm ("ALIGN"); asm("END_INIT"); /* Now the epilog. */ asm ("\n/*@_init_PROLOG_ENDS*/"); asm ("\n/*@_init_EPILOG_BEGINS*/"); SECTION(".init"); - asm ("ALIGN"); } asm ("END_INIT"); @@ -95,6 +95,7 @@ _fini (void) { /* End of the _fini prolog. */ + asm ("ALIGN"); asm ("END_FINI"); asm ("\n/*@_fini_PROLOG_ENDS*/"); @@ -109,7 +110,6 @@ _fini (void) /* Beginning of the _fini epilog. */ asm ("\n/*@_fini_EPILOG_BEGINS*/"); SECTION (".fini"); - asm ("ALIGN"); } asm ("END_FINI"); @@ -117,6 +117,5 @@ asm ("END_FINI"); is shared between both crt files. */ asm ("\n/*@_fini_EPILOG_ENDS*/"); asm ("\n/*@TRAILER_BEGINS*/"); -asm ("ALIGN"); /* End of file. */ diff --git a/login/logwtmp.c b/login/logwtmp.c index 876388323f..b6af813e73 100644 --- a/login/logwtmp.c +++ b/login/logwtmp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -25,38 +25,17 @@ #include <sys/stat.h> void -logwtmp (const char *line, const char *name, const char *host) +updwtmp (const char *wtmp_file, const struct utmp *ut) { - struct utmp ut; struct stat st; size_t written; int fd; /* Open WTMP file. */ - fd = __open (_PATH_WTMP, O_WRONLY | O_APPEND); + fd = __open (wtmp_file, O_WRONLY | O_APPEND); if (fd < 0) return; - /* Set information in new entry. */ - memset (&ut, 0, sizeof (ut)); -#if _HAVE_UT_PID - 0 - ut.ut_pid = getpid (); -#endif -#if _HAVE_UT_TYPE - 0 - ut.ut_type = name[0] ? USER_PROCESS : DEAD_PROCESS; -#endif - strncpy (ut.ut_line, line, sizeof ut.ut_line); - strncpy (ut.ut_name, name, sizeof ut.ut_name); -#if _HAVE_UT_HOST - 0 - strncpy (ut.ut_host, host, sizeof ut.ut_host); -#endif - -#if _HAVE_UT_TV - 0 - __gettimeofday (&ut.ut_tv, NULL); -#else - time (&ut.ut_time); -#endif - /* Try to lock the file. */ if (__flock (fd, LOCK_EX | LOCK_NB) < 0 && errno != ENOSYS) { @@ -74,8 +53,8 @@ logwtmp (const char *line, const char *name, const char *host) /* 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. */ - written = __write (fd, &ut, sizeof (ut)); - if (written > 0 && written != sizeof (ut)) + written = __write (fd, ut, sizeof (struct utmp)); + if (written > 0 && written != sizeof (struct utmp)) ftruncate (fd, st.st_size); done: @@ -85,3 +64,31 @@ done: /* Close WTMP file. */ __close (fd); } + +void +logwtmp (const char *line, const char *name, const char *host) +{ + struct utmp ut; + + /* Set information in new entry. */ + memset (&ut, 0, sizeof (ut)); +#if _HAVE_UT_PID - 0 + ut.ut_pid = getpid (); +#endif +#if _HAVE_UT_TYPE - 0 + ut.ut_type = name[0] ? USER_PROCESS : DEAD_PROCESS; +#endif + strncpy (ut.ut_line, line, sizeof ut.ut_line); + strncpy (ut.ut_name, name, sizeof ut.ut_name); +#if _HAVE_UT_HOST - 0 + strncpy (ut.ut_host, host, sizeof ut.ut_host); +#endif + +#if _HAVE_UT_TV - 0 + __gettimeofday (&ut.ut_tv, NULL); +#else + time (&ut.ut_time); +#endif + + updwtmp(_PATH_WTMP, &ut); +} diff --git a/login/utmp.h b/login/utmp.h index 2e87070537..9be0ec5b06 100644 --- a/login/utmp.h +++ b/login/utmp.h @@ -49,6 +49,10 @@ extern void login __P ((__const struct utmp *__entry)); /* Write the utmp entry to say the user on UT_LINE has logged out. */ extern int logout __P ((__const char *__ut_line)); +/* Append the given entry to a wtmp file. */ +extern void updwtmp __P ((__const char *__wtmp_file, + __const struct utmp *__entry)); + /* Append to wtmp an entry for the current time and the given info. */ extern void logwtmp __P ((__const char *__ut_line, __const char *__ut_name, __const char *__ut_host)); diff --git a/manual/arith.texi b/manual/arith.texi index d8703ea6c1..86fb2667a0 100644 --- a/manual/arith.texi +++ b/manual/arith.texi @@ -3,12 +3,17 @@ This chapter contains information about functions for doing basic arithmetic operations, such as splitting a float into its integer and -fractional parts. These functions are declared in the header file -@file{math.h}. +fractional parts or retrieving the imaginary part of a complex value. +These functions are declared in the header files @file{math.h} and +@file{complex.h}. @menu +* Infinity:: What is Infinity and how to test for it. * Not a Number:: Making NaNs and testing for NaNs. +* Imaginary Unit:: Constructing complex Numbers. * Predicates on Floats:: Testing for infinity and for NaNs. +* Floating-Point Classes:: Classifiy floating-point numbers. +* Operations on Complex:: Projections, Conjugates, and Decomposing. * Absolute Value:: Absolute value functions. * Normalization Functions:: Hacks for radix-2 representations. * Rounding and Remainders:: Determining the integer and @@ -19,6 +24,44 @@ fractional parts. These functions are declared in the header file from strings. @end menu +@node Infinity +@section Infinity Values +@cindex Infinity +@cindex IEEE floating point + +Mathematical operations easily can produce as the result values which +are not representable by the floating-point format. The functions in +the mathematics library also have this problem. The situation is +generally solved by raising an overflow exception and by returning a +huge value. + +The @w{IEEE 754} floating-point defines a special value to be used in +these situations. There is a special value for infinity. + +@comment math.h +@comment ISO +@deftypevr Macro float_t INFINITY +A expression representing the inifite value. @code{INFINITY} values are +produce by mathematical operations like @code{1.0 / 0.0}. It is +possible to continue the computations with this value since the basic +operations as well as the mathematical library functions are prepared to +handle values like this. + +Beside @code{INFINITY} also the value @code{-INIFITY} is representable +and it is handled differently if needed. It is possible to test a +variables for infinite value using a simple comparison but the +recommended way is to use the the @code{isinf} function. + +This macro was introduced in the @w{ISO C 9X} standard. +@end deftypevr + +@vindex HUGE_VAL +The macros @code{HUGE_VAL}, @code{HUGE_VALF} and @code{HUGE_VALL} are +defined in a similar way but they are not required to represent the +infinite value, only a very large value (@pxref{Domain and Range Errors}). +If actually infinity is wanted, @code{INFINITY} should be used. + + @node Not a Number @section ``Not a Number'' Values @cindex NaN @@ -54,6 +97,46 @@ such as by defining @code{_GNU_SOURCE}, and then you must include @file{math.h}.) @end deftypevr +@node Imaginary Unit +@section Constructing complex Numbers + +@pindex complex.h +To construct complex numbers it is necessary have a way to express the +imaginary part of the numbers. In mathematics one uses the symbol ``i'' +to mark a number as imaginary. For convenienve the @file{complex.h} +header defines two macros which allow to use a similar easy notation. + +@deftypevr Macro float_t _Imaginary_I +This macro is a (compiler specific) representation of the value ``1i''. +I.e., it is the value for which + +@smallexample +_Imaginary_I * _Imaginary_I = -1 +@end smallexample + +@noindent +One can use it to easily construct complex number like in + +@smallexample +3.0 - _Imaginary_I * 4.0 +@end smallexample + +@noindent +which results in the complex number with a real part of 3.0 and a +imaginary part -4.0. +@end deftypevr + +@noindent +A more intuitive approach is to use the following macro. + +@deftypevr Macro float_t I +This macro has exactly the same value as @code{_Imaginary_I}. The +problem is that the name @code{I} very easily can clash with macros or +variables in programs and so it might be a good idea to avoid this name +and stay at the safe side by using @code{_Imaginary_I}. +@end deftypevr + + @node Predicates on Floats @section Predicates on Floats @@ -66,6 +149,10 @@ functions, and thus are available if you define @code{_BSD_SOURCE} or @comment math.h @comment BSD @deftypefun int isinf (double @var{x}) +@end deftypefun +@deftypefun int isinff (float @var{x}) +@end deftypefun +@deftypefun int isinfl (long double @var{x}) This function returns @code{-1} if @var{x} represents negative infinity, @code{1} if @var{x} represents positive infinity, and @code{0} otherwise. @end deftypefun @@ -73,6 +160,10 @@ This function returns @code{-1} if @var{x} represents negative infinity, @comment math.h @comment BSD @deftypefun int isnan (double @var{x}) +@end deftypefun +@deftypefun int isnanf (float @var{x}) +@end deftypefun +@deftypefun int isnanl (long double @var{x}) This function returns a nonzero value if @var{x} is a ``not a number'' value, and zero otherwise. (You can just as well use @code{@var{x} != @var{x}} to get the same result). @@ -81,6 +172,10 @@ value, and zero otherwise. (You can just as well use @code{@var{x} != @comment math.h @comment BSD @deftypefun int finite (double @var{x}) +@end deftypefun +@deftypefun int finitef (float @var{x}) +@end deftypefun +@deftypefun int finitel (long double @var{x}) This function returns a nonzero value if @var{x} is finite or a ``not a number'' value, and zero otherwise. @end deftypefun @@ -103,6 +198,189 @@ does not fit the @w{ISO C} specification. @strong{Portability Note:} The functions listed in this section are BSD extensions. +@node Floating-Point Classes |
