aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog104
-rw-r--r--Make-dist4
-rwxr-xr-xconfig.guess16
-rw-r--r--csu/initfini.c5
-rw-r--r--login/logwtmp.c59
-rw-r--r--login/utmp.h4
-rw-r--r--manual/arith.texi404
-rw-r--r--manual/math.texi840
-rw-r--r--manual/string.texi81
-rw-r--r--math/Makefile2
-rw-r--r--math/cmathcalls.h2
-rwxr-xr-xrellns-sh6
-rw-r--r--shadow/fgetspent_r.c5
-rw-r--r--stdio-common/Makefile3
-rw-r--r--stdlib/a64l.c6
-rw-r--r--stdlib/seed48_r.c20
-rw-r--r--stdlib/srand48_r.c16
-rw-r--r--stdlib/stdlib.h20
-rw-r--r--sysdeps/i386/fpu/__math.h2
-rw-r--r--sysdeps/libm-ieee754/e_scalb.c14
-rw-r--r--sysdeps/libm-ieee754/e_scalbl.c14
-rw-r--r--sysdeps/libm-ieee754/s_ctan.c2
-rw-r--r--sysdeps/libm-ieee754/s_ctanf.c2
-rw-r--r--sysdeps/libm-ieee754/s_ctanh.c2
-rw-r--r--sysdeps/libm-ieee754/s_ctanhf.c2
-rw-r--r--sysdeps/libm-ieee754/s_ctanhl.c2
-rw-r--r--sysdeps/libm-ieee754/s_ctanl.c4
-rw-r--r--sysdeps/libm-ieee754/s_nearbyintf.c9
-rw-r--r--sysdeps/libm-ieee754/s_nearbyintl.c10
-rw-r--r--sysdeps/m68k/fpu/__math.h76
-rw-r--r--sysdeps/m68k/fpu/e_pow.c49
-rw-r--r--sysdeps/m68k/fpu/s_sincos.c39
-rw-r--r--sysdeps/m68k/fpu/s_sincosf.c3
-rw-r--r--sysdeps/m68k/fpu/s_sincosl.c3
-rw-r--r--sysdeps/stub/shmat.c36
-rw-r--r--sysdeps/stub/shmdt.c32
36 files changed, 1665 insertions, 233 deletions
diff --git a/ChangeLog b/ChangeLog
index 2ffac36869..92ddf3420a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/Make-dist b/Make-dist
index afc7bb48a9..bacc8655a9 100644
--- a/Make-dist
+++ b/Make-dist
@@ -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