aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BUGS7
-rw-r--r--ChangeLog98
-rw-r--r--bits/mathdef.h7
-rw-r--r--bits/stat.h20
-rw-r--r--bits/types.h2
-rw-r--r--include/sys/stat.h1
-rw-r--r--intl/loadmsgcat.c1
-rw-r--r--libio/fileops.c1
-rw-r--r--libio/oldfileops.c1
-rw-r--r--manual/arith.texi248
-rw-r--r--manual/math.texi8
-rw-r--r--manual/time.texi16
-rw-r--r--math/complex.h5
-rw-r--r--math/libm-test.c45
-rw-r--r--math/math.h69
-rw-r--r--string/strndup.c4
-rw-r--r--sunrpc/xcrypt.c2
-rw-r--r--sysdeps/alpha/fpu/bits/mathdef.h29
-rw-r--r--sysdeps/generic/bits/mathdef.h7
-rw-r--r--sysdeps/generic/bits/stat.h20
-rw-r--r--sysdeps/generic/bits/types.h2
-rw-r--r--sysdeps/i386/fpu/bits/mathdef.h12
-rw-r--r--sysdeps/ieee754/bits/nan.h23
-rw-r--r--sysdeps/m68k/bits/nan.h59
-rw-r--r--sysdeps/m68k/fpu/bits/mathdef.h7
-rw-r--r--sysdeps/posix/getcwd.c7
-rw-r--r--sysdeps/powerpc/bits/mathdef.h29
-rw-r--r--sysdeps/sparc/fpu/bits/mathdef.h29
-rw-r--r--sysdeps/unix/arm/sysdep.S6
-rw-r--r--sysdeps/unix/sysv/linux/arm/profil-counter.h2
-rw-r--r--sysdeps/unix/sysv/linux/arm/sysdep.h4
-rw-r--r--sysdeps/unix/sysv/linux/getcwd.c94
-rw-r--r--sysdeps/wordsize-32/inttypes.h2
-rw-r--r--sysdeps/wordsize-64/inttypes.h2
-rw-r--r--time/mktime.c164
-rw-r--r--time/offtime.c11
-rw-r--r--time/strftime.c6
-rw-r--r--time/time.h9
-rw-r--r--time/tzset.c9
39 files changed, 802 insertions, 266 deletions
diff --git a/BUGS b/BUGS
index 7585e7fe45..f4b60398ed 100644
--- a/BUGS
+++ b/BUGS
@@ -1,7 +1,7 @@
List of known bugs (certainly very incomplete)
----------------------------------------------
-Time-stamp: <1997-11-05T16:59:11+0100 drepper>
+Time-stamp: <1997-11-12T04:42:03+0100 drepper>
This following list contains those bugs which I'm aware of. Please
make sure that bugs you report are not listed here. If you can fix one
@@ -55,6 +55,11 @@ Severity: [ *] to [***]
checked for errors, but the whole file containing the same
category.
[PR libc/207]
+
+[ *] The libm-ieee `asin' function gives wrong results (at least for 0.5).
+
+[ *] _IO_getline can loop forever, at least with C++
+ [PR libc/332]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ulrich Drepper
drepper@cygnus.com
diff --git a/ChangeLog b/ChangeLog
index 877ae6c470..3d8704f99c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,101 @@
+1997-11-13 01:07 Ulrich Drepper <drepper@cygnus.com>
+
+ * manual/arith.texi: Update documentation according to most recent
+ ISO C 9X draft.
+ Document fma, fdim, fmin, and fmax.
+ * manual/math.texi: Allow multiple defitino of mul etc.
+
+ * math/complex.h (I): Define using _Complex_U not _Imaginary_I.
+
+ * math/libm-test.c: Add tests for fma.
+
+ * math/math.h: Describe DECIMAL_DIG macro. Pretty print.
+
+ * sysdeps/alpha/fpu/bits/mathdef.h: Define INFINITY as of type float.
+ Define DECIMAL_DIG.
+ * sysdeps/generic/bits/mathdef.h: Likewise.
+ * sysdeps/i386/bits/mathdef.h: Likewise.
+ * sysdeps/m68k/fpu/bits/mathdef.h: Likewise.
+ * sysdeps/powerpc/bits/mathdef.h: Likewise.
+ * sysdeps/sparc/fpu/bits/mathdef.h: Likewise.
+
+ * sysdeps/ieee754/bits/nan.h: Define NAN as of type float.
+ * sysdeps/m68k/bits/nan.h. Likewise. Remove NANF and NANL.
+
+1997-11-12 17:50 Ulrich Drepper <drepper@cygnus.com>
+
+ * sunrpc/xcrypt.c: Don't process #ident preprocessor instruction.
+ Reported by Philip Blundell <pb@nexus.co.uk>.
+
+ * string/strndup.c: Use K&R like definition.
+
+ * sysdeps/unix/sysv/linux/getcwd.c: New file. Use kernel information
+ instead of longish search for the name.
+ * sysdeps/posix/getcwd.c: Add support for use of the code as a
+ backup solution.
+
+1997-11-12 15:31 Philip Blundell <pb@nexus.co.uk>
+
+ * sysdeps/unix/sysv/linux/arm/sysdep.h (SYS_ify): Don't add
+ SWI_BASE in twice.
+
+ * sysdeps/unix/sysv/linux/arm/profil-counter.h (profil_counter):
+ Use correct name to access PC.
+
+ * sysdeps/unix/arm/sysdep.S: Include <bits/errno.h> not <errnos.h>.
+
+ * sysdeps/generic/bits/types.h: Add __ino64_t and __off64_t.
+ * sysdeps/generic/bits/stat.h: Add struct stat64.
+
+1997-11-12 16:08 Ulrich Drepper <drepper@cygnus.com>
+
+ * intl/loadmsgcat.c [_LIBC] (fstat): Don't define as __fstat since
+ now we have a definition as _fxstat.
+ * libio/fileops.c: Likewise.
+ * libio/oldfileops.c: Likewise.
+ Reported by Andreas Jaeger <aj@arthur.rhein-neckar.de>.
+
+1997-11-12 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * sysdeps/wordsize-32/inttypes.h (SIG_ATOMIC_MAX): Correct value.
+ * sysdeps/wordsize-64/inttypes.h (SIG_ATOMIC_MAX): Likewise.
+
+1997-11-11 Paul Eggert <eggert@twinsun.com>
+
+ Add overflow checking for 64-bit time_t and 32-bit int.
+
+ * time/time.h (__offtime): Now returns int.
+
+ * time/offtime.c (__offtime): Return nonzero if successful;
+ check for tm_year overflow.
+ (DIV): New macro.
+ (LEAPS_THRU_END_OF): Handle negative years correctly.
+
+ * time/tzset.c (__tz_convert): Return NULL if offtime cannot convert.
+
+ * time/mktime.c (ranged_convert): New function.
+ (ydhms_tm_diff): Return nonzero if TP is null.
+ (__mktime_internal): Handle cases correctly even if they are near or
+ past the limits of time_t values that can be broken down to struct tm.
+ (print_tm, check_result, main): Diagnose localtime failures.
+
+ * manual/time.texi: Document the fact that localtime returns 0
+ if the time can't be represented.
+
+1997-11-12 06:03 Ulrich Drepper <drepper@cygnus.com>
+
+ * time/strftime.c (memset_space, memset_zero): Use MEMPCPY, not
+ mempcpy. Patch by Ken'ichi Handa <handa@etl.go.jp>.
+
+ * manual/time.texi: Document %F and %f format for strftime.
+
+ * manual/arith.texi: Document copysign, nextafter and nan.
+
+1997-11-06 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * test-installation.pl: New file. Tests for some installation
+ problems.
+
1997-11-11 21:30 Ulrich Drepper <drepper@cygnus.com>
* include/sys/stat.h: Define stat, fstat, lstat and *64 variants
diff --git a/bits/mathdef.h b/bits/mathdef.h
index 93b60bd25f..15140997c0 100644
--- a/bits/mathdef.h
+++ b/bits/mathdef.h
@@ -31,10 +31,13 @@ typedef double double_t; /* `double' expressions are evaluated as
/* Signal that both types are `double'. */
#define FLT_EVAL_METHOD 1
-/* Define `INFINITY' as value of type `float_t'. */
-#define INFINITY HUGE_VAL
+/* Define `INFINITY' as value of type `float'. */
+#define INFINITY HUGE_VALF
/* The values returned by `ilogb' for 0 and NaN respectively. */
#define FP_ILOGB0 0x80000001
#define FP_ILOGBNAN 0x7fffffff
+
+/* Number of decimal digits for the `double' type. */
+#define DECIMAL_DIG 15
diff --git a/bits/stat.h b/bits/stat.h
index dab0cd00cb..3648fed738 100644
--- a/bits/stat.h
+++ b/bits/stat.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -70,5 +70,23 @@ struct stat
#define __S_IWRITE 0200 /* Write by owner. */
#define __S_IEXEC 0100 /* Execute by owner. */
+#ifdef __USE_LARGEFILE64
+struct stat64
+ {
+ __dev_t st_dev; /* Device. */
+
+ __ino64_t st_ino; /* File serial number. */
+ __mode_t st_mode; /* File mode. */
+ __nlink_t st_nlink; /* Link count. */
+ __uid_t st_uid; /* User ID of the file's owner. */
+ __gid_t st_gid; /* Group ID of the file's group.*/
+ __off64_t st_size; /* Size of file, in bytes. */
+
+ __time_t st_atime; /* Time of last access. */
+ __time_t st_mtime; /* Time of last modification. */
+ __time_t st_ctime; /* Time of last status change. */
+ };
+#endif
+
#endif /* bits/stat.h */
diff --git a/bits/types.h b/bits/types.h
index fdb36f0b54..51fadd196e 100644
--- a/bits/types.h
+++ b/bits/types.h
@@ -67,6 +67,8 @@ typedef __u_quad_t __fsid_t; /* Type of file system IDs. */
typedef long int __clock_t; /* Type of CPU usage counts. */
typedef long int __rlim_t; /* Type for resource measurement. */
typedef __quad_t __rlim64_t; /* Type for resource measurement (LFS). */
+typedef __quad_t __ino64_t; /* Type for file serial numbers. */
+typedef __loff_t __off64_t; /* Type of file izes and offsets. */
/* Everythin' else. */
typedef long int __daddr_t; /* The type of a disk address. */
diff --git a/include/sys/stat.h b/include/sys/stat.h
index be9bdd0c42..16950eb039 100644
--- a/include/sys/stat.h
+++ b/include/sys/stat.h
@@ -8,6 +8,7 @@
#define stat(fname, buf) __xstat (_STAT_VER, fname, buf)
#define fstat(fd, buf) __fxstat (_STAT_VER, fd, buf)
#define lstat(fname, buf) __lxstat (_STAT_VER, fname, buf)
+#define __lstat(fname, buf) __lxstat (_STAT_VER, fname, buf)
#define stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf)
#define fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf)
#define lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf)
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
index a67223ff7e..de0534269f 100644
--- a/intl/loadmsgcat.c
+++ b/intl/loadmsgcat.c
@@ -48,7 +48,6 @@
/* Rename the non ISO C functions. This is required by the standard
because some ISO C functions will require linking with this object
file and the name space must not be polluted. */
-# define fstat __fstat
# define open __open
# define close __close
# define read __read
diff --git a/libio/fileops.c b/libio/fileops.c
index ffc57f1d37..a0cc2f7d0e 100644
--- a/libio/fileops.c
+++ b/libio/fileops.c
@@ -45,7 +45,6 @@ extern int errno;
#ifdef _LIBC
# define open(Name, Flags, Prot) __open (Name, Flags, Prot)
# define close(FD) __close (FD)
-# define fstat(FD, Statbuf) __fstat (FD, Statbuf)
# define lseek(FD, Offset, Whence) __lseek (FD, Offset, Whence)
# define read(FD, Buf, NBytes) __read (FD, Buf, NBytes)
# define write(FD, Buf, NBytes) __write (FD, Buf, NBytes)
diff --git a/libio/oldfileops.c b/libio/oldfileops.c
index 71a2bc27a1..b426e88364 100644
--- a/libio/oldfileops.c
+++ b/libio/oldfileops.c
@@ -49,7 +49,6 @@ extern int errno;
#ifdef _LIBC
# define open(Name, Flags, Prot) __open (Name, Flags, Prot)
# define close(FD) __close (FD)
-# define fstat(FD, Statbuf) __fstat (FD, Statbuf)
# define lseek(FD, Offset, Whence) __lseek (FD, Offset, Whence)
# define read(FD, Buf, NBytes) __read (FD, Buf, NBytes)
# define write(FD, Buf, NBytes) __write (FD, Buf, NBytes)
diff --git a/manual/arith.texi b/manual/arith.texi
index d0863f98df..a5ba31dde8 100644
--- a/manual/arith.texi
+++ b/manual/arith.texi
@@ -1,3 +1,19 @@
+@c We need some definitions here.
+@ifclear cdor
+@ifhtml
+@set cdot ·
+@end ifhtml
+@iftex
+@set cdot @cdot
+@end iftex
+@ifclear cdot
+@set cdot x
+@end ifclear
+@macro mul
+@value{cdot}
+@end macro
+@end ifclear
+
@node Arithmetic, Date and Time, Mathematics, Top
@chapter Low-Level Arithmetic Functions
@@ -18,6 +34,8 @@ These functions are declared in the header files @file{math.h} and
* Normalization Functions:: Hacks for radix-2 representations.
* Rounding and Remainders:: Determining the integer and
fractional parts of a float.
+* Arithmetic on FP Values:: Setting and Modifying Single Bits of FP Values.
+* Special arithmetic on FPs:: Special Arithmetic on FPs.
* Integer Division:: Functions for performing integer
division.
* Parsing of Numbers:: Functions for ``reading'' numbers
@@ -40,7 +58,7 @@ these situations. There is a special value for infinity.
@comment math.h
@comment ISO
-@deftypevr Macro float_t INFINITY
+@deftypevr Macro float INFINITY
An expression representing the infinite value. @code{INFINITY} values are
produced by mathematical operations like @code{1.0 / 0.0}. It is
possible to continue the computations with this value since the basic
@@ -85,7 +103,7 @@ a NaN.
@comment math.h
@comment GNU
-@deftypevr Macro double NAN
+@deftypevr Macro float NAN
An expression representing a value which is ``not a number''. This
macro is a GNU extension, available only on machines that support ``not
a number'' values---that is to say, on all machines that support IEEE
@@ -106,15 +124,39 @@ imaginary part of the numbers. In mathematics one uses the symbol ``i''
to mark a number as imaginary. For convenience 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
+@deftypevr Macro {const float complex} _Complex_I
+This macro is a representation of the complex number ``@math{0+1i}''.
+Computing
+
+@smallexample
+_Complex_I * _Complex_I = -1
+@end smallexample
+
+@noindent
+leads to a real-valued result. If no @code{imaginary} types are
+available it is easiest to use this value to construct complex numbers
+from real values:
+
+@smallexample
+3.0 - _Complex_I * 4.0
+@end smallexample
+
+@noindent
+Without an optimizing compiler this is more expensive than the use of
+@code{_Imaginary_I} but with is better than nothing. You can avoid all
+the hassles if you use the @code{I} macro below if the name is not
+problem.
+
+@deftypevr Macro {const float imaginary} _Imaginary_I
+This macro is a representation of the value ``@math{1i}''. I.e., it is
+the value for which
@smallexample
_Imaginary_I * _Imaginary_I = -1
@end smallexample
@noindent
+The result is not of type @code{float imaginary} but instead @code{float}.
One can use it to easily construct complex number like in
@smallexample
@@ -129,11 +171,16 @@ imaginary part -4.0.
@noindent
A more intuitive approach is to use the following macro.
-@deftypevr Macro float_t I
+@deftypevr Macro {const float imaginary} 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}.
+
+If the implementation does not support the @code{imaginary} types
+@code{I} is defined as @code{_Complex_I} which is the second best
+solution. It still can be used in the same way but requires a most
+clever compiler to get the same results.
@end deftypevr
@@ -379,7 +426,7 @@ whose imaginary part is @var{y}, the absolute value is @w{@code{sqrt
@pindex math.h
@pindex stdlib.h
-Prototypes for @code{abs} and @code{labs} are in @file{stdlib.h};
+Prototypes for @code{abs}, @code{labs} and @code{llabs} are in @file{stdlib.h};
@code{fabs}, @code{fabsf} and @code{fabsl} are declared in @file{math.h};
@code{cabs}, @code{cabsf} and @code{cabsl} are declared in @file{complex.h}.
@@ -400,6 +447,15 @@ This is similar to @code{abs}, except that both the argument and result
are of type @code{long int} rather than @code{int}.
@end deftypefun
+@comment stdlib.h
+@comment ISO
+@deftypefun {long long int} llabs (long long int @var{number})
+This is similar to @code{abs}, except that both the argument and result
+are of type @code{long long int} rather than @code{int}.
+
+This function is defined in @w{ISO C 9X}.
+@end deftypefun
+
@comment math.h
@comment ISO
@deftypefun double fabs (double @var{number})
@@ -512,29 +568,6 @@ The value returned by @code{logb} is one less than the value that
@code{frexp} would store into @code{*@var{exponent}}.
@end deftypefun
-@comment math.h
-@comment ISO
-@deftypefun double copysign (double @var{value}, double @var{sign})
-@deftypefunx float copysignf (float @var{value}, float @var{sign})
-@deftypefunx {long double} copysignl (long double @var{value}, long double @var{sign})
-These functions return a value whose absolute value is the
-same as that of @var{value}, and whose sign matches that of @var{sign}.
-This function appears in BSD and was standardized in @w{ISO C 9X}.
-@end deftypefun
-
-@comment math.h
-@comment ISO
-@deftypefun int signbit (@emph{float-type} @var{x})
-@code{signbit} is a generic macro which can work on all floating-point
-types. It returns a nonzero value if the value of @var{x} has its sign
-bit set.
-
-This is not the same as @code{x < 0.0} since in some floating-point
-formats (e.g., @w{IEEE 754}) the zero value is optionally signed. The
-comparison @code{-0.0 < 0.0} will not be true while @code{signbit
-(-0.0)} will return a nonzero value.
-@end deftypefun
-
@node Rounding and Remainders
@section Rounding and Remainder Functions
@cindex rounding functions
@@ -652,6 +685,161 @@ If @var{denominator} is zero, @code{drem} fails and sets @code{errno} to
@end deftypefun