summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1996-01-31 10:00:24 +0000
committerRoland McGrath <roland@gnu.org>1996-01-31 10:00:24 +0000
commit01cdeca0c96838a92d9f810f9c4ae59e8129db2a (patch)
treec8f0ffd011deb496646771bf8fdf084e2c7281fb
parentf0b11018358086848fe3b141a9520e1c6128211b (diff)
downloadglibc-01cdeca0c96838a92d9f810f9c4ae59e8129db2a.tar.gz
Tue Jan 30 13:32:05 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>cvs/libc-960131
* dirent/scandir.c: Allocate dirents with correct size for name, and copy with correct size. * hurd/hurdinit.c [! PIC] (map0): New function, on _hurd_preinit_hook. * stdio-common/vfscanf.c (TYPEMOD): New macro of all type modifier flag bits. (__vfscanf): Fix checking of extra type modifiers. * time/asia, time/australasia, time/backward: Updated from ADO 96b. Tue Jan 30 12:17:26 1996 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de> * stdlib/strtod.c: Only negate exponent when there really is one. * stdio-common/vfscanf.c: Accept type modifiers on %n. Fix FP number parsing.
-rw-r--r--ChangeLog20
-rw-r--r--dirent/scandir.c10
-rw-r--r--hurd/hurdinit.c26
-rw-r--r--manual/time.texi30
-rw-r--r--stdio-common/vfscanf.c47
-rw-r--r--stdlib/strtod.c8
-rw-r--r--time/asia4
-rw-r--r--time/australasia19
-rw-r--r--time/backward23
9 files changed, 134 insertions, 53 deletions
diff --git a/ChangeLog b/ChangeLog
index bae189375b..dc72c714c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+Tue Jan 30 13:32:05 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * dirent/scandir.c: Allocate dirents with correct size for name, and
+ copy with correct size.
+
+ * hurd/hurdinit.c [! PIC] (map0): New function, on _hurd_preinit_hook.
+
+ * stdio-common/vfscanf.c (TYPEMOD): New macro of all type modifier
+ flag bits.
+ (__vfscanf): Fix checking of extra type modifiers.
+
+ * time/asia, time/australasia, time/backward: Updated from ADO 96b.
+
+Tue Jan 30 12:17:26 1996 Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>
+
+ * stdlib/strtod.c: Only negate exponent when there really is one.
+
+ * stdio-common/vfscanf.c: Accept type modifiers on %n.
+ Fix FP number parsing.
+
Mon Jan 29 21:53:40 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/stub/msync.c (msync): Declare third arg FLAGS.
diff --git a/dirent/scandir.c b/dirent/scandir.c
index 65267affb7..e2ef63a9ce 100644
--- a/dirent/scandir.c
+++ b/dirent/scandir.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -19,6 +19,7 @@ Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <dirent.h>
#include <stdlib.h>
+#include <string.h>
#include <errno.h>
int
@@ -44,6 +45,8 @@ DEFUN(scandir, (dir, namelist, select, cmp),
while ((d = readdir (dp)) != NULL)
if (select == NULL || (*select) (d))
{
+ size_t dsize;
+
if (i == vsize)
{
struct dirent **new;
@@ -61,11 +64,12 @@ DEFUN(scandir, (dir, namelist, select, cmp),
v = new;
}
- v[i] = (struct dirent *) malloc (sizeof (**v));
+ dsize = &d->d_name[d->d_namlen + 1] - (char *) d;
+ v[i] = (struct dirent *) malloc (dsize);
if (v[i] == NULL)
goto lose;
- *v[i++] = *d;
+ memcpy (v[i++], d, dsize);
}
if (errno != 0)
diff --git a/hurd/hurdinit.c b/hurd/hurdinit.c
index bed78b8321..e7558c3ef7 100644
--- a/hurd/hurdinit.c
+++ b/hurd/hurdinit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -197,3 +197,27 @@ _hurd_setproc (process_t procserver)
return 0;
}
+
+#ifndef PIC
+
+/* Map the page at address zero with no access allowed, so
+ dereferencing NULL will fault and no "anywhere" allocations
+ (e.g. the out of line memory containing the argument strings)
+ can be assigned address zero, which C says is not a valid pointer.
+
+ When dynamically linked, this will be done by the dynamic linker
+ before we run. */
+
+static void map0 (void) __attribute__ ((unused));
+text_set_element (_hurd_preinit_hook, map0);
+
+static void
+map0 (void)
+{
+ vm_address_t addr = 0;
+ __vm_map (__mach_task_self (),
+ &addr, __vm_page_size, 0, 0, MACH_PORT_NULL, 0, 1,
+ VM_PROT_NONE, VM_PROT_NONE, VM_INHERIT_COPY);
+}
+
+#endif
diff --git a/manual/time.texi b/manual/time.texi
index 3f8eee46a3..eae3011e4c 100644
--- a/manual/time.texi
+++ b/manual/time.texi
@@ -8,7 +8,7 @@ conversion between different time representations.
The time functions fall into three main categories:
@itemize @bullet
-@item
+@item
Functions for measuring elapsed CPU time are discussed in @ref{Processor
Time}.
@@ -102,7 +102,7 @@ by the @code{clock} function.
@comment time.h
@comment POSIX.1
@deftypevr Macro int CLK_TCK
-This is an obsolete name for @code{CLOCKS_PER_SEC}.
+This is an obsolete name for @code{CLOCKS_PER_SEC}.
@end deftypevr
@comment time.h
@@ -195,8 +195,8 @@ according to the Gregorian calendar.
There are three representations for date and time information:
@itemize @bullet
-@item
-@dfn{Calendar time} (the @code{time_t} data type) is a compact
+@item
+@dfn{Calendar time} (the @code{time_t} data type) is a compact
representation, typically giving the number of seconds elapsed since
some implementation-specific base time.
@cindex calendar time
@@ -224,7 +224,7 @@ date and time values.
* Broken-down Time:: Facilities for manipulating local time.
* Formatting Date and Time:: Converting times to strings.
* TZ Variable:: How users specify the time zone.
-* Time Zone Functions:: Functions to examine or specify the time zone.
+* Time Zone Functions:: Functions to examine or specify the time zone.
* Time Functions Example:: An example program showing use of some of
the time functions.
@end menu
@@ -272,7 +272,7 @@ where subtraction doesn't work directly.
@deftypefun time_t time (time_t *@var{result})
The @code{time} function returns the current time as a value of type
@code{time_t}. If the argument @var{result} is not a null pointer, the
-time value is also stored in @code{*@var{result}}. If the calendar
+time value is also stored in @code{*@var{result}}. If the calendar
time is not available, the value @w{@code{(time_t)(-1)}} is returned.
@end deftypefun
@@ -280,7 +280,7 @@ time is not available, the value @w{@code{(time_t)(-1)}} is returned.
@node High-Resolution Calendar
@subsection High-Resolution Calendar
-The @code{time_t} data type used to represent calendar times has a
+The @code{time_t} data type used to represent calendar times has a
resolution of only one second. Some applications need more precision.
So, the GNU C library also contains functions which are capable of
@@ -436,7 +436,7 @@ You do not have privilege to set the time.
@end deftypefun
@strong{Portability Note:} The @code{gettimeofday}, @code{settimeofday},
-and @code{adjtime} functions are derived from BSD.
+and @code{adjtime} functions are derived from BSD.
@node Broken-down Time
@@ -762,7 +762,7 @@ to get a Coordinated Universal Time value. It has syntax like
[@code{+}|@code{-}]@var{hh}[@code{:}@var{mm}[@code{:}@var{ss}]]. This
is positive if the local time zone is west of the Prime Meridian and
negative if it is east. The hour must be between @code{0} and
-@code{24}, and the minute and seconds between @code{0} and @code{59}.
+@code{23}, and the minute and seconds between @code{0} and @code{59}.
For example, here is how we would specify Eastern Standard Time, but
without any daylight savings time alternative:
@@ -948,19 +948,19 @@ timer; when the timer expires, the process receives a signal.
Each process has three independent interval timers available:
@itemize @bullet
-@item
+@item
A real-time timer that counts clock time. This timer sends a
@code{SIGALRM} signal to the process when it expires.
@cindex real-time timer
@cindex timer, real-time
-@item
+@item
A virtual timer that counts CPU time used by the process. This timer
sends a @code{SIGVTALRM} signal to the process when it expires.
@cindex virtual timer
@cindex timer, virtual
-@item
+@item
A profiling timer that counts both CPU time used by the process, and CPU
time spent in system calls on behalf of the process. This timer sends a
@code{SIGPROF} signal to the process when it expires.
@@ -1013,7 +1013,7 @@ Calendar}.
@comment sys/time.h
@comment BSD
@deftypefun int setitimer (int @var{which}, struct itimerval *@var{new}, struct itimerval *@var{old})
-The @code{setitimer} function sets the timer specified by @var{which}
+The @code{setitimer} function sets the timer specified by @var{which}
according to @var{new}. The @var{which} argument can have a value of
@code{ITIMER_REAL}, @code{ITIMER_VIRTUAL}, or @code{ITIMER_PROF}.
@@ -1128,7 +1128,7 @@ specify any descriptors to wait for.
@comment POSIX.1
@deftypefun {unsigned int} sleep (unsigned int @var{seconds})
The @code{sleep} function waits for @var{seconds} or until a signal
-is delivered, whichever happens first.
+is delivered, whichever happens first.
If @code{sleep} function returns because the requested time has
elapsed, it returns a value of zero. If it returns because of delivery
@@ -1149,7 +1149,7 @@ Instead, compute the time at which the program should stop waiting, and
keep trying to wait until that time. This won't be off by more than a
second. With just a little more work, you can use @code{select} and
make the waiting period quite accurate. (Of course, heavy system load
-can cause unavoidable additional delays---unless the machine is
+can cause unavoidable additional delays---unless the machine is
dedicated to one application, there is no way you can avoid this.)
On some systems, @code{sleep} can do strange things if your program uses
diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c
index 46f0658ef1..48aa059b9d 100644
--- a/stdio-common/vfscanf.c
+++ b/stdio-common/vfscanf.c
@@ -45,6 +45,8 @@ Cambridge, MA 02139, USA. */
# define GROUP 0x080 /* ': group numbers */
# define MALLOC 0x100 /* a: malloc strings */
+# define TYPEMOD (LONG|LONGDBL|SHORT)
+
#ifdef USE_IN_LIBIO
# include <libioP.h>
@@ -114,7 +116,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
register int flags; /* Modifiers for current format element. */
/* Status for reading F-P nums. */
- char got_dot, got_e;
+ char got_dot, got_e, negative;
/* If a [...] is a [^...]. */
char not_in;
/* Base for integral numbers. */
@@ -307,7 +309,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
{
case 'h':
/* int's are short int's. */
- if (flags & (LONG|LONGDBL))
+ if (flags & TYPEMOD)
/* Signal illegal format element. */
conv_error ();
flags |= SHORT;
@@ -328,12 +330,15 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
case 'q':
case 'L':
/* double's are long double's, and int's are long long int's. */
- if (flags & (LONG|SHORT))
+ if (flags & TYPEMOD)
/* Signal illegal format element. */
conv_error ();
flags |= LONGDBL;
break;
case 'a':
+ if (flags & TYPEMOD)
+ /* Signal illegal format element. */
+ conv_error ();
/* String conversions (%s, %[) take a `char **'
arg and fill it in with a malloc'd pointer. */
flags |= MALLOC;
@@ -363,8 +368,18 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
break;
case 'n': /* Answer number of assignments done. */
+ /* Corrigendum 1 to ISO C 1990 describes the allowed flags
+ with the 'n' conversion specifier. */
if (!(flags & SUPPRESS))
- *ARG (int *) = read_in - 1; /* Don't count the read-ahead. */
+ /* Don't count the read-ahead. */
+ if (flags & LONGDBL)
+ *ARG (long long int *) = read_in - 1;
+ else if (flags & LONG)
+ *ARG (long int *) = read_in - 1;
+ else if (flags & SHORT)
+ *ARG (short int *) = read_in - 1;
+ else
+ *ARG (int *) = read_in - 1;
break;
case 'c': /* Match characters. */
@@ -439,7 +454,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
{ \
/* We lose. Oh well. \
Terminate the string and stop converting, \
- so at least we don't skip any input. */ \
+ so at least we don't skip any input. */ \
(*strptr)[strsize] = '\0'; \
++done; \
conv_error (); \
@@ -512,7 +527,6 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
{
if (width > 0)
--width;
- ADDW ('0');
(void) inchar ();
@@ -612,13 +626,15 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
/* Check for a sign. */
if (c == '-' || c == '+')
{
- ADDW (c);
+ negative = c == '-';
if (inchar () == EOF)
/* EOF is only an input error before we read any chars. */
conv_error ();
if (width > 0)
--width;
}
+ else
+ negative = 0;
got_dot = got_e = 0;
do
@@ -628,7 +644,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
else if (got_e && wp[wpsize - 1] == 'e'
&& (c == '-' || c == '+'))
ADDW (c);
- else if (!got_e && tolower (c) == 'e')
+ else if (wpsize > 0 && !got_e && tolower (c) == 'e')
{
ADDW ('e');
got_e = got_dot = 1;
@@ -644,12 +660,10 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
break;
if (width > 0)
--width;
- } while (inchar () != EOF && width != 0);
+ }
+ while (inchar () != EOF && width != 0);
if (wpsize == 0)
- conv_error();
- if (wp[wpsize - 1] == '-' || wp[wpsize - 1] == '+'
- || wp[wpsize - 1] == 'e')
conv_error ();
/* Convert the number. */
@@ -658,19 +672,19 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
{
long double d = __strtold_internal (wp, &tw, flags & GROUP);
if (!(flags & SUPPRESS) && tw != wp)
- *ARG (long double *) = d;
+ *ARG (long double *) = negative ? -d : d;
}
else if (flags & LONG)
{
double d = __strtod_internal (wp, &tw, flags & GROUP);
if (!(flags & SUPPRESS) && tw != wp)
- *ARG (double *) = d;
+ *ARG (double *) = negative ? -d : d;
}
else
{
float d = __strtof_internal (wp, &tw, flags & GROUP);
if (!(flags & SUPPRESS) && tw != wp)
- *ARG (float *) = d;
+ *ARG (float *) = negative ? -d : d;
}
if (tw == wp)
@@ -738,7 +752,8 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
STRING_ADD_CHAR (c);
if (width > 0)
--width;
- } while (inchar () != EOF && width != 0);
+ }
+ while (inchar () != EOF && width != 0);
if (read_in == num.ul)
conv_error ();
diff --git a/stdlib/strtod.c b/stdlib/strtod.c
index 4104a98f0e..1a2d1aaf38 100644
--- a/stdlib/strtod.c
+++ b/stdlib/strtod.c
@@ -1,5 +1,5 @@
/* Read decimal floating point numbers.
-Copyright (C) 1995 Free Software Foundation, Inc.
+Copyright (C) 1995, 1996 Free Software Foundation, Inc.
Contributed by Ulrich Drepper.
This file is part of the GNU C Library.
@@ -545,12 +545,12 @@ INTERNAL (STRTOF) (nptr, endptr, group)
c = *++cp;
}
while (isdigit (c));
+
+ if (exp_negative)
+ exponent = -exponent;
}
else
cp = expp;
-
- if (exp_negative)
- exponent = -exponent;
}
/* We don't want to have to work with trailing zeroes after the radix. */
diff --git a/time/asia b/time/asia
index 7c1e6acc7a..c9cdc7ebad 100644
--- a/time/asia
+++ b/time/asia
@@ -1,4 +1,4 @@
-# @(#)asia 7.17
+# @(#)asia 7.18
# This data is by no means authoritative; if you think you know better,
# go ahead and edit the file (and please send any changes to
@@ -499,7 +499,7 @@ Rule Zion 1996 only - Sep 16 0:00 0:00 S
Rule Zion 1997 1998 - Oct Sun>=14 0:00 0:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Tel_Aviv 2:19:04 - LMT 1880
+Zone Asia/Jerusalem 2:20:56 - LMT 1880
2:21 - JMT 1918
2:00 Zion I%sT
diff --git a/time/australasia b/time/australasia
index f885ec16b2..8c92a5b27a 100644
--- a/time/australasia
+++ b/time/australasia
@@ -1,4 +1,4 @@
-# @(#)australasia 7.24
+# @(#)australasia 7.25
# This file also includes Pacific islands.
# Notes are at the end of this file
@@ -208,15 +208,21 @@ Zone Pacific/Johnston -10:00 - HST
# uninhabited
# Kiribati
+# From Paul Eggert (1996-01-22):
+# Today's _Wall Street Journal_ (page 1) reports that Kiribati
+# ``declared it the same day throught the country as of Jan. 1, 1995''
+# as part of the competition to be first into the 21st century.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
12:00 - NZST
Zone Pacific/Enderbury -11:24:20 - LMT 1901
-12:00 - KJT 1979 Oct
- -11:00 - SST
+ -11:00 - SST 1995
+ 13:00 - TGT
Zone Pacific/Kiritimati -10:29:20 - LMT 1901
-10:40 - LIT 1979 Oct # Line Is Time
- -10:00 - THT
+ -10:00 - THT 1995
+ 14:00 - KRT
# N Mariana Is
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -362,6 +368,10 @@ Zone Pacific/Fakaofo -11:24:56 - LMT 1901
-10:00 - THT
# Tonga
+# From Paul Eggert (1996-01-22):
+# Today's _Wall Street Journal_ (page 1) reports that ``Tonga has been plotting
+# to sneak ahead of [New Zealanders] by introducing daylight-saving time.''
+# But since Kiribati has moved the Date Line it's not clear what Tonga will do.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Tongatapu 12:19:20 - LMT 1901
12:20 - TMT 1968 Oct
@@ -403,7 +413,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# go ahead and edit the file (and please send any changes to
# tz@elsie.nci.nih.gov for general use in the future).
-# From Paul Eggert <eggert@twinsun.com> (August 18, 1994):
+# From Paul Eggert <eggert@twinsun.com> (1996-01-22);
# A good source for time zone historical data outside the U.S. is
# Thomas G. Shanks, The International Atlas (3rd edition),
# San Diego: ACS Publications, Inc. (1991).
@@ -436,6 +446,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# 12:00 NZST NZDT New Zealand
# 12:45 CHST CHDT Chatham*
# 13:00 TGT Tongatapu*
+# 14:00 KRT Kiritimati*
# -12:00 KJT Kwajalein (no longer used)*
# -11:00 SST Samoa
# -10:40 LIT Line Is (no longer used)*
diff --git a/time/backward b/time/backward
index ff9784a190..59fcffcdff 100644
--- a/time/backward
+++ b/time/backward
@@ -1,9 +1,15 @@
-# @(#)backward 7.9
+# @(#)backward 7.13
# This file provides links between current names for time zones
# and their old names. Many names changed in late 1993.
-Link Australia/Canberra Australia/ACT
+Link America/Adak America/Atka
+Link America/Indianapolis America/Fort_Wayne
+Link America/Indiana/Knox America/Knox_IN
+Link America/St_Thomas America/Virgin
+Link Asia/Jerusalem Asia/Tel_Aviv
+Link Australia/Sydney Australia/ACT
+Link Australia/Sydney Australia/Canberra
Link Australia/Lord_Howe Australia/LHI
Link Australia/Sydney Australia/NSW
Link Australia/Darwin Australia/North
@@ -40,7 +46,7 @@ Link Etc/Greenwich Greenwich
Link Asia/Hong_Kong Hongkong
Link Atlantic/Reykjavik Iceland
Link Asia/Tehran Iran
-Link Asia/Tel_Aviv Israel
+Link Asia/Jerusalem Israel
Link America/Jamaica Jamaica
Link Asia/Tokyo Japan
Link Pacific/Kwajalein Kwajalein
@@ -48,9 +54,10 @@ Link Africa/Tripoli Libya
Link America/Tijuana Mexico/BajaNorte
Link America/Mazatlan Mexico/BajaSur
Link America/Mexico_City Mexico/General
-Link America/Shiprock Navajo
+Link America/Denver Navajo
Link Pacific/Auckland NZ
Link Pacific/Chatham NZ-CHAT
+Link Pacific/Pago_Pago Pacific/Samoa
Link Asia/Shanghai PRC
Link Europe/Warsaw Poland
Link Europe/Lisbon Portugal
@@ -60,17 +67,17 @@ Link Asia/Singapore Singapore
Link Europe/Istanbul Turkey
Link Etc/UCT UCT
Link America/Anchorage US/Alaska
-Link America/Atka US/Aleutian
+Link America/Adak US/Aleutian
Link America/Phoenix US/Arizona
Link America/Chicago US/Central
-Link America/Fort_Wayne US/East-Indiana
+Link America/Indianapolis US/East-Indiana
Link America/New_York US/Eastern
Link Pacific/Honolulu US/Hawaii
-Link America/Knox_IN US/Indiana-Starke
+Link America/Indiana/Knox US/Indiana-Starke
Link America/Detroit US/Michigan
Link America/Denver US/Mountain
Link America/Los_Angeles US/Pacific
-Link Pacific/Samoa US/Samoa
+Link Pacific/Pago_Pago US/Samoa
Link Etc/UTC UTC
Link Etc/Universal Universal
Link Europe/Moscow W-SU