From 01cdeca0c96838a92d9f810f9c4ae59e8129db2a Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 31 Jan 1996 10:00:24 +0000 Subject: Tue Jan 30 13:32:05 1996 Roland McGrath * 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 * stdlib/strtod.c: Only negate exponent when there really is one. * stdio-common/vfscanf.c: Accept type modifiers on %n. Fix FP number parsing. --- ChangeLog | 20 ++++++++++++++++++++ dirent/scandir.c | 10 +++++++--- hurd/hurdinit.c | 26 +++++++++++++++++++++++++- manual/time.texi | 30 +++++++++++++++--------------- stdio-common/vfscanf.c | 47 +++++++++++++++++++++++++++++++---------------- stdlib/strtod.c | 8 ++++---- time/asia | 4 ++-- time/australasia | 19 +++++++++++++++---- time/backward | 23 +++++++++++++++-------- 9 files changed, 134 insertions(+), 53 deletions(-) diff --git a/ChangeLog b/ChangeLog index bae1893..dc72c71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +Tue Jan 30 13:32:05 1996 Roland McGrath + + * 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 + + * 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 * sysdeps/stub/msync.c (msync): Declare third arg FLAGS. diff --git a/dirent/scandir.c b/dirent/scandir.c index 65267af..e2ef63a 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 #include #include +#include #include 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 bed78b8..e7558c3 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 3f8eee4..eae3011 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 46f0658..48aa059 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 @@ -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 4104a98..1a2d1aa 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 7c1e6ac..c9cdc7e 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 f885ec1..8c92a5b 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 (August 18, 1994): +# From Paul Eggert (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 ff9784a..59fcffc 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 -- cgit v1.1