diff options
72 files changed, 1530 insertions, 799 deletions
@@ -1,3 +1,195 @@ +1998-01-22 00:55 Ulrich Drepper <drepper@happy.cygnus.com> + + * libc.map: Add __libc_uid, __libc_pid, __syscall_rt_sigqueueinfo, + __pread64, __pwrite64, and __getpid. + + * libc/rt/aio_misc.c: Use pread and pwrite instead of __ protected + versions. + +1998-01-06 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * sysdeps/unix/sysv/linux/alpha/syscalls.list: Define the + cancelable socket functions as __libc_xxx with __xxx as weak + alias. + * sysdeps/unix/sysv/linux/mips/syscalls.list: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list: Likewise. + + * sysdeps/unix/sysv/linux/m68k/socket.S: Allow __socket to be + redefined. + * sysdeps/unix/sysv/linux/i386/socket.S: Likewise. + * sysdeps/unix/sysv/linux/arm/socket.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/socket.S: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/socket.S: Likewise. + + * sysdeps/unix/sysv/linux/accept.S: Make __libc_xxx the main name + and __xxx a weak alias. + * sysdeps/unix/sysv/linux/connect.S: Likewise. + * sysdeps/unix/sysv/linux/recv.S: Likewise. + * sysdeps/unix/sysv/linux/recvfrom.S: Likewise. + * sysdeps/unix/sysv/linux/recvmsg.S: Likewise. + * sysdeps/unix/sysv/linux/send.S: Likewise. + * sysdeps/unix/sysv/linux/sendmsg.S: Likewise. + * sysdeps/unix/sysv/linux/sendto.S: Likewise. + +1998-01-21 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * locale/langinfo.h: Add defines. + + * dirent/dirent.h: Add defines for DT_*, check also for + _DIRENT_HAVE_D_TYPE. + Suggested by Roland McGrath. + +1998-01-16 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * sysdeps/unix/sysv/linux/netinet/ip_fw.h: + Update from Linux 2.1.73+79. + + * README.template: Update information about possible + configurations. + + * manual/mbyte.texi (Wide String Conversion): Fix declaration of + wcstombs. Pointed out by Jochen Voss <voss@mathematik.uni-kl.de>. + [PR libc/417]. + + * manual/time.texi (Priority): Correct description of + PRIO_MAX. Pointed out by Jochen Voss <voss@mathematik.uni-kl.de>. + [PR libc/416]. + +11998-01-21 21:34 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/alpha/fpu/bits/mathdef.h: Add definition of FP_ILOGB0 and + FP_ILOGNAN. Patch by a sun <asun@zoology.washington.edu>. + +1998-01-21 17:53 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/generic/_strerror.c: Handle BUFLEN == 0. Reported by + Andreas Jaeger. + +1998-01-20 18:13 Ulrich Drepper <drepper@cygnus.com> + + * locale/programs/ld-collate.c: Little optimizations. + + * stdio-common/xbug.c: Unset LD_LIBRRARY_PATH variable. + + * string/Makefile (tests): Add tst-inlcall. + * string/tst-inlcall.c: New file. + + * string/strsignal.c: Add support for real-time signals. + + * sysdeps/generic/_strerror.c: Fix Handling of unknown error in + presense of small buffer. + + * sysdeps/i386/bits/string.h: Define _HAVE_STRING_ARCH_* macros. + + * sysdeps/i386/i486/bits/string.h: Correct strrchr implementation + for i686. + + * sysdeps/unix/sysv/linux/siglist.c: Change length of arrays to + _NSIG + 1. + +1998-01-02 15:10 Matthias Urlichs <urlichs@noris.de> + + * Rules: Add explicit rule for dummy.o; at least one library needs + it and it isn't autogenerated by the default rules. + +1997-12-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * math/libm-test.c: Tweak epsilons. + +1997-12-31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * math/test-fenv.c (feenv_nomask_test): Avoid dumping core in the + child. + (feenv_mask_test): Likewise. + +1998-01-01 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * Makeconfig: Don't export CPPFLAGS. + +1998-01-01 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * sunrpc/rpc_main.c (parseargs): Use perror to print error + message. + +1998-01-15 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * nss/nss_db/db-alias.c (_nss_db_getaliasent_r): Don't include + terminating null in key size. + +1998-01-13 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * nss/nss_files/files-service.c: Fix allocation size to include + length of PROTO. + + * nss/nss_db/db-XXX.c (lookup): Always set errno and h_errno if + applicable. Fix return value and error checking. + (CONCAT(_nss_db_get,ENTNAME_r)): Loop around to skip over + unparsable lines. + (DB_LOOKUP): Allocate space for terminating null byte. + + * nss/db-Makefile ($(VAR_DB)/passwd.db): Don't handle duplicate + uids specially. + + * db2/makedb.c (process_input): Continue processing if a duplicate + key is encountered. + +1998-01-19 15:20 Ulrich Drepper <drepper@cygnus.com> + + * time/tzfile.h: Updated from tzcode1998b. + * time/zdump.c: Likewise. + * time/zic.c: Likewise. + * time/africa: Update from tzdata1998b. + * time/antarctica: Likewise. + * time/asia: Likewise. + * time/australasia: Likewise. + * time/etcetera: Likewise. + * time/europe: Likewise. + * time/leapseconds: Likewise. + * time/northamerica: Likewise. + * time/southamerica: Likewise. + +1998-01-12 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * nss/nss_files/files-alias.c (get_next_alias): Do mail alias + lookups ignoring case. + * nss/nss_files/files-network.c: Do network lookups ignoring + case. + * nss/nss_files/files-hosts.c: Do hostname lookups ignoring + case. + * nss/nss_files/files-parse.c (LOOKUP_NAME_CASE): New macro for + case insensitive comparing. + Patches by Cristian Gafton <gafton@redhat.com>. + +1998-01-09 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * sysdeps/unix/sysv/linux/net/if.h: Add IFF_*defines. Suggested + by Roland McGrath. [PR libc/395] + +1998-01-08 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * manual/arith.texi (Parsing of Integers): Correct description of + strtoul. Pointed out by Scott Snyder <snyder@fnald0.fnal.gov>. + [PR libc/396] + +1997-12-30 14:14 Matthias Urlichs <urlichs@noris.de> + + * misc/lsearch.c (lsearch): Return a pointer to the new element + if one was "allocated". + +1997-12-26 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * string/strsignal.c: NSIG is not a valid index into + _sys_siglist. Don't zap the last character of the "Unknown + signal" message. + +1998-01-19 15:08 Ulrich Drepper <drepper@cygnus.com> + + * locale/programs/charmap.c (parse_charmap): Correct parsing of + ellipsis expressions. + + * locale/programs/charset.c (insert_char): Correctly insert value + of eliipsis expression. + 1997-12-28 15:08 Ulrich Drepper <drepper@cygnus.com> * sysdeps/powerpc/__longjmp.S: Define _SETJMP_H before including @@ -200,6 +200,22 @@ you first delete config.cache. some problems of this kind. The setting of CFLAGS is checked at the very beginning and if it is not usable `configure' will bark. +?? Why do I get messages about missing thread functions when I use + the librt? I don't even use threads. + +{UD} In this case you probably mixed up your installation of the libc. +The librt internally uses threads and it has implicit references to +the thread library. Normally these references are satisfied +automatically but if the thread library belonging to the librt is not +in the expected place one has to specify this place. When using GNU +ld it works like this: + + gcc -o foo foo.c -Wl,-rpath-link=/some/other/dir -lrt + +The `/some/other/dir' should contain the matching thread library and +`ld' will use the given path to find the implicitly referenced library +while not disturbing any other link path order. + ?? What's the problem with configure --enable-omitfp? {AJ} When --enable-omitfp is set the libraries are built without frame diff --git a/Makeconfig b/Makeconfig index 1f0f96e8a3..3832992474 100644 --- a/Makeconfig +++ b/Makeconfig @@ -121,6 +121,9 @@ $(common-objpfx)config.status: $(..)version.h $(..)configure \ echo Try \`configure --help\' for more details. >&2; \ exit 1; fi +# We don't want CPPFLAGS to be exported to the command running configure. +unexport CPPFLAGS + # Get the user's configuration parameters. ifneq ($(wildcard $(..)configparms),) include $(..)configparms @@ -40,7 +40,7 @@ Since no one has volunteered to test and fix the above configurations, these are not supported at the moment. It's expected that these don't work anymore. Porting the library is not hard. If you are interested in doing a port, please contact the glibc maintainers by sending -electronic mail to <bug-glibc@prep.ai.mit.edu>. +electronic mail to <bug-glibc@gnu.org>. The GNU C library now includes Michael Glad's Ultra Fast Crypt, which provides the Unix `crypt' function, plus some other entry points. @@ -82,8 +82,8 @@ facilities you want it to make available. We prefer to get bug reports sent using the `glibcbug' shell script which is installed together with the rest of the GNU libc to <bugs@gnu.org>. Simply run this shell script and fill in the information. Nevertheless -you can still send bug reports to <bug-glibc@prep.ai.mit.edu> as normal -electronic mails. +you can still send bug reports to <bug-glibc@gnu.irg> as normal electronic +mails. The GNU C Library is free software. See the file COPYING.LIB for copying conditions. diff --git a/README.template b/README.template index fbea883444..25bfd8cb41 100644 --- a/README.template +++ b/README.template @@ -5,10 +5,13 @@ Some bugs surely remain. As of this release, the GNU C library is known to run on the following configurations: - i[3456]86-*-gnu GNU Hurd - i[3456]86-*-linux-gnu Linux-2.0 on Intel - m68k-*-linux-gnu Linux-2.0 on Motorola 680x0 - alpha-*-linux-gnu Linux-2.0 on DEC Alpha + *-*-gnu GNU Hurd + i[3456]86-*-linux-gnu Linux-2.x on Intel + m68k-*-linux-gnu Linux-2.x on Motorola 680x0 + alpha-*-linux-gnu Linux-2.x on DEC Alpha + powerpc-*-linux-gnu Linux and MkLinux on PowerPC systems + sparc-*-linux-gnu Linux-2.x on SPARC + sparc64-*-linux-gnu Linux-2.x on UltraSPARC Former releases of this library (version 1.09.1 and perhaps earlier @@ -82,7 +85,7 @@ facilities you want it to make available. We prefer to get bug reports sent using the `glibcbug' shell script which is installed together with the rest of the GNU libc to <bugs@gnu.org>. Simply run this shell script and fill in the information. Nevertheless -you can still send bug reports to <bug-glibc@gnu.irg> as normal electronic +you can still send bug reports to <bug-glibc@gnu.org> as normal electronic mails. The GNU C Library is free software. See the file COPYING.LIB for copying @@ -70,6 +70,8 @@ dep-dummy-lib = $(common-objpfx)dummy.o define make-dummy-lib $(AR) cr$(verbose) $@ $< endef + +$(common-objpfx)dummy.o: $(common-objpfx)dummy.c; $(compile-command.c) $(common-objpfx)dummy.c: rm -f $@ echo 'void __dummy__ (void) { }' > $@ @@ -698,7 +698,7 @@ if test "${enable_add_ons+set}" = set; then add_ons=`echo */configure | sed -e 's!/configure!!g'` else add_ons=`echo $srcdir/*/configure | \ - sed -e "s!^$srcdir/!!g" -e 's!/configure!!g'` + sed -e "s!$srcdir/!!g" -e 's!/configure!!g'` fi;; *) add_ons=`echo "$enableval" | sed 's/,/ /g'`;; esac diff --git a/db2/makedb.c b/db2/makedb.c index d1259ea18c..6c9d0a1234 100644 --- a/db2/makedb.c +++ b/db2/makedb.c @@ -1,5 +1,5 @@ /* Create simple DB database from textual input. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -316,11 +316,12 @@ process_input (input, inname, output, to_lowercase, be_quiet) gettext ("duplicate key")); /* This is no real error. Just give a warning. */ status = 0; + continue; } else error (0, errno, gettext ("while writing database file")); - status = status ? EXIT_FAILURE : EXIT_SUCCESS; + status = EXIT_FAILURE; clearerr (input); break; diff --git a/dirent/dirent.h b/dirent/dirent.h index d7e8a543b9..01c44a2971 100644 --- a/dirent/dirent.h +++ b/dirent/dirent.h @@ -83,13 +83,21 @@ __BEGIN_DECLS enum { DT_UNKNOWN = 0, +# define DT_UNKNOWN DT_UNKNOWN DT_FIFO = 1, +# define DT_FIFO DT_FIFO DT_CHR = 2, +# define DT_CHR DT_CHR DT_DIR = 4, +# define DT_DIR DT_DIR DT_BLK = 6, +# define DT_BLK DT_BLK DT_REG = 8, +# define DT_REG DT_REG DT_LNK = 10, +# define DT_LNK DT_LNK DT_SOCK = 12 +# define DT_SOCK DT_SOCK }; /* Convert between stat structure types and directory types. */ diff --git a/iconvdata/koi8-r.h b/iconvdata/koi8-r.h index f6b887f0c7..fe83b72514 100644 --- a/iconvdata/koi8-r.h +++ b/iconvdata/koi8-r.h @@ -256,7 +256,7 @@ static const wchar_t to_ucs4[256] = { [0xFF] = 0x042A, }; static struct gap from_idx[] = { - { start: 000000, end: 0x007f, idx: 0 }, + { start: 0x0000, end: 0x007f, idx: 0 }, { start: 0x00a0, end: 0x00a0, idx: -32 }, { start: 0x00a9, end: 0x00a9, idx: -40 }, { start: 0x00b0, end: 0x00b7, idx: -46 }, diff --git a/iconvdata/latin-greek-1.h b/iconvdata/latin-greek-1.h index e17b6ebfc3..ed699bf6a8 100644 --- a/iconvdata/latin-greek-1.h +++ b/iconvdata/latin-greek-1.h @@ -128,7 +128,7 @@ static const wchar_t to_ucs4[256] = { [0x7F] = 0x007F, }; static struct gap from_idx[] = { - { start: 000000, end: 0x007f, idx: 0 }, + { start: 0x0000, end: 0x007f, idx: 0 }, { start: 0x00a4, end: 0x00a4, idx: -36 }, { start: 0x0393, end: 0x03a9, idx: -786 }, { start: 0x203e, end: 0x203e, idx: -8102 }, diff --git a/iconvdata/latin-greek.h b/iconvdata/latin-greek.h index 6bc9a338de..73d93c4957 100644 --- a/iconvdata/latin-greek.h +++ b/iconvdata/latin-greek.h @@ -127,7 +127,7 @@ static const wchar_t to_ucs4[256] = { [0x7F] = 0x007F, }; static struct gap from_idx[] = { - { start: 000000, end: 0x0060, idx: 0 }, + { start: 0x0000, end: 0x0060, idx: 0 }, { start: 0x007b, end: 0x007f, idx: -26 }, { start: 0x00a3, end: 0x00a8, idx: -61 }, { start: 0x00b7, end: 0x00b7, idx: -75 }, @@ -15,6 +15,8 @@ GLIBC_2.0 { _IO_list_all; _IO_stderr_; _IO_stdin_; _IO_stdout_; + __libc_pid; __libc_uid; + # This is for ix86 only. _fp_hw; @@ -94,7 +96,7 @@ GLIBC_2.0 { _IO_fopen; _IO_fclose; _IO_file_open; __vsscanf; __vfscanf; __vsnprintf; _rpc_dtablesize; _null_auth; _seterr_reply; - __res_randomid; + __res_randomid; __syscall_rt_sigqueueinfo; __getpid; __pread64; __pwrite64; # Exception handling support functions from libgcc __register_frame; __register_frame_table; __deregister_frame; diff --git a/locale/langinfo.h b/locale/langinfo.h index 8cdb104c0d..10e8dd249e 100644 --- a/locale/langinfo.h +++ b/locale/langinfo.h @@ -46,64 +46,114 @@ enum /* Abbreviated days of the week. */ ABDAY_1 = _NL_ITEM (LC_TIME, 0), /* Sun */ +#define ABDAY_1 ABDAY_1 ABDAY_2, +#define ABDAY_2 ABDAY_2 ABDAY_3, +#define ABDAY_3 ABDAY_3 ABDAY_4, +#define ABDAY_4 ABDAY_4 ABDAY_5, +#define ABDAY_5 ABDAY_5 ABDAY_6, +#define ABDAY_6 ABDAY_6 ABDAY_7, +#define ABDAY_7 ABDAY_7 /* Long-named days of the week. */ DAY_1, /* Sunday */ +#define DAY_1 DAY_1 DAY_2, /* Monday */ +#define DAY_2 DAY_2 DAY_3, /* Tuesday */ +#define DAY_3 DAY_3 DAY_4, /* Wednesday */ +#define DAY_4 DAY_4 DAY_5, /* Thursday */ +#define DAY_5 DAY_5 DAY_6, /* Friday */ +#define DAY_6 DAY_6 DAY_7, /* Saturday */ +#define DAY_7 DAY_7 /* Abbreviated month names. */ ABMON_1, /* Jan */ +#define ABMON_1 ABMON_1 ABMON_2, +#define ABMON_2 ABMON_2 ABMON_3, +#define ABMON_3 ABMON_3 ABMON_4, +#define ABMON_4 ABMON_4 ABMON_5, +#define ABMON_5 ABMON_5 ABMON_6, +#define ABMON_6 ABMON_6 ABMON_7, +#define ABMON_7 ABMON_7 ABMON_8, +#define ABMON_8 ABMON_8 ABMON_9, +#define ABMON_9 ABMON_9 ABMON_10, +#define ABMON_10 ABMON_10 ABMON_11, +#define ABMON_11 ABMON_11 ABMON_12, +#define ABMON_12 ABMON_12 /* Long month names. */ MON_1, /* January */ +#define MON_1 MON_1 MON_2, +#define MON_2 MON_2 MON_3, +#define MON_3 MON_3 MON_4, +#define MON_4 MON_4 MON_5, +#define MON_5 MON_5 MON_6, +#define MON_6 MON_6 MON_7, +#define MON_7 MON_7 MON_8, +#define MON_8 MON_8 MON_9, +#define MON_9 MON_9 MON_10, +#define MON_10 MON_10 MON_11, +#define MON_11 MON_11 MON_12, +#define MON_12 MON_12 AM_STR, /* Ante meridian string. */ +#define AM_STR AM_STR PM_STR, /* Post meridian string. */ +#define PM_STR PM_STR D_T_FMT, /* Date and time format for strftime. */ +#define D_T_FMT D_T_FMT D_FMT, /* Date format for strftime. */ +#define D_FMT D_FMT T_FMT, /* Time format for strftime. */ +#define T_FMT T_FMT T_FMT_AMPM, /* 12-hour time format for strftime. */ +#define T_FMT_AMPM T_FMT_AMPM ERA, /* Alternate era. */ +#define ERA ERA ERA_YEAR, /* Year in alternate era format. */ +#define ERA_YEAR ERA_YEAR ERA_D_FMT, /* Date in alternate era format. */ +#define ERA_D_FMT ERA_D_FMT ALT_DIGITS, /* Alternate symbols for digits. */ +#define ALT_DIGITS ALT_DIGITS ERA_D_T_FMT, /* Date and time in alternate era format. */ +#define ERA_D_T_FMT ERA_D_T_FMT ERA_T_FMT, /* Time in alternate era format. */ +#define ERA_T_FMT ERA_T_FMT _NL_TIME_NUM_ALT_DIGITS, /* Number entries in the alt_digits arrays. */ @@ -166,42 +216,67 @@ enum These items each correspond to a member of `struct lconv', defined in <locale.h>. */ INT_CURR_SYMBOL = _NL_ITEM (LC_MONETARY, 0), +#define INT_CURR_SYMBOL INT_CURR_SYMBOL CURRENCY_SYMBOL, +#define CURRENCY_SYMBOL CURRENCY_SYMBOL #ifdef __USE_UNIX98 CRNCYSTR = CURRENCY_SYMBOL, +# define CRNCYSTR CRNCYSTR #endif MON_DECIMAL_POINT, +#define MON_DECIMAL_POINT MON_DECIMAL_POINT MON_THOUSANDS_SEP, +#define MON_THOUSANDS_SEP MON_THOUSANDS_SEP MON_GROUPING, +#define MON_GROUPING MON_GROUPING POSITIVE_SIGN, +#define POSITIVE_SIGN POSITIVE_SIGN NEGATIVE_SIGN, +#define NEGATIVE_SIGN NEGATIVE_SIGN INT_FRAC_DIGITS, +#define INT_FRAC_DIGITS INT_FRAC_DIGITS FRAC_DIGITS, +#define FRAC_DIGITS FRAC_DIGITS P_CS_PRECEDES, +#define P_CS_PRECEDES P_CS_PRECEDES P_SEP_BY_SPACE, +#define P_SEP_BY_SPACE P_SEP_BY_SPACE N_CS_PRECEDES, +#define N_CS_PRECEDES N_CS_PRECEDES N_SEP_BY_SPACE, +#define N_SEP_BY_SPACE N_SEP_BY_SPACE P_SIGN_POSN, +#define P_SIGN_POSN P_SIGN_POSN N_SIGN_POSN, +#define N_SIGN_POSN N_SIGN_POSN _NL_NUM_LC_MONETARY, /* LC_NUMERIC category: formatting of numbers. These also correspond to members of `struct lconv'; see <locale.h>. */ DECIMAL_POINT = _NL_ITEM (LC_NUMERIC, 0), +#define DECIMAL_POINT DECIMAL_POINT #ifdef __USE_UNIX98 RADIXCHAR = DECIMAL_POINT, +# define RADIXCHAR RADIXCHAR #endif THOUSANDS_SEP, +#define THOUSANDS_SEP THOUSANDS_SEP #ifdef __USE_UNIX98 THOUSEP = THOUSANDS_SEP, +#define THOUSANDS_SEP THOUSANDS_SEP #endif GROUPING, +#define GROUPING GROUPING _NL_NUM_LC_NUMERIC, YESEXPR = _NL_ITEM (LC_MESSAGES, 0), /* Regex matching ``yes'' input. */ +#define YESEXPR YESEXPR NOEXPR, /* Regex matching ``no'' input. */ +#define NOEXPR NOEXPR YESSTR, /* Output string for ``yes''. */ +#define YESSTR YESSTR NOSTR, /* Output string for ``no''. */ +#define NOSTR NOSTR _NL_NUM_LC_MESSAGES, /* This marks the highest value used. */ diff --git a/locale/programs/charmap.c b/locale/programs/charmap.c index 27c83cc0a7..1573d6c002 100644 --- a/locale/programs/charmap.c +++ b/locale/programs/charmap.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996. @@ -471,7 +471,7 @@ argument to <%s> must be a single character"), cmfile->token.val.str.start, cmfile->token.val.str.len); - state = 3; + state = 5; continue; case 90: diff --git a/locale/programs/charset.c b/locale/programs/charset.c index 00233abf8f..fdacf25328 100644 --- a/locale/programs/charset.c +++ b/locale/programs/charset.c @@ -125,10 +125,11 @@ insert_char (struct linereader *lr, struct charset_t *cs, int bytes, for (cnt = from_nr; cnt <= to_nr; ++cnt) { - sprintf (&buf[prefix_len], "%0d", cnt); + sprintf (&buf[prefix_len], "%0*d", len1 - prefix_len, cnt); if (insert_entry (&cs->char_table, buf, len1, - (void *) (unsigned long int) cnt) < 0) + (void *) (unsigned long int) (value + (cnt - from_nr))) + < 0) lr_error (lr, _("duplicate character name `%s'"), buf); } } diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index 3a8c17a303..f01b1f662b 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -190,7 +190,7 @@ collate_startup (struct linereader *lr, struct localedef_t *locale, collate->all_patches = NULL; /* This tells us no UNDEFINED entry was found until now. */ - collate->undefined.this_weight = 0; + memset (&collate->undefined, '\0', sizeof (collate->undefined)); lr->translate_strings = 0; } @@ -457,12 +457,10 @@ Computing table size for collation information might take a while..."), information. While reading them they get inserted in the \ table and later not removed when something goes wrong with \ reading its weights. */ \ - { \ - value += 1 + runp->ordering[cnt]; \ + value += 1 + runp->ordering[cnt]; \ \ - if (runp->name[1] == L'\0') \ - has_simple = runp; \ - } \ + if (runp->name[1] == L'\0') \ + has_simple = runp; \ \ ADD_ELEMENT (runp, value); \ } \ @@ -1891,7 +1889,7 @@ collate_end_weight (struct linereader *lr, struct localedef_t *locale) || collate->kind == undefined); /* Fill in the missing weights. */ - while (++collate->weight_idx < collate->nrules) + while (collate->weight_idx++ < collate->nrules) { collate->weight[collate->nweight++] = pelem->this_weight; ++collate->weight_cnt[collate->weight_idx]; diff --git a/localedata/configure b/localedata/configure deleted file mode 100755 index 71230939e6..0000000000 --- a/localedata/configure +++ /dev/null @@ -1,3 +0,0 @@ -# This is only to keep the GNU C library configure mechanism happy. -# -exit 0 diff --git a/manual/arith.texi b/manual/arith.texi index 563d9859af..21b6380fca 100644 --- a/manual/arith.texi +++ b/manual/arith.texi @@ -1056,16 +1056,13 @@ There is an example at the end of this section. @deftypefun {unsigned long int} strtoul (const char *@var{string}, char **@var{tailptr}, int @var{base}) The @code{strtoul} (``string-to-unsigned-long'') function is like @code{strtol} except it deals with unsigned numbers, and returns its -value with type @code{unsigned long int}. No @samp{+} or @samp{-} sign -may appear before the number, but the syntax is otherwise the same as +value with type @code{unsigned long int}. If the number has a leading +@samp{-} sign the negated value is returned. The syntax is the same as described above for @code{strtol}. The value returned in case of overflow is @code{ULONG_MAX} (@pxref{Range of Type}). Like @code{strtol} this function sets @code{errno} and returns the value @code{0ul} in case the value for @var{base} is not in the legal range. -For @code{strtoul} this can happen in another situation. In case the -number to be converted is negative @code{strtoul} also sets @code{errno} -to @code{EINVAL} and returns @code{0ul}. @end deftypefun @comment stdlib.h diff --git a/manual/mbyte.texi b/manual/mbyte.texi index 15f185b54d..4ff9a1b974 100644 --- a/manual/mbyte.texi +++ b/manual/mbyte.texi @@ -399,7 +399,7 @@ mbstowcs_alloc (const char *string) @comment stdlib.h @comment ISO -@deftypefun size_t wcstombs (char *@var{string}, const wchar_t @var{wstring}, size_t @var{size}) +@deftypefun size_t wcstombs (char *@var{string}, const wchar_t *@var{wstring}, size_t @var{size}) The @code{wcstombs} (``wide character string to multibyte string'') function converts the null-terminated wide character array @var{wstring} into a string containing multibyte characters, storing not more than diff --git a/manual/time.texi b/manual/time.texi index f38c2eb87c..e280716304 100644 --- a/manual/time.texi +++ b/manual/time.texi @@ -1812,7 +1812,7 @@ The smallest valid priority value. @comment BSD @item PRIO_MAX @vindex PRIO_MAX -The smallest valid priority value. +The largest valid priority value. @end table @comment sys/resource.h diff --git a/math/libm-test.c b/math/libm-test.c index 1b0b163e99..efb89f7033 100644 --- a/math/libm-test.c +++ b/math/libm-test.c @@ -869,8 +869,8 @@ acosh_test (void) #endif check ("acosh(1) == 0", FUNC(acosh) (1), 0); - check ("acosh(7) == 2.633915793...", FUNC(acosh) (7), - 2.6339157938496334172L); + check_eps ("acosh(7) == 2.633915793...", FUNC(acosh) (7), + 2.6339157938496334172L, CHOOSE (3e-19, 0, 0)); } @@ -1069,7 +1069,7 @@ cbrt_test (void) check_eps ("cbrt (0.970299) == 0.99", FUNC(cbrt) (0.970299), 0.99, CHOOSE (2e-17L, 0, 0)); check_eps ("cbrt (0.7) == .8879040017...", FUNC(cbrt) (0.7), - 0.8879040017426007084L, CHOOSE(2e-17L, 2e-16, 0)); + 0.8879040017426007084L, CHOOSE(2e-17L, 6e-16, 0)); } @@ -2688,15 +2688,15 @@ cexp_test (void) result = FUNC(cexp) (BUILD_COMPLEX (0.7, 1.2)); check_eps ("real(cexp(0.7 + i 1.2)) == 0.72969...", __real__ result, - 0.7296989091503236012L, CHOOSE(6e-17L, 0, 6e-8)); + 0.7296989091503236012L, CHOOSE(6e-17L, 0, 2e-7)); check_eps ("imag(cexp(0.7 + i 1.2)) == 1.87689...", __imag__ result, - 1.8768962328348102821L, CHOOSE(2e-16L, 0, 0)); + 1.8768962328348102821L, CHOOSE(2e-16L, 0, 3e-7)); result = FUNC(cexp) (BUILD_COMPLEX (-2, -3)); - check_eps ("real(cexp(-2 - i 3)) == --0.13398...", __real__ result, - -0.1339809149295426134L, CHOOSE(6e-20L, 0, 0)); + check_eps ("real(cexp(-2 - i 3)) == -0.13398...", __real__ result, + -0.1339809149295426134L, CHOOSE(6e-20L, 0, 2e-8)); check_eps ("imag(cexp(-2 - i 3)) == -0.01909...", __imag__ result, - -0.0190985162611351964L, CHOOSE(4e-20L, 0, 0)); + -0.0190985162611351964L, CHOOSE(4e-20L, 0, 2e-9)); } @@ -2871,13 +2871,13 @@ csin_test (void) check_eps ("real(csin(0.7 + i 1.2)) = 1.166456341...", __real__ result, 1.1664563419657581376L, CHOOSE(2e-16L, 0, 0)); check_eps ("imag(csin(0.7 + i 1.2)) = 1.154499724...", __imag__ result, - 1.1544997246948547371L, CHOOSE(2e-17L, 0, 0)); + 1.1544997246948547371L, CHOOSE(2e-17L, 0, 2e-7)); result = FUNC(csin) (BUILD_COMPLEX (-2, -3)); - check ("real(csin(-2 - i 3)) == --9.15449...", __real__ result, - -9.1544991469114295734L); - check ("imag(csin(-2 - i 3)) == -4.16890...", __imag__ result, - 4.1689069599665643507L); + check_eps ("real(csin(-2 - i 3)) == -9.15449...", __real__ result, + -9.1544991469114295734L, CHOOSE(4e-18L, 0, 1e-6)); + check_eps ("imag(csin(-2 - i 3)) == -4.16890...", __imag__ result, + 4.1689069599665643507L, CHOOSE(2e-17L, 0, 5e-7)); } @@ -3052,13 +3052,13 @@ csinh_test (void) check_eps ("real(csinh(0.7 + i 1.2)) = 0.274878686...", __real__ result, 0.27487868678117583582L, CHOOSE(2e-17L, 6e-17, 3e-8)); check_eps ("imag(csinh(0.7 + i 1.2)) = 1.169866572...", __imag__ result, - 1.1698665727426565139L, CHOOSE(6e-17L, 0, 3e-8)); + 1.1698665727426565139L, CHOOSE(6e-17L, 0, 2e-7)); result = FUNC(csinh) (BUILD_COMPLEX (-2, -3)); check_eps ("real(csinh(-2 - i 3)) == -3.59056...", __real__ result, - 3.5905645899857799520L, CHOOSE(0, 5e-16, 0)); + 3.5905645899857799520L, CHOOSE(7e-19L, 5e-16, 3e-7)); check_eps ("imag(csinh(-2 - i 3)) == -0.53092...", __imag__ result, - -0.5309210862485198052L, CHOOSE(2e-19L, 2e-16, 6e-8)); + -0.5309210862485198052L, CHOOSE(3e-19L, 2e-16, 6e-8)); } @@ -3229,15 +3229,15 @@ ccos_test (void) result = FUNC(ccos) (BUILD_COMPLEX (0.7, 1.2)); check_eps ("real(ccos(0.7 + i 1.2)) = 1.384865764...", __real__ result, - 1.3848657645312111080L, CHOOSE(6e-19L, 3e-16, 2e-7)); + 1.3848657645312111080L, CHOOSE(4e-18L, 3e-16, 2e-7)); check_eps ("imag(ccos(0.7 + i 1.2)) = -0.972421703...", __imag__ result, -0.97242170335830028619L, CHOOSE(2e-16L, 2e-16, 0)); result = FUNC(ccos) (BUILD_COMPLEX (-2, -3)); - check ("real(ccos(-2 - i 3)) == --4.18962...", __real__ result, - -4.1896256909688072301L); + check_eps ("real(ccos(-2 - i 3)) == -4.18962...", __real__ result, + -4.1896256909688072301L, CHOOSE(2e-17L, 0, 5e-7)); check_eps ("imag(ccos(-2 - i 3)) == -9.10922...", __imag__ result, - -9.1092278937553365979L, CHOOSE(9e-19L, 0, 1e-6)); + -9.1092278937553365979L, CHOOSE(3e-18L, 0, 1e-6)); } @@ -3408,15 +3408,15 @@ ccosh_test (void) result = FUNC(ccosh) (BUILD_COMPLEX (0.7, 1.2)); check_eps ("real(ccosh(0.7 + i 1.2)) == 0.45482...", __real__ result, - 0.4548202223691477654L, CHOOSE(4e-17L, 6e-17, 3e-8)); + 0.4548202223691477654L, CHOOSE(5e-17L, 6e-17, 9e-8)); check_eps ("imag(ccosh(0.7 + i 1.2)) == 0.70702...", __imag__ result, 0.7070296600921537682L, CHOOSE(7e-17L, 0, 0)); result = FUNC(ccosh) (BUILD_COMPLEX (-2, -3)); - check ("real(ccosh(-2 - i 3)) == --3.72454...", __real__ result, - -3.7245455049153225654L); + check_eps ("real(ccosh(-2 - i 3)) == -3.72454...", __real__ result, + -3.7245455049153225654L, CHOOSE(7e-19L, 0, 3e-7)); check_eps ("imag(ccosh(-2 - i 3)) == -0.51182...", __imag__ result, - 0.5118225699873846088L, CHOOSE(6e-20, 2e-16, 6e-8)); + 0.5118225699873846088L, CHOOSE(3e-19L, 2e-16, 6e-8)); } @@ -3553,10 +3553,10 @@ cacos_test (void) -1.0927647857577371459L, CHOOSE(4e-17L, 0, 3e-7)); result = FUNC(cacos) (BUILD_COMPLEX (-2, -3)); - check ("real(cacos(-2 - i 3)) == -2.14144...", __real__ result, - 2.1414491111159960199L); + check_eps ("real(cacos(-2 - i 3)) == 2.14144...", __real__ result, + 2.1414491111159960199L, CHOOSE(3e-19L, 0, 0)); check_eps ("imag(cacos(-2 - i 3)) == -1.98338...", __imag__ result, - 1.9833870299165354323L, CHOOSE(2e-19L, 0, 0)); + 1.9833870299165354323L, CHOOSE(3e-19L, 0, 0)); } @@ -3694,9 +3694,9 @@ cacosh_test (void) result = FUNC(cacosh) (BUILD_COMPLEX (-2, -3)); check_eps ("real(cacosh(-2 - i 3)) == -1.98338...", __real__ result, - -1.9833870299165354323L, CHOOSE (6e-19, 3e-16, 9e-7)); + -1.9833870299165354323L, CHOOSE (2e-18L, 3e-16, 9e-7)); check_eps ("imag(cacosh(-2 - i 3)) == 2.14144...", __imag__ result, - 2.1414491111159960199L, CHOOSE (3e-19, 5e-16, 0)); + 2.1414491111159960199L, CHOOSE (3e-19, 5e-16, 1e-6)); } @@ -3838,10 +3838,10 @@ casin_test (void) 1.0927647857577371459L, CHOOSE(4e-17L, 0, 3e-7)); result = FUNC(casin) (BUILD_COMPLEX (-2, -3)); - check ("real(casin(-2 - i 3)) == --0.57065...", __real__ result, - -0.5706527843210994007L); + check_eps ("real(casin(-2 - i 3)) == -0.57065...", __real__ result, + -0.5706527843210994007L, CHOOSE(4e-19L, 0, 0)); check_eps ("imag(casin(-2 - i 3)) == -1.98338...", __imag__ result, - -1.9833870299165354323L, CHOOSE(2e-19L, 0, 0)); + -1.9833870299165354323L, CHOOSE(3e-19L, 0, 0)); } @@ -3980,10 +3980,10 @@ casinh_test (void) check_eps ("real(casinh(0.7 + i 1.2)) == 0.97865...", __real__ result, 0.9786545955936738768L, CHOOSE(5e-17L, 2e-16, 0)); check_eps ("imag(casinh(0.7 + i 1.2)) == 0.91135...", __imag__ result, - 0.9113541895315601156L, CHOOSE(7e-19L, 0, 6e-8)); + 0.9113541895315601156L, CHOOSE(7e-19L, 2e-16, 6e-8)); result = FUNC(casinh) (BUILD_COMPLEX (-2, -3)); - check_eps ("real(casinh(-2 - i 3)) == --1.96863...", __real__ result, + check_eps ("real(casinh(-2 - i 3)) == -1.96863...", __real__ result, -1.9686379257930962917L, CHOOSE(7e-19L, 2e-15, 2e-7)); check_eps ("imag(casinh(-2 - i 3)) == -0.96465...", __imag__ result, -0.9646585044076027920L, CHOOSE(4e-19L, 2e-15, 4e-7)); @@ -4136,7 +4136,7 @@ catan_test (void) check ("real(catan(-2 - i 3)) == -1.40992...", __real__ result, -1.4099210495965755225L); check_eps ("imag(catan(-2 - i 3)) == -0.22907...", __imag__ result, - -0.2290726829685387662L, CHOOSE(1e-19L, 3e-17, 2e-8)); + -0.2290726829685387662L, CHOOSE(1.1e-19L, 3e-17, 2e-8)); } @@ -4284,9 +4284,9 @@ catanh_test (void) result = FUNC(catanh) (BUILD_COMPLEX (-2, -3)); check_eps ("real(catanh(-2 - i 3)) == -0.14694...", __real__ result, - -0.1469466662255297520L, CHOOSE (3e-20, 6e-17, 2e-8)); - check ("imag(catanh(-2 - i 3)) == -1.33897...", __imag__ result, - -1.3389725222944935611L); + -0.1469466662255297520L, CHOOSE (9e-20L, 6e-17, 2e-8)); + check_eps ("imag(catanh(-2 - i 3)) == -1.33897...", __imag__ result, + -1.3389725222944935611L, CHOOSE (7e-19L, 0, 0)); } @@ -4586,10 +4586,10 @@ ctanh_test (void) 0.4778641038326365540L, CHOOSE(9e-17L, 6e-17, 0)); result = FUNC(ctanh) (BUILD_COMPLEX (-2, -3)); - check_eps ("real(ctanh(-2 - i 3)) == --0.96538...", __real__ result, + check_eps ("real(ctanh(-2 - i 3)) == -0.96538...", __real__ result, -0.9653858790221331242L, CHOOSE(2e-19L, 0, 0)); - check_eps ("imag(ctanh(-2 - i 3)) == -0.00988...", __imag__ result, - 0.0098843750383224937L, CHOOSE(2e-20L, 0, 1e-9)); + check_eps ("imag(ctanh(-2 - i 3)) == 0.00988...", __imag__ result, + 0.0098843750383224937L, CHOOSE(7e-20L, 0, 1e-9)); } @@ -4752,10 +4752,10 @@ clog_test (void) 1.0427218783685369524L, CHOOSE(2e-17L, 0, 0)); result = FUNC(clog) (BUILD_COMPLEX (-2, -3)); - check ("real(clog(-2 - i 3)) == -1.28247...", __real__ result, - 1.2824746787307683680L); + check_eps ("real(clog(-2 - i 3)) == 1.28247...", __real__ result, + 1.2824746787307683680L, CHOOSE(3e-19L, 0, 0)); check_eps ("imag(clog(-2 - i 3)) == -2.15879...", __imag__ result, - -2.1587989303424641704L, CHOOSE(3e-19L, 0, 0)); + -2.1587989303424641704L, CHOOSE(2e-18L, 0, 0)); } @@ -4934,10 +4934,10 @@ clog10_test (void) 0.4528483579352493248L, CHOOSE(6e-18, 6e-17, 3e-8)); result = FUNC(clog10) (BUILD_COMPLEX (-2, -3)); - check ("real(clog10(-2 - i 3)) == -0.55697...", __real__ result, - 0.5569716761534183846L); + check_eps ("real(clog10(-2 - i 3)) == 0.55697...", __real__ result, + 0.5569716761534183846L, CHOOSE(6e-20L, 0, 0)); check_eps ("imag(clog10(-2 - i 3)) == -0.93755...", __imag__ result, - -0.9375544629863747085L, CHOOSE (6e-20, 2e-16, 0)); + -0.9375544629863747085L, CHOOSE (7e-19L, 2e-16, 0)); } @@ -5102,8 +5102,8 @@ csqrt_test (void) result = FUNC(csqrt) (BUILD_COMPLEX (-2, -3)); check_eps ("real(csqrt(-2 - i 3)) == -0.89597...", __real__ result, 0.8959774761298381247L, CHOOSE(6e-20L, 2e-16, 6e-8)); - check ("imag(csqrt(-2 - i 3)) == -1.67414...", __imag__ result, - -1.6741492280355400404L); + check_eps ("imag(csqrt(-2 - i 3)) == -1.67414...", __imag__ result, + -1.6741492280355400404L, CHOOSE(0, 5e-16, 0)); } @@ -5641,7 +5641,7 @@ identities (void) identities1_test (-1, CHOOSE (1e-18L, 0, 1e-7)); identities2_test (0.2L, CHOOSE (1e-19L, 1e-16, 0)); - identities2_test (0.9L, CHOOSE (0, 1e-15, 2e-7)); + identities2_test (0.9L, CHOOSE (3e-19L, 1e-15, 2e-7)); identities2_test (0, 0); identities2_test (-1, CHOOSE (1e-18L, 1e-15, 2e-7)); diff --git a/math/test-fenv.c b/math/test-fenv.c index 4da2e37dae..ab09410690 100644 --- a/math/test-fenv.c +++ b/math/test-fenv.c @@ -36,6 +36,7 @@ #include <string.h> #include <unistd.h> #include <sys/wait.h> +#include <sys/resource.h> /* Since not all architectures might define all exceptions, we define @@ -249,6 +250,14 @@ feenv_nomask_test (const char *flag_name, int fe_exc) pid = fork (); if (pid == 0) { +#ifdef RLIMIT_CORE + /* Try to avoid dumping core. */ + struct rlimit core_limit; + core_limit.rlim_cur = 0; + core_limit.rlim_max = 0; + setrlimit (RLIMIT_CORE, &core_limit); +#endif + fesetenv (FE_NOMASK_ENV); feraiseexcept (fe_exc); exit (2); @@ -293,6 +302,14 @@ feenv_mask_test (const char *flag_name, int fe_exc) pid = fork (); if (pid == 0) { +#ifdef RLIMIT_CORE + /* Try to avoid dumping core. */ + struct rlimit core_limit; + core_limit.rlim_cur = 0; + core_limit.rlim_max = 0; + setrlimit (RLIMIT_CORE, &core_limit); +#endif + fesetenv (FE_DFL_ENV); feraiseexcept (fe_exc); exit (2); diff --git a/misc/lsearch.c b/misc/lsearch.c index 4bc0414088..68f89be8ca 100644 --- a/misc/lsearch.c +++ b/misc/lsearch.c @@ -1,5 +1,5 @@ /* Linear search functions. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -33,7 +33,7 @@ lsearch (const void *key, void *base, size_t *nmemb, size_t size, if (result == NULL) { /* Not available. Insert at the end. */ - memcpy (base + (*nmemb) * size, key, size); + result = memcpy (base + (*nmemb) * size, key, size); ++(*nmemb); } diff --git a/nss/db-Makefile b/nss/db-Makefile index c10267c4df..b3f1ed4ad5 100644 --- a/nss/db-Makefile +++ b/nss/db-Makefile @@ -1,5 +1,5 @@ # Makefile to (re-)generate db versions of system database files. -# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. # This file is part of the GNU C Library. # Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. # @@ -34,8 +34,7 @@ $(VAR_DB)/passwd.db: /etc/passwd @$(AWK) 'BEGIN { FS=":"; OFS=":"; cnt=0 } \ { printf "0%u ", cnt++; print } \ /^[^#]/ { printf ".%s ", $$1; print; \ - if (!uids[$$3]++) \ - { printf "=%s ", $$3; print } }' $^ | \ + printf "=%s ", $$3; print }' $^ | \ $(MAKEDB) -o $@ - @echo "done." diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c index 4d20cae797..1340b77de0 100644 --- a/nss/nss_db/db-XXX.c +++ b/nss/nss_db/db-XXX.c @@ -149,6 +149,7 @@ static enum nss_status lookup (const DBT *key, struct STRUCTURE *result, void *buffer, size_t buflen, int *errnop H_ERRNO_PROTO) { + char *p; enum nss_status status; int err; DBT value; @@ -156,15 +157,59 @@ lookup (const DBT *key, struct STRUCTURE *result, /* Open the database. */ status = internal_setent (keep_db); if (status != NSS_STATUS_SUCCESS) - return status; + { + *errnop = errno; + H_ERRNO_SET (NETDB_INTERNAL); + return status; + } /* Succeed iff it matches a value that parses correctly. */ - err = ((*db->get) (db, key, &value, 0) == 0 && - parse_line (value.data, result, buffer, buflen, errnop)); - if (err == 0) - status = NSS_STATUS_SUCCESS; + err = (*db->get) (db, key, &value, 0); + if (err < 0) + { + *errnop = errno; + H_ERRNO_SET (NETDB_INTERNAL); + status = NSS_STATUS_UNAVAIL; + } + else if (err != 0) + { + H_ERRNO_SET (HOST_NOT_FOUND); + status = NSS_STATUS_NOTFOUND; + } else - status = err < 0 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND; + { + /* Skip leading blanks. */ + p = (char *) value.data; + while (isspace (*p)) + ++p; + + err = parse_line (p, result, buffer, buflen, errnop); + + if (err == 0) + { + /* If the key begins with '0' we are trying to get the next + entry. We want to ignore unparsable lines in this case. */ + if (((char *) key->data)[0] == '0') + { + /* Super magical return value. We need to tell our caller + that it should continue looping. This value cannot + happen in other cases. */ + status = NSS_STATUS_RETURN; + } + else + { + H_ERRNO_SET (HOST_NOT_FOUND); + status = NSS_STATUS_NOTFOUND; + } + } + else if (err < 0) + { + H_ERRNO_SET (NETDB_INTERNAL); + status = NSS_STATUS_TRYAGAIN; + } + else + status = NSS_STATUS_SUCCESS; + } if (! keep_db) internal_endent (); @@ -196,7 +241,7 @@ _nss_db_get##name##_r (proto, \ { \ DBT key; \ enum nss_status status; \ - const size_t size = (keysize); \ + const size_t size = (keysize) + 1; \ key.data = __alloca (size); \ key.size = KEYPRINTF keypattern; \ __libc_lock_lock (lock); \ @@ -221,8 +266,16 @@ CONCAT(_nss_db_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer, DBT key; __libc_lock_lock (lock); - key.size = 1 + snprintf (key.data = buf, sizeof buf, "0%u", entidx++); - status = lookup (&key, result, buffer, buflen, errnop H_ERRNO_ARG); + + /* Loop until we find a valid entry or hit EOF. See above for the + special meaning of the status value. */ + do + { + key.size = snprintf (key.data = buf, sizeof buf, "0%u", entidx++); + status = lookup (&key, result, buffer, buflen, errnop H_ERRNO_ARG); + } + while (status == NSS_STATUS_RETURN); + __libc_lock_unlock (lock); return status; diff --git a/nss/nss_db/db-alias.c b/nss/nss_db/db-alias.c index 0e72b92ceb..27b7952b30 100644 --- a/nss/nss_db/db-alias.c +++ b/nss/nss_db/db-alias.c @@ -1,5 +1,5 @@ /* Mail alias file parser in nss_db module. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -221,13 +221,13 @@ enum nss_status _nss_db_getaliasent_r (struct aliasent *result, char *buffer, size_t buflen, int *errnop) { - /* Return next entry in host file. */ + /* Return next entry in alias file. */ enum nss_status status; char buf[20]; DBT key; __libc_lock_lock (lock); - key.size = 1 + snprintf (key.data = buf, sizeof buf, "0%u", entidx++); + key.size = snprintf (key.data = buf, sizeof buf, "0%u", entidx++); status = lookup (&key, result, buffer, buflen, errnop); __libc_lock_unlock (lock); diff --git a/nss/nss_files/files-alias.c b/nss/nss_files/files-alias.c index 733e599103..84d771d94e 100644 --- a/nss/nss_files/files-alias.c +++ b/nss/nss_files/files-alias.c @@ -1,5 +1,5 @@ /* Mail alias file parser in nss_files module. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -200,7 +200,8 @@ get_next_alias (const char *match, struct aliasent *result, looking for. If it does not match we simply ignore all lines until the next line containing the start of a new alias is found. */ - ignore = match != NULL && strcmp (result->alias_name, match) != 0; + ignore = (match != NULL + && strcasecmp (result->alias_name, match) != 0); while (! ignore) { diff --git a/nss/nss_files/files-hosts.c b/nss/nss_files/files-hosts.c index d6c4152507..2379919f49 100644 --- a/nss/nss_files/files-hosts.c +++ b/nss/nss_files/files-hosts.c @@ -1,5 +1,5 @@ /* Hosts file parser in nss_files module. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 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 @@ -89,14 +89,14 @@ DB_LOOKUP (hostbyname, ,, if (result->h_addrtype != ((_res.options & RES_USE_INET6) ? AF_INET6 : AF_INET)) continue; - LOOKUP_NAME (h_name, h_aliases) + LOOKUP_NAME_CASE (h_name, h_aliases) }, const char *name) DB_LOOKUP (hostbyname2, ,, { if (result->h_addrtype != af) continue; - LOOKUP_NAME (h_name, h_aliases) + LOOKUP_NAME_CASE (h_name, h_aliases) }, const char *name, int af) DB_LOOKUP (hostbyaddr, ,, diff --git a/nss/nss_files/files-network.c b/nss/nss_files/files-network.c index ac5acd5c4e..8180d46e9d 100644 --- a/nss/nss_files/files-network.c +++ b/nss/nss_files/files-network.c @@ -1,5 +1,5 @@ /* Networks file parser in nss_files module. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 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 @@ -44,7 +44,7 @@ LINE_PARSER #include "files-XXX.c" DB_LOOKUP (netbyname, ,, - LOOKUP_NAME (n_name, n_aliases), + LOOKUP_NAME_CASE (n_name, n_aliases), const char *name) DB_LOOKUP (netbyaddr, ,, diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c index 76df1c6ff0..198b359b4c 100644 --- a/nss/nss_files/files-parse.c +++ b/nss/nss_files/files-parse.c @@ -1,5 +1,5 @@ /* Common code for file-based database parsers in nss_files module. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 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 @@ -232,6 +232,18 @@ parse_list (char *line, struct parser_data *data, size_t datalen, int *errnop) break; \ } +#define LOOKUP_NAME_CASE(nameelt, aliaselt) \ +{ \ + char **ap; \ + if (! strcasecmp (name, result->nameelt)) \ + break; \ + for (ap = result->aliaselt; *ap; ++ap) \ + if (! strcasecmp (name, *ap)) \ + break; \ + if (*ap) \ + break; \ +} + /* This is defined by db-*.c to include "../nss_db/db-XXX.c" instead. */ #ifndef GENERIC diff --git a/nss/nss_files/files-service.c b/nss/nss_files/files-service.c index 317b4fa9cc..186b8a27fc 100644 --- a/nss/nss_files/files-service.c +++ b/nss/nss_files/files-service.c @@ -39,7 +39,8 @@ LINE_PARSER #include GENERIC -DB_LOOKUP (servbyname, 1 + strlen (name), (".%s/%s", name, proto), +DB_LOOKUP (servbyname, 2 + strlen (name) + strlen (proto), + (".%s/%s", name, proto), { /* Must match both protocol (if specified) and name. */ if (proto != NULL && strcmp (result->s_proto, proto)) @@ -48,7 +49,7 @@ DB_LOOKUP (servbyname, 1 + strlen (name), (".%s/%s", name, proto), }, const char *name, const char *proto) -DB_LOOKUP (servbyport, 20, ("=%d/%s", port, proto), +DB_LOOKUP (servbyport, 21 + strlen (proto), ("=%d/%s", port, proto), { /* Must match both port and protocol. */ if (result->s_port == port diff --git a/rt/aio_misc.c b/rt/aio_misc.c index cdfb63d28c..91c55442b4 100644 --- a/rt/aio_misc.c +++ b/rt/aio_misc.c @@ -421,10 +421,10 @@ handle_fildes_io (void *arg) aiocbp->aiocb64.aio_offset)); else aiocbp->aiocb.__return_value = - TEMP_FAILURE_RETRY (__pread (fildes, - (void *) aiocbp->aiocb.aio_buf, - aiocbp->aiocb.aio_nbytes, - aiocbp->aiocb.aio_offset)); + TEMP_FAILURE_RETRY (pread (fildes, + (void *) aiocbp->aiocb.aio_buf, + aiocbp->aiocb.aio_nbytes, + aiocbp->aiocb.aio_offset)); } else if ((aiocbp->aiocb.aio_lio_opcode & 127) == LIO_WRITE) { @@ -436,10 +436,10 @@ handle_fildes_io (void *arg) aiocbp->aiocb64.aio_offset)); else aiocbp->aiocb.__return_value = - TEMP_FAILURE_RETRY (__pwrite (fildes, - (const void *) aiocbp->aiocb.aio_buf, - aiocbp->aiocb.aio_nbytes, - aiocbp->aiocb.aio_offset)); + TEMP_FAILURE_RETRY (pwrite (fildes, + (const void *) aiocbp->aiocb.aio_buf, + aiocbp->aiocb.aio_nbytes, + aiocbp->aiocb.aio_offset)); } else if (aiocbp->aiocb.aio_lio_opcode == LIO_DSYNC) aiocbp->aiocb.__return_value = TEMP_FAILURE_RETRY (fdatasync (fildes)); diff --git a/stdio-common/xbug.c b/stdio-common/xbug.c index 7ab76f051a..a04bfc4fd0 100644 --- a/stdio-common/xbug.c +++ b/stdio-common/xbug.c @@ -63,6 +63,8 @@ main(int argc, char *argv[]) if (!freopen (filename, "r", stdin)) fprintf(stderr, "cannot open file\n"); + unsetenv ("LD_LIBRARY_PATH"); + if (!(input = popen("/bin/cat", "r"))) fprintf(stderr, "cannot run \n"); diff --git a/string/Makefile b/string/Makefile index 5b11a5885a..93d68a45be 100644 --- a/string/Makefile +++ b/string/Makefile @@ -42,7 +42,7 @@ routines := strcat strchr strcmp strcoll strcpy strcspn \ strcoll_l strxfrm_l tests := tester inl-tester noinl-tester testcopy test-ffs \ - tst-strlen stratcliff tst-svc + tst-strlen stratcliff tst-svc tst-inlcall distribute := memcopy.h pagecopy.h tst-svc.expect diff --git a/string/strsignal.c b/string/strsignal.c index 69629b7855..41585dca00 100644 --- a/string/strsignal.c +++ b/string/strsignal.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 94, 95, 96, 97, 98 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 @@ -18,7 +18,9 @@ #include <signal.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> +#include <bits/libc-lock.h> #ifndef HAVE_GNU_LD @@ -27,23 +29,100 @@ /* Defined in siglist.c. */ extern const char *const _sys_siglist[]; +static __libc_key_t key; + +/* If nonzero the key allocation failed and we should better use a + static buffer than fail. */ +#define BUFFERSIZ 100 +static char local_buf[BUFFERSIZ]; +static char *static_buf; + +/* Destructor for the thread-specific data. */ +static void init (void); +static void free_key_mem (void *mem); +static char *getbuffer (void); /* Return a string describing the meaning of the signal number SIGNUM. */ char * strsignal (int signum) { + __libc_once_define (static, once); const char *desc; - if (signum < 0 || signum > NSIG || (desc = _sys_siglist[signum]) == NULL) + /* If we have not yet initialized the buffer do it now. */ + __libc_once (once, init); + + if ( +#ifdef SIGRTMIN + (signum >= SIGRTMIN && signum <= SIGRTMAX) || +#endif + signum < 0 || signum > NSIG || (desc = _sys_siglist[signum]) == NULL) { - static char buf[512]; - int len = __snprintf (buf, sizeof buf, _("Unknown signal %d"), signum); + char *buffer = getbuffer (); + int len = __snprintf (buffer, BUFFERSIZ - 1, +#ifdef SIGRTMIN + signum >= SIGRTMIN && signum <= SIGRTMAX + ? _("Real-time signal %d") : +#endif + _("Unknown signal %d"), signum); if (len < 0) - return NULL; - buf[len - 1] = '\0'; - return buf; + buffer = NULL; + else + buffer[len] = '\0'; + + return buffer; } return (char *) _(desc); } + + +/* Initialize buffer. */ +static void +init (void) +{ + if (__libc_key_create (&key, free_key_mem)) + /* Creating the key failed. This means something really went + wrong. In any case use a static buffer which is better than + nothing. */ + static_buf = local_buf; +} + + +/* Free the thread specific data, this is done if a thread terminates. */ +static void +free_key_mem (void *mem) +{ + free (mem); + __libc_setspecific (key, NULL); +} + + +/* Return the buffer to be used. */ +static char * +getbuffer (void) +{ + char *result; + + if (static_buf != NULL) + result = static_buf; + else + { + /* We don't use the static buffer and so we have a key. Use it + to get the thread-specific buffer. */ + result = __libc_getspecific (key); + if (result == NULL) + { + /* No buffer allocated so far. */ + result = malloc (BUFFERSIZ); + if (result == NULL) + /* No more memory available. We use the static buffer. */ + result = local_buf; + else + __libc_setspecific (key, result); + } + } + + return result; +} diff --git a/string/tst-inlcall.c b/string/tst-inlcall.c new file mode 100644 index 0000000000..3682e88ff6 --- /dev/null +++ b/string/tst-inlcall.c @@ -0,0 +1,76 @@ +/* Tester for calling inline string functions. + Copyright (C) 1998 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 + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +/* Make sure we test the optimized inline functions. */ +#define __USE_STRING_INLINES 1 + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include <fcntl.h> + + +int +main (void) +{ + int status; + int errors = 0; + char buf1[1000]; + char *cp; + char ch; + + cp = strcpy (buf1, "hello world"); + if (strcmp ("hello world", cp++) != 0) + { + puts ("strcmp test 1 failed"); + ++errors; + } + + cp = buf1; + if (strcmp (cp++, "hello world") != 0) + { + puts ("strcmp test 2 failed"); + ++errors; + } + + ch = 'h'; + if (strchr ("hello world", ch++) == NULL) + { + puts ("strchr test 1 failed"); + ++errors; + } + + if (errors == 0) + { + status = EXIT_SUCCESS; + puts ("No errors."); + } + else + { + status = EXIT_FAILURE; + printf ("%Zd errors.\n", errors); + } + exit (status); +} diff --git a/sunrpc/rpc_main.c b/sunrpc/rpc_main.c index 7d64e1b784..a7e18070d0 100644 --- a/sunrpc/rpc_main.c +++ b/sunrpc/rpc_main.c @@ -1016,8 +1016,7 @@ parseargs(int argc, const char *argv[], struct commandline *cmd) size_t len = strlen (argv[i]); pathbuf = malloc (len + 5); if (pathbuf == NULL) { - f_print(stderr, "%s\n", - strerror (errno)); + perror(cmdname); crash(); } stpcpy (stpcpy (pathbuf, diff --git a/sysdeps/alpha/fpu/bits/mathdef.h b/sysdeps/alpha/fpu/bits/mathdef.h index 1c259403f5..2ff626d089 100644 --- a/sysdeps/alpha/fpu/bits/mathdef.h +++ b/sysdeps/alpha/fpu/bits/mathdef.h @@ -63,5 +63,9 @@ typedef double double_t; #endif +/* 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/sysdeps/generic/_strerror.c b/sysdeps/generic/_strerror.c index bcba45d519..e6f56556aa 100644 --- a/sysdeps/generic/_strerror.c +++ b/sysdeps/generic/_strerror.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 93, 95, 96, 97, 98 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,7 +19,8 @@ #include <libintl.h> #include <stdio.h> #include <string.h> -#include "../stdio-common/_itoa.h" +#include <sys/param.h> +#include <stdio-common/_itoa.h> #ifndef HAVE_GNU_LD #define _sys_errlist sys_errlist @@ -41,12 +42,27 @@ _strerror_internal (int errnum, char *buf, size_t buflen) { if (errnum < 0 || errnum >= _sys_nerr) { + /* Buffer we use to print the number in. For a maximum size for + `int' of 8 bytes we never need more than 20 digits. */ + char numbuf[21]; const char *unk = _("Unknown error "); const size_t unklen = strlen (unk); - char *p = buf + buflen; - *--p = '\0'; - p = _itoa_word (errnum, p, 10, 0); - return memcpy (p - unklen, unk, unklen); + char *p, *q; + + numbuf[20] = '\0'; + p = _itoa_word (errnum, &numbuf[20], 10, 0); + + /* Now construct the result while taking care for the destination + buffer size. */ + q = __mempcpy (buf, unk, MIN (unklen, buflen)); + if (unklen < buflen) + __stpncpy (q, p, buflen - unklen); + + /* Terminate the string in any case. */ + if (buflen > 0) + buf[buflen - 1] = '\0'; + + return buf; } return (char *) _(_sys_errlist[errnum]); diff --git a/sysdeps/i386/bits/string.h b/sysdeps/i386/bits/string.h index c6deb2b6a4..c424306bcd 100644 --- a/sysdeps/i386/bits/string.h +++ b/sysdeps/i386/bits/string.h @@ -1,5 +1,5 @@ /* Optimized, inlined string functions. i386 version. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 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 @@ -38,6 +38,7 @@ /* Copy N bytes of SRC to DEST. */ +#define _HAVE_STRING_ARCH_memcpy 1 #define memcpy(dest, src, n) \ (__extension__ (__builtin_constant_p (n) \ ? __memcpy_c (dest, src, n) \ @@ -132,6 +133,7 @@ __memcpy_c (void *__dest, __const void *__src, size_t __n) /* Copy N bytes of SRC to DEST, guaranteeing correct behavior for overlapping strings. */ +#define _HAVE_STRING_ARCH_memmove 1 __STRING_INLINE void * memmove (void *__dest, __const void *__src, size_t __n) { @@ -158,6 +160,7 @@ memmove (void *__dest, __const void *__src, size_t __n) /* Set N bytes of S to C. */ +#define _HAVE_STRING_ARCH_memset 1 #define memset(s, c, n) \ (__extension__ (__builtin_constant_p (c) \ ? (__builtin_constant_p (n) \ @@ -249,27 +252,7 @@ __memset_gg (void *__s, char __c, size_t __n) /* Search N bytes of S for C. */ -__STRING_INLINE void * -memchr (__const void *__s, int __c, size_t __n) -{ - register void *__res; - if (count == 0) - return NULL; - __asm__ __volatile__ - ("cld\n\t" - "repne; scasb\n\t" - "je 1f\n\t" - "movl $1,%0\n" - "1:\n\t" - "decl %0" - : "=D" (__res) - : "a" (__c), "D" (__s), "c" (__n) - : "cx", "cc"); - return __res; -} - - -/* Search N bytes of S for C. */ +#define _HAVE_STRING_ARCH_memchr 1 __STRING_INLINE void * memchr (__const void *__s, int __c, size_t __n) { @@ -291,6 +274,7 @@ memchr (__const void *__s, int __c, size_t __n) /* Return the length of S. */ +#define _HAVE_STRING_ARCH_strlen 1 __STRING_INLINE size_t strlen (__const char *__str) { @@ -307,6 +291,7 @@ strlen (__const char *__str) /* Copy SRC to DEST. */ +#define _HAVE_STRING_ARCH_strcpy 1 __STRING_INLINE char * strcpy (char *__dest, __const char *__src) { @@ -325,6 +310,7 @@ strcpy (char *__dest, __const char *__src) /* Copy no more than N characters of SRC to DEST. */ +#define _HAVE_STRING_ARCH_strncpy 1 __STRING_INLINE char * strncpy (char *__dest, __const char *__src, size_t __n) { @@ -347,6 +333,7 @@ strncpy (char *__dest, __const char *__src, size_t __n) /* Append SRC onto DEST. */ +#define _HAVE_STRING_ARCH_strcat 1 __STRING_INLINE char * strcat (char *__dest, __const char *__src) { @@ -367,6 +354,7 @@ strcat (char *__dest, __const char *__src) /* Append no more than N characters from SRC onto DEST. */ +#define _HAVE_STRING_ARCH_strncat 1 __STRING_INLINE char * strncat (char *__dest, __const char *__src, size_t __n) { @@ -393,6 +381,7 @@ strncat (char *__dest, __const char *__src, size_t __n) /* Compare S1 and S2. */ +#define _HAVE_STRING_ARCH_strcmp 1 __STRING_INLINE int strcmp (__const char *__s1, __const char *__s2) { @@ -419,6 +408,7 @@ strcmp (__const char *__s1, __const char *__s2) /* Compare N characters of S1 and S2. */ +#define _HAVE_STRING_ARCH_strncmp 1 __STRING_INLINE int strncmp (__const char *__s1, __const char *__s2, size_t __n) { @@ -448,6 +438,7 @@ strncmp (__const char *__s1, __const char *__s2, size_t __n) /* Find the first occurrence of C in S. */ +#define _HAVE_STRING_ARCH_strchr 1 #define strchr(s, c) \ (__extension__ (__builtin_constant_p (c) \ ? __strchr_c (s, ((c) & 0xff) << 8) \ @@ -499,6 +490,7 @@ __strchr_c (__const char *__s, int __c) /* Return the length of the initial segment of S which consists entirely of characters not in REJECT. */ +#define _HAVE_STRING_ARCH_strcspn 1 #ifdef __PIC__ __STRING_INLINE size_t strcspn (__const char *__s, __const char *__reject) @@ -558,6 +550,7 @@ strcspn (__const char *__s, __const char *__reject) /* Return the length of the initial segment of S which consists entirely of characters in ACCEPT. */ +#define _HAVE_STRING_ARCH_strspn 1 #ifdef __PIC__ __STRING_INLINE size_t strspn (__const char *__s, __const char *__accept) @@ -616,6 +609,7 @@ strspn (__const char *__s, __const char *__accept) /* Find the first occurrence in S of any character in ACCEPT. */ +#define _HAVE_STRING_ARCH_strpbrk 1 #ifdef __PIC__ __STRING_INLINE char * strpbrk (__const char *__s, __const char *__accept) @@ -682,6 +676,7 @@ strpbrk (__const char *__s, __const char *__accept) /* Find the first occurrence of NEEDLE in HAYSTACK. */ +#define _HAVE_STRING_ARCH_strstr 1 #ifdef __PIC__ __STRING_INLINE char * strstr (__const char *__haystack, __const char *__needle) diff --git a/sysdeps/i386/i486/bits/string.h b/sysdeps/i386/i486/bits/string.h index 210bf7f745..aaa636a56d 100644 --- a/sysdeps/i386/i486/bits/string.h +++ b/sysdeps/i386/i486/bits/string.h @@ -1,5 +1,5 @@ /* Optimized, inlined string functions. i486 version. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 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 @@ -373,7 +373,7 @@ __strlen_g (__const char *__str) : (char *) memcpy (dest, src, strlen (src) + 1)) \ : __strcpy_g (dest, src))) -# define __strcpy_small(dest, src, srclen) \ +#define __strcpy_small(dest, src, srclen) \ (__extension__ ({ unsigned char *__dest = (unsigned char *) (dest); \ switch (srclen) \ { \ @@ -1006,11 +1006,11 @@ __strrchr_c (__const char *__s, int __c) "1:\n\t" "lodsb\n\t" "cmpb %%ah,%%al\n\t" - "cmovne %%esi,%0\n\t" + "cmove %%esi,%0\n\t" "testb %%al,%%al\n\t" "jne 1b" : "=d" (__res) - : "0" (1), "S" (__s),"a" (__c) + : "0" (1), "S" (__s), "a" (__c) : "ax", "si", "cc"); return __res - 1; } @@ -1025,11 +1025,11 @@ __strrchr_g (__const char *__s, int __c) "1:\n\t" "lodsb\n\t" "cmpb %%ah,%%al\n\t" - "cmovne %%esi,%0\n\t" + "cmove %%esi,%0\n\t" "testb %%al,%%al\n\t" "jne 1b" : "=r" (__res) - : "0" (1), "S" (__s),"a" (__c) + : "0" (1), "S" (__s), "a" (__c) : "ax", "si", "cc"); return __res - 1; } diff --git a/sysdeps/unix/sysv/linux/accept.S b/sysdeps/unix/sysv/linux/accept.S index b713a6e267..196634d46a 100644 --- a/sysdeps/unix/sysv/linux/accept.S +++ b/sysdeps/unix/sysv/linux/accept.S @@ -1,4 +1,5 @@ #define socket accept +#define __socket __libc_accept #define NARGS 3 #include <socket.S> -strong_alias (__accept, __libc_accept) +weak_alias (__libc_accept, __accept) diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list index 9406892124..17c55f0991 100644 --- a/sysdeps/unix/sysv/linux/alpha/syscalls.list +++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list @@ -36,20 +36,20 @@ sys_mknod xmknod mknod 3 __syscall_mknod # override select.S in parent directory: select - select 5 __select select -accept - accept 3 __accept accept +accept - accept 3 __libc_accept __accept accept bind - bind 3 __bind bind -connect - connect 3 __connect connect +connect - connect 3 __libc_connect __connect connect getpeername - getpeername 3 __getpeername getpeername getsockname - getsockname 3 __getsockname getsockname getsockopt - getsockopt 5 __getsockopt getsockopt listen - listen 2 __listen listen -recv - recv 4 __recv recv -recvfrom - recvfrom 6 __recvfrom recvfrom -recvmsg - recvmsg 3 __recvmsg recvmsg +recv - recv 4 __libc_recv __recv recv +recvfrom - recvfrom 6 __libc_recvfrom __recvfrom recvfrom +recvmsg - recvmsg 3 __libc_recvmsg __recvmsg recvmsg ptrace - ptrace 4 __ptrace ptrace -send - send 4 __send send -sendmsg - sendmsg 3 __sendmsg sendmsg -sendto - sendto 6 __sendto sendto +send - send 4 __libc_send __send send +sendmsg - sendmsg 3 __libc_sendmsg __sendmsg sendmsg +sendto - sendto 6 __libc_sendto __sendto sendto setsockopt - setsockopt 5 __setsockopt setsockopt shutdown - shutdown 2 __shutdown shutdown socketpair - socketpair 4 __socketpair socketpair diff --git a/sysdeps/unix/sysv/linux/arm/socket.S b/sysdeps/unix/sysv/linux/arm/socket.S index 4d877e51d5..1940061dda 100644 --- a/sysdeps/unix/sysv/linux/arm/socket.S +++ b/sysdeps/unix/sysv/linux/arm/socket.S @@ -31,8 +31,12 @@ The .S files for the other calls just #define socket and #include this. */ -.globl P(__,socket) -ENTRY (P(__,socket)) +#ifndef __socket +#define __socket P(__,socket) +#endif + +.globl __socket +ENTRY (__socket) /* Do the system call trap. */ swi SYS_ify(socketcall) @@ -44,6 +48,6 @@ ENTRY (P(__,socket)) /* Successful; return the syscall's value. */ RETINSTR(mov,pc,r14) -PSEUDO_END (P(__,socket)) +PSEUDO_END (__socket) -weak_alias (P(__,socket), socket) +weak_alias (__socket, socket) diff --git a/sysdeps/unix/sysv/linux/connect.S b/sysdeps/unix/sysv/linux/connect.S index 2840c58174..d1dd69a217 100644 --- a/sysdeps/unix/sysv/linux/connect.S +++ b/sysdeps/unix/sysv/linux/connect.S @@ -1,4 +1,5 @@ #define socket connect +#define __socket __libc_connect #define NARGS 3 #include <socket.S> -strong_alias (__connect, __libc_connect) +weak_alias (__libc_connect, __connect) diff --git a/sysdeps/unix/sysv/linux/i386/socket.S b/sysdeps/unix/sysv/linux/i386/socket.S index 7c539e17d2..f649470122 100644 --- a/sysdeps/unix/sysv/linux/i386/socket.S +++ b/sysdeps/unix/sysv/linux/i386/socket.S @@ -31,8 +31,12 @@ The .S files for the other calls just #define socket and #include this. */ -.globl P(__,socket) -ENTRY (P(__,socket)) +#ifndef __socket +#define __socket P(__,socket) +#endif + +.globl __socket +ENTRY (__socket) /* Save registers. */ movl %ebx, %edx @@ -56,6 +60,6 @@ ENTRY (P(__,socket)) /* Successful; return the syscall's value. */ ret -PSEUDO_END (P(__,socket)) +PSEUDO_END (__socket) -weak_alias (P(__,socket), socket) +weak_alias (__socket, socket) diff --git a/sysdeps/unix/sysv/linux/m68k/socket.S b/sysdeps/unix/sysv/linux/m68k/socket.S index 51aaa4b6f9..81e5a213dd 100644 --- a/sysdeps/unix/sysv/linux/m68k/socket.S +++ b/sysdeps/unix/sysv/linux/m68k/socket.S @@ -31,8 +31,12 @@ The .S files for the other calls just #define socket and #include this. */ -.globl P(__,socket) -ENTRY (P(__,socket)) +#ifndef __socket +#define __socket P(__,socket) +#endif + +.globl __socket +ENTRY (__socket) /* Save registers. */ move.l %d2, %a0 @@ -56,6 +60,6 @@ ENTRY (P(__,socket)) /* Successful; return the syscall's value. */ rts -PSEUDO_END (P(__,socket)) +PSEUDO_END (__socket) -weak_alias (P(__,socket), socket) +weak_alias (__socket, socket) diff --git a/sysdeps/unix/sysv/linux/mips/syscalls.list b/sysdeps/unix/sysv/linux/mips/syscalls.list index 6dd9cd81c5..1c9c095ed3 100644 --- a/sysdeps/unix/sysv/linux/mips/syscalls.list +++ b/sysdeps/unix/sysv/linux/mips/syscalls.list @@ -16,19 +16,19 @@ sigsuspend - sigsuspend 1 __sigsuspend sigsuspend # Socket functions; Linux/MIPS doesn't use the socketcall(2) wrapper; # it's provided for compatibility, though. # -accept - accept 3 __accept accept +ccept - accept 3 __libc_accept __accept accept bind - bind 3 __bind bind -connect - connect 3 __connect connect +connect - connect 3 __libc_connect __connect connect getpeername - getpeername 3 __getpeername getpeername getsockname - getsockname 3 __getsockname getsockname getsockopt - getsockopt 5 __getsockopt getsockopt listen - listen 2 __listen listen -recv - recv 4 __recv recv -recvfrom - recvfrom 6 __recvfrom recvfrom -recvmsg - recvmsg 3 __recvmsg recvmsg -send - send 4 __send send -sendmsg - sendmsg 3 __sendmsg sendmsg -sendto - sendto 6 __sendto sendto +recv - recv 4 __libc_recv __recv recv +recvfrom - recvfrom 6 __libc_recvfrom __recvfrom recvfrom +recvmsg - recvmsg 3 __libc_recvmsg __recvmsg recvmsg +send - send 4 __libc_send __send send +sendmsg - sendmsg 3 __libc_sendmsg __sendmsg sendmsg +sendto - sendto 6 __libc_sendto __sendto sendto setsockopt - setsockopt 5 __setsockopt setsockopt shutdown - shutdown 2 __shutdown shutdown socket - socket 3 __socket socket diff --git a/sysdeps/unix/sysv/linux/net/if.h b/sysdeps/unix/sysv/linux/net/if.h index 468fed23e6..dd33af0337 100644 --- a/sysdeps/unix/sysv/linux/net/if.h +++ b/sysdeps/unix/sysv/linux/net/if.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998 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 @@ -28,24 +28,40 @@ enum { IFF_UP = 0x1, /* Interface is up. */ +#define IFF_UP IFF_UP IFF_BROADCAST = 0x2, /* Broadcast address valid. */ +#define IFF_BROADCAST IFF_BROADCAST IFF_DEBUG = 0x4, /* Turn on debugging. */ +#define IFF_DEBUG IFF_DEBUG IFF_LOOPBACK = 0x8, /* Is a loopback net. */ +#define IFF_LOOPBACK IFF_LOOPBACK IFF_POINTOPOINT = 0x10, /* Interface is point-to-point link. */ +#define IFF_POINTOPOINT IFF_POINTOPOINT IFF_NOTRAILERS = 0x20, /* Avoid use of trailers. */ +#define IFF_NOTRAILERS IFF_NOTRAILERS IFF_RUNNING = 0x40, /* Resources allocated. */ +#define IFF_RUNNING IFF_RUNNING IFF_NOARP = 0x80, /* No address resolution protocol. */ +#define IFF_NOARP IFF_NOARP IFF_PROMISC = 0x100, /* Receive all packets. */ +#define IFF_PROMISC IFF_PROMISC + /* Not supported */ IFF_ALLMULTI = 0x200, /* Receive all multicast packets. */ +#define IFF_ALLMULTI IFF_ALLMULTI IFF_MASTER = 0x400, /* Master of a load balancer. */ +#define IFF_MASTER IFF_MASTER IFF_SLAVE = 0x800, /* Slave of a load balancer. */ +#define IFF_SLAVE IFF_SLAVE IFF_MULTICAST = 0x1000, /* Supports multicast. */ +#define IFF_MULTICAST IFF_MULTICAST IFF_PORTSEL = 0x2000, /* Can set media type. */ +#define IFF_PORTSEL IFF_PORTSEL IFF_AUTOMEDIA = 0x4000 /* Auto media select active. */ +#define IFF_AUTOMEDIA IFF_AUTOMEDIA }; /* The ifaddr structure contains information about one address of an diff --git a/sysdeps/unix/sysv/linux/netinet/ip_fw.h b/sysdeps/unix/sysv/linux/netinet/ip_fw.h index 322467b5ff..2139c37ba7 100644 --- a/sysdeps/unix/sysv/linux/netinet/ip_fw.h +++ b/sysdeps/unix/sysv/linux/netinet/ip_fw.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 93, 95, 96, 97 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 95, 96, 97, 98 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 @@ -125,6 +125,7 @@ struct ip_fw { #define IP_FW_OUT 2 #define IP_FW_ACCT 3 #define IP_FW_CHAINS 4 /* total number of ip_fw chains */ +#define IP_FW_MASQ 5 #define IP_FW_INSERT (IP_FW_BASE_CTL) #define IP_FW_APPEND (IP_FW_BASE_CTL+1) @@ -165,6 +166,11 @@ struct ip_fw { #define IP_ACCT_FLUSH (IP_FW_FLUSH | (IP_FW_ACCT << IP_FW_SHIFT)) #define IP_ACCT_ZERO (IP_FW_ZERO | (IP_FW_ACCT << IP_FW_SHIFT)) +#define IP_FW_MASQ_INSERT (IP_FW_INSERT | (IP_FW_MASQ << IP_FW_SHIFT)) +#define IP_FW_MASQ_ADD (IP_FW_APPEND | (IP_FW_MASQ << IP_FW_SHIFT)) +#define IP_FW_MASQ_DEL (IP_FW_DELETE | (IP_FW_MASQ << IP_FW_SHIFT)) +#define IP_FW_MASQ_FLUSH (IP_FW_FLUSH | (IP_FW_MASQ << IP_FW_SHIFT)) + struct ip_fwpkt { struct iphdr fwp_iph; /* IP header */ @@ -177,6 +183,21 @@ struct ip_fwpkt char fwp_vianame[IFNAMSIZ]; /* interface name */ }; +#define IP_FW_MASQCTL_MAX 256 +#define IP_MASQ_MOD_NMAX 32 + +struct ip_fw_masqctl +{ + int mctl_action; + union { + struct { + char name[IP_MASQ_MOD_NMAX]; + char data[1]; + } mod; + } u; +}; + + /* * timeouts for ip masquerading */ diff --git a/sysdeps/unix/sysv/linux/recv.S b/sysdeps/unix/sysv/linux/recv.S index d895080f9a..cb9eb91b8c 100644 --- a/sysdeps/unix/sysv/linux/recv.S +++ b/sysdeps/unix/sysv/linux/recv.S @@ -1,4 +1,5 @@ #define socket recv +#define __socket __libc_recv #define NARGS 4 #include <socket.S> -strong_alias (__recv, __libc_recv) +weak_alias (__libc_recv, __recv) diff --git a/sysdeps/unix/sysv/linux/recvfrom.S b/sysdeps/unix/sysv/linux/recvfrom.S index a2c94a71bc..93a3110d0a 100644 --- a/sysdeps/unix/sysv/linux/recvfrom.S +++ b/sysdeps/unix/sysv/linux/recvfrom.S @@ -1,4 +1,5 @@ #define socket recvfrom +#define __socket __libc_recvfrom #define NARGS 6 #include <socket.S> -strong_alias (__recvfrom, __libc_recvfrom) +weak_alias (__libc_recvfrom, __recvfrom) diff --git a/sysdeps/unix/sysv/linux/recvmsg.S b/sysdeps/unix/sysv/linux/recvmsg.S index e5d8cdd16a..98be36be5b 100644 --- a/sysdeps/unix/sysv/linux/recvmsg.S +++ b/sysdeps/unix/sysv/linux/recvmsg.S @@ -1,4 +1,5 @@ #define socket recvmsg +#define __socket __libc_recvmsg #define NARGS 3 #include <socket.S> -strong_alias (__recvmsg, __libc_recvmsg) +weak_alias (__libc_recvmsg, __recvmsg) diff --git a/sysdeps/unix/sysv/linux/send.S b/sysdeps/unix/sysv/linux/send.S index 5191265f62..3f5e00ce9e 100644 --- a/sysdeps/unix/sysv/linux/send.S +++ b/sysdeps/unix/sysv/linux/send.S @@ -1,4 +1,5 @@ #define socket send +#define __socket __libc_send #define NARGS 4 #include <socket.S> -strong_alias (__send, __libc_send) +weak_alias (__libc_send, __send) diff --git a/sysdeps/unix/sysv/linux/sendmsg.S b/sysdeps/unix/sysv/linux/sendmsg.S index 6f511af1c7..c01d9b68e7 100644 --- a/sysdeps/unix/sysv/linux/sendmsg.S +++ b/sysdeps/unix/sysv/linux/sendmsg.S @@ -1,4 +1,5 @@ #define socket sendmsg +#define __socket __libc_sendmsg #define NARGS 3 #include <socket.S> -strong_alias (__sendmsg, __libc_sendmsg) +weak_alias (__libc_sendmsg, __sendmsg) diff --git a/sysdeps/unix/sysv/linux/sendto.S b/sysdeps/unix/sysv/linux/sendto.S index b34a609a93..8717b2bac1 100644 --- a/sysdeps/unix/sysv/linux/sendto.S +++ b/sysdeps/unix/sysv/linux/sendto.S @@ -1,4 +1,5 @@ #define socket sendto +#define __socket __libc_sendto #define NARGS 6 #include <socket.S> -strong_alias (__sendto, __libc_sendto) +weak_alias (__libc_sendto, __sendto) diff --git a/sysdeps/unix/sysv/linux/siglist.c b/sysdeps/unix/sysv/linux/siglist.c index 6bb8562899..43b229fc95 100644 --- a/sysdeps/unix/sysv/linux/siglist.c +++ b/sysdeps/unix/sysv/linux/siglist.c @@ -1,14 +1,14 @@ #include <stddef.h> #include <signal.h> -const char * const __new_sys_siglist[NSIG] = +const char * const __new_sys_siglist[NSIG + 1] = { #define init_sig(sig, abbrev, desc) [sig] desc, #include "siglist.h" #undef init_sig }; -const char * const __new_sys_sigabbrev[NSIG] = +const char * const __new_sys_sigabbrev[NSIG + 1] = { #define init_sig(sig, abbrev, desc) [sig] abbrev, #include "siglist.h" diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S b/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S index 4c65ac7f3c..8d6fd77c10 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/socket.S @@ -39,8 +39,12 @@ The .S files for the other calls just #define socket and #include this. */ -.globl P(__,socket) -ENTRY (P(__,socket)) +#ifndef __socket +#define __socket P(__,socket) +#endif + +.globl __socket +ENTRY (__socket) /* Drop up to 6 arguments (recvfrom) into the memory allocated by the caller for varargs, since that's really what we have. */ @@ -71,6 +75,6 @@ ENTRY (P(__,socket)) 1: SYSCALL_ERROR_HANDLER -END (P(__,socket)) +END (__socket) -weak_alias (P(__,socket), socket) +weak_alias (__socket, socket) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list index ca142da29c..3f62a7cd53 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list @@ -14,19 +14,19 @@ mmap - mmap 6 __mmap mmap __mmap64 mmap64 # Override select.S in parent directory: select - select 5 __select select -accept - accept 3 __accept accept +accept - accept 3 __libc_accept __accept accept bind - bind 3 __bind bind -connect - connect 3 __connect connect +connect - connect 3 __libc_connect __connect connect getpeername - getpeername 3 __getpeername getpeername getsockname - getsockname 3 __getsockname getsockname getsockopt - getsockopt 5 __getsockopt getsockopt listen - listen 2 __listen listen -recv - recv 4 __recv recv -recvfrom - recvfrom 6 __recvfrom recvfrom -recvmsg - recvmsg 3 __recvmsg recvmsg -send - send 4 __send send -sendmsg - sendmsg 3 __sendmsg sendmsg -sendto - sendto 6 __sendto sendto +recv - recv 4 __libc_recv __recv recv +recvfrom - recvfrom 6 __libc_recvfrom __recvfrom recvfrom +recvmsg - recvmsg 3 __libc_recvmsg __recvmsg recvmsg +send - send 4 __libc_send __send send +sendmsg - sendmsg 3 __libc_sendmsg __sendmsg sendmsg +sendto - sendto 6 __libc_sendto __sendto sendto setsockopt - setsockopt 5 __setsockopt setsockopt shutdown - shutdown 2 __shutdown shutdown socketpair - socketpair 4 __socketpair socketpair diff --git a/time/africa b/time/africa index 4b56816f40..8286e6f62f 100644 --- a/time/africa +++ b/time/africa @@ -1,4 +1,4 @@ -# @(#)africa 7.22 +# @(#)africa 7.23 # 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 @@ -301,7 +301,7 @@ Zone Africa/Maseru 1:50:00 - LMT 1903 Mar # Liberia # From Paul Eggert <eggert@twinsun.com> (1993-11-18): # In 1972 Liberia was the last country to switch -# from a GMT offset that was not a multiple of 15 minutes. +# from a UTC offset that was not a multiple of 15 minutes. # Howse reports that it was in honor of their president's birthday. # Shanks reports the date as May 1, whereas Howse reports Jan; go with Shanks. # For Liberia before 1972, Shanks reports -0:44, whereas Howse and Whitman diff --git a/time/antarctica b/time/antarctica index 75d2cf63e4..1e6e73eff2 100644 --- a/time/antarctica +++ b/time/antarctica @@ -1,9 +1,16 @@ -# @(#)antarctica 7.10 +# @(#)antarctica 7.12 # From Paul Eggert (1997-03-28): # To keep things manageable, we list only locations occupied year-round; -# see <URL:http://earth.agu.org/amen/nations.html> (1996-05-24) -# and <URL:http://www.spri.cam.ac.uk/bob/periant.htm> (1996-09-05). +# see +# <a href="http://earth.agu.org/amen/nations.html"> +# Antarctic Activities of Member Nations of the Antarctic Treaty (1996-05-24) +# </a> +# and +# <a href="http://www.spri.cam.ac.uk/bob/periant.htm"> +# Summary of the Peri-Antarctic Islands (1996-09-05) +# </a> +# for information. # Unless otherwise specified, we have no time zone information. # # Except for the French entries, @@ -43,8 +50,12 @@ Zone Antarctica/Casey 0 - ___ 1969 Zone Antarctica/Mawson 0 - ___ 1954 Feb 13 6:00 - MAWT # Mawson Time # References: -# <URL:http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html> (1996-07-15) -# <URL:http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html> (1996-04-19) +# <a href="http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html"> +# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html (1996-07-15) +# </a> +# <a href="http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html"> +# http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html (1996-04-19) +# </a> # Brazil - year-round base # Ferraz, King George Island, since 1983/4 @@ -92,7 +103,9 @@ Zone Antarctica/DumontDUrville 0 - ___ 1947 0 - ___ 1956 Nov 10:00 - DDUT # Dumont-d'Urville Time # Reference: -# <URL:http://www.icair.iac.org.nz/science/reports/fr/IFRTP.html> (1996-09-10) +# <a href="http://www.icair.iac.org.nz/science/reports/fr/IFRTP.html"> +# Support and Development of Polar Research and Technology (1996-09-10) +# </a> # Germany - year-round base @@ -198,8 +211,11 @@ Zone Antarctica/McMurdo 0 - ___ 1956 # which was on GMT+12 because New Zealand was on GMT+12 all year # at that time (1957). (Source: Siple's book 90 degrees SOUTH.) # -# From Susan Smith <URL:http://www.cybertours.com/whs/pole10.html> -# (1995-11-13 16:24:56 +1300): We use the same time as McMurdo does. +# From Susan Smith +# <a href="http://www.cybertours.com/whs/pole10.html"> +# http://www.cybertours.com/whs/pole10.html (1995-11-13 16:24:56 +1300): +# </a> +# We use the same time as McMurdo does. # And they use the same time as Christchurch, NZ does.... # One last quirk about South Pole time. # All the electric clocks are usually wrong. @@ -1,4 +1,4 @@ -# @(#)asia 7.33 +# @(#)asia 7.35 # 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 @@ -352,8 +352,11 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov # Iran # From Paul Eggert (1996-12-17), following up a suggestion by Rich Wales: -# Ahmad Alavi <URL:http://tehran.stanford.edu/Iran_Lib/Calendar/taghveem.txt> -# (1993-08-04) writes ``Daylight saving time in Iran starts from the first day +# Ahmea Alavi in +# <a href="http://tehran.stanford.edu/Iran_Lib/Calendar/taghveem.txt"> +# http://tehran.stanford.edu/Iran_Lib/Calendar/taghveem.txt (1993-08-04) +# </a> +# writes ``Daylight saving time in Iran starts from the first day # of Farvardin and ends the first day of Mehr.'' This disagrees with the SSIM: # # DST start DST end @@ -503,7 +506,8 @@ Rule Zion 1987 only - Sep 13 0:00 0 S Rule Zion 1988 only - Apr 9 0:00 1:00 D Rule Zion 1988 only - Sep 3 0:00 0 S -# From Ephraim Silverberg (ephraim@cs.huji.ac.il), 1997-03-04: +# From Ephraim Silverberg <ephraim@cs.huji.ac.il> +# (1997-03-04 and 1997-12-31): # According to the Office of the Secretary General of the Ministry of # Interior, there is NO set rule for Daylight-Savings/Standard time changes. @@ -544,16 +548,18 @@ Rule Zion 1995 only - Sep 3 0:00 0 S # The dates for 1996 were determined by the Minister of Interior of the # time, Haim Ramon. The official announcement regarding 1996-1998 -# (with the dates for 1997 no longer being relevant) can be viewed at: +# (with the dates for 1997-1998 no longer being relevant) can be viewed at: # # ftp://ftp.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz # -# The dates for 1997 were altered by his successor, Rabbi Eli Suissa. -# No changes have been made regarding 1998 as of yet. -# +# The dates for 1997-1998 were altered by his successor, Rabbi Eli Suissa. # The official announcement for the year 1997 can be viewed at: # # ftp://ftp.huji.ac.il/pub/tz/announcements/1997.ps.gz +# +# According to the Office of the Spokeswoman for the Ministry of Interior, +# the dates for 1998 are tentative and are still subject to final approval +# (probably in late February/early March of 1998). # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Zion 1996 only - Mar 15 0:00 1:00 D @@ -561,14 +567,14 @@ Rule Zion 1996 only - Sep 16 0:00 0 S Rule Zion 1997 only - Mar 21 0:00 1:00 D Rule Zion 1997 only - Sep 14 0:00 0 S Rule Zion 1998 only - Mar 20 0:00 1:00 D -Rule Zion 1998 only - Oct 18 0:00 0 S +Rule Zion 1998 only - Sep 6 0:00 0 S -# From Paul Eggert (1997-03-15): +# From Paul Eggert (1998-01-12): # Here are guesses for rules after 1998. # They are probably wrong, but they are more likely than no DST at all. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Zion 1999 max - Mar Fri>=15 0:00 1:00 D -Rule Zion 1999 max - Sep Sun>=15 0:00 0 S +Rule Zion 1999 max - Sep Sun>=1 0:00 0 S # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Jerusalem 2:20:56 - LMT 1880 @@ -774,7 +780,9 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male # Mongolia # Shanks says that Mongolia has three time zones, but usno1995 and -# <URL:http://www.odci.gov/cia/publications/95fact/802389h.gif> (1995) +# <a href="http://www.odci.gov/cia/publications/95fact/802389h.gif"> +# http://www.odci.gov/cia/publications/95fact/802389h.gif (1995) +# </a> # both say that it has just one. # Let's comment out the western and eastern Mongolian time zones # till we know what their principal towns are. @@ -881,13 +889,18 @@ Zone Asia/Singapore 6:55:24 - LMT 1880 # Sri Lanka # From Paul Eggert (1996-09-03): -# <URL:http://www.virtual-pc.com/lankaweb/news/items/240596-2.html> (1996-05-24) +# <a href="http://www.virtual-pc.com/lankaweb/news/items/240596-2.html"> +# http://www.virtual-pc.com/lankaweb/news/items/240596-2.html (1996-05-24) +# </a> # reported ``the country's standard time will be put forward by one hour at # midnight Friday (1830 GMT) `in the light of the present power crisis'.'' # Transitions before 1996 are from Shanks (1991). # # From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted -# in <URL:news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net> (1996-10-26): +# in +# <a href="news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net"> +# news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net (1996-10-26): +# </a> # With effect from 12.30 a.m. on 26th October 1996 # Sri Lanka will be six (06) hours ahead of GMT. @@ -977,9 +990,13 @@ Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2 5:00 - UZT # Uzbekistan Time # Shanks has Tashkent using DST after 1991, but usno1995 says they don't. # Guess no DST after 1991. -# <URL:http://www.odci.gov/cia/publications/95fact/802389h.gif> (1995) +# <a href="http://www.odci.gov/cia/publications/95fact/802389h.gif"> +# http://www.odci.gov/cia/publications/95fact/802389h.gif (1995) +# </a> # says that Uzbekistan has two time zones, but a cable -# <URL:http://www.itaiep.doc.gov/bisnis/cables/960510uz.html> (1996-05-10) +# <a href="http://www.itaiep.doc.gov/bisnis/cables/960510uz.html"> +# http://www.itaiep.doc.gov/bisnis/cables/960510uz.html (1996-05-10) +# </a> # from the American Embassy in Tashkent implies that they have just one. # Vietnam diff --git a/time/australasia b/time/australasia index 2726a25d3d..5121cd32fd 100644 --- a/time/australasia +++ b/time/australasia @@ -1,4 +1,4 @@ -# @(#)australasia 7.37 +# @(#)australasia 7.39 # This file also includes Pacific islands. # Notes are at the end of this file @@ -303,7 +303,7 @@ Rule NZ 1928 only - Nov 4 2:00 0:30 HD Rule NZ 1929 only - Oct 30 2:00 0:30 HD Rule NZ 1930 1933 - Mar Sun>=15 2:00 0 S Rule NZ 1930 1933 - Oct Sun>=8 2:00 0:30 HD -# Whitman says DST went on and off during war years, and the base GMT offset +# Whitman says DST went on and off during war years, and the base UT offset # didn't change until 1945 Apr 30; go with Shanks. Rule NZ 1934 1940 - Apr lastSun 2:00 0 S Rule NZ 1934 1939 - Sep lastSun 2:00 0:30 HD @@ -509,6 +509,26 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # and perhaps the newspaper's `2:00' is referring to standard time. # For now we'll continue to assume 2:00s for changes since 1960. +# From Eric Ulevik <eau@zip.com.au> (1998-01-05): +# +# Here are some URLs to Australian time legislation. These URLs are stable, +# and should probably be included in the data file. There are probably more +# relevant entries in this database. +# +# NSW (including LHI and Broken Hill): +# <a href="http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html"> +# http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html +# </a> +# ACT +# <a href="http://www.austlii.edu.au/au/legis/act/consol_act/consol_act/stasta1972279/i"> +# http://www.austlii.edu.au/au/legis/act/consol_act/consol_act/stasta1972279/i +# </a> +# ndex.html +# SA +# <a href="http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html"> +# http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html +# </a> + # Northern Territory # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06): diff --git a/time/etcetera b/time/etcetera index a6a65db40a..cf1516fe2f 100644 --- a/time/etcetera +++ b/time/etcetera @@ -1,4 +1,4 @@ -# @(#)etcetera 7.8 +# @(#)etcetera 7.9 # These entries are mostly present for historical reasons, so that # people in areas not otherwise covered by the tz files could "zic -l" @@ -20,7 +20,7 @@ Link Etc/GMT Etc/GMT0 # We use POSIX-style signedness in the names and output, # internal-style signedness in the specifications. -# For example, TZ=Etc/GMT+4 corresponds to 4 hours _behind_ GMT; +# For example, TZ=Etc/GMT+4 corresponds to 4 hours _behind_ UTC; # it is equivalent to TZ=GMT+4, which is implemented directly as per POSIX. # Earlier incarnations of this package were not POSIX-compliant, diff --git a/time/europe b/time/europe index 4e30ab4934..dbaa01f2f4 100644 --- a/time/europe +++ b/time/europe @@ -1,4 +1,4 @@ -# @(#)europe 7.49 +# @(#)europe 7.52 # 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 @@ -141,299 +141,355 @@ # If you can predict what Parliament will do, you should be in # politics making a fortune, not computing. -# From Peter Ilieve <peter@memex.co.uk> (1993-09-03): -# -# Our Government...couldn't...make a decision after the 1989 consultation -# exercise about the UK changing its timezone so it just let things drift -# (different from deciding to keep the status quo). According to the -# Summer Time Order 1992 (SI 1992/1729) the dates of Summer Time for 1993 -# and 1994 are: -# Start End -# 1993 28 March 24 October -# 1994 27 March 23 October -# All start and end times are at 01:00 GMT. -# -# There [was] an error in your tables for the start and end times prior to 1981. -# The UK always used to change at 02:00 GMT. In 1981 it changed to 01:00 GMT -# as a part of EC harmonisation and has remained at that time since. -# -# I have found the default algorithm for UK Summer Time, it is in the -# Summer Time Act 1972. Section 1 states that in the absence of an Order -# in Council Summer Time starts at 02:00 GMT on the morning of the day -# after the third Saturday in March, unless that day is Easter Day, in -# which case it is the morning of the day after the second Saturday. -# It ends at 02:00 GMT on the morning of the day after the fourth Saturday -# in October. (All the redundant `morning of the day ...' is in the Act.) -# This is only of passing interest now as it will always be overridden by -# an Order in Council (a Statutory Instrument, the SI thing mentioned above) -# to specify the EC specified dates. - -# From Peter Ilieve <peter@memex.co.uk> (1993-10-18): -# -# My contact in the Ministry of Defence Public Relations department -# accepted the challenge of looking into this and produced the following, -# from Hansard (the official record of the UK Parliament), Oral Answers, -# 1 March 1945, cols 1559--60: -# -# `58. Major Sir Goronwy Owen asked the Secretary of State for the Home -# Department if he is now able to state the Government's proposals -# regarding double summer time. -# -# [two other similar questions omitted] -# -# Mr. H. Morrison: The Government, in reviewing the matter, have -# considered, [...] the conclusion has been reached that the adoption of -# double summer time from the beginning of April is essential to the -# maintenance of the war effort. [...] As 1st April is Easter Sunday, -# when very early services are held in many churches, it is proposed that -# double summer time shall start not in the night preceding Easter -# Sunday, but in the night of Sunday- Monday so that it will operate from -# Monday, 2nd April.' - # From Chris Carrier <72157.3334@CompuServe.COM> (1996-06-14): # I remember reading in various wartime issues of the London Times the # acronym BDST for British Double Summer Time. Look for the published # time of sunrise and sunset in The Times, when BDST was in effect, and # if you find a zone reference it will say, "All times B.D.S.T." -# From Peter Ilieve <peter@memex.co.uk> (1993-09-03): -# -# > # Current rules -# > Rule GB-Eire 1981 max - Mar lastSun 1:00s 1:00 BST -# > Rule GB-Eire 1981 max - Oct Sun>=23 1:00s 0 GMT +# From Peter Ilieve <peter@aldie.co.uk> (1998-01-12): +# The following list attempts to show the complete history of Summer Time +# legislation in the United Kingdom, and has quite a bit to say about +# the Isle of Man and the Channel Islands as well. # -# The ending rule here doesn't match the EC rules, which specify the fourth -# Sunday in October for the UK and Eire. The `fourth Sunday' rule wasn't -# followed in 1989, but then the sixth EC directive wasn't in force then -# and I don't know what previous ones said. 1995 is the next year with -# the 4th Sun on 22 Oct, but that year isn't covered by the UK Summer Time -# Order or the sixth EC directive. Your Oct Sun>=23 rule matches history -# and with things only announced for 2 years or so in advance who knows -# what will happen. +# Things that I have not personally seen are marked (???). Things that +# I haven't seen but Joseph Myers has are marked (jsm). The problem +# with finding old Orders (rather than Acts) is that nobody seems to +# keep the actual documents themselves, not even the Government. They +# get bound into annual volumes, which are published, but by the time +# this happens the Orders are mainly spent as the years they refer +# to have come and gone, so they don't get included in the annual +# volumes. # -# There are renewed rumours that the Government here will make another -# attempt at resolving this issue, which is what prompted me to start -# asking the Home Office and the EC about it again. The EC categorically -# state they are not asking anybody to change timezone, they only want -# common start/end dates. The UK Govt. seem to want to change our zone -# and blame the resulting fuss on the EC. Me, I think we should scrap -# summer time completely, noon is when the Sun is overhead, and that should -# be the end of it. - -# From Peter Ilieve <peter@memex.co.uk> (1993-10-22): +# Thanks are due to my learned legal friend Lorna Montgomerie, who dug out +# the dusty old statutes, to Melanie Allison of the Ministry of Defence, +# who provided the wartime regulations and a snippet of Hansard explaining +# why double summer time started on a Monday in 1945 (it was Easter), +# and to Joseph Myers <jsm28@cam.ac.uk>, who tracked down the Orders +# up to 1945, some of the old Acts, and the first five EC Directives. # -# I now have the text of the Summer Time Act 1916, the granddaddy of them all. -# It is headed: `An Act to provide for the Time in Great Britain and Ireland -# being in advance of Greenwich and Dublin mean time respectively in the -# summer months'. +# Some definitions: # -# It specifies 21 May and 1 October for 1916 (both at 02:00 GMT) and whatever -# dates an Order in Council may specify for subsequent years. +# Great Britain: England, Scotland and Wales +# United Kingdom: Great Britain plus Ireland (up to 1922) or Northern +# Ireland (since 1922) +# S.I.: Statutory Instrument, the modern name for secondary legislation +# S.R.&O.: Statutory Rules and Orders, the older name for secondary legislation # -# Section 4 states: `This act shall apply to Ireland in like manner as it -# applies to Great Britain, with the substitution however of references -# to Dublin mean time for references to Greenwich mean time.' +# Unless otherwise specified, Acts and secondary legislation are assumed +# to apply throughout the United Kingdom, but not to the Isle of Man +# or the Channel Islands. # -# Lorna, my learned legal friend who supplied it, also offers this quote -# from Halsbury's Statutes on the extent of Acts: +# Some of the Acts and Orders I found in various libraries, and I don't +# have copies. When I looked at them I was looking for dates and not things +# like whether they applied to the Bailiwick of Jersey. I will try to +# check these documents again. # -# `An Act of the United Kingdom Parliament is to be construed prima facie -# to apply to the whole of the United Kingdom and not to any place outside. -# [...] The expression "United Kingdom" for this purpose includes (since -# 1922) Great Britain (ie. England, Wales and Scotland) and Northern Ireland, -# but it does not include the Channel Islands or the Isle of Man.' +# --- # -# She goes on to say the seminal event of 1922 was the establishment of -# the Irish Free State, now called Eire. +# - The Statutes (Definition of Time) Act, 1880 (43 & 44 Vict. c. 9) # -# The Act doesn't say anything about Wales (or Scotland) so I would assert -# that Shanks is wrong here. I would like to know why he thinks Wales -# was different. +# Defined Greenwich mean time to be the standard time in Great Britain +# and Dublin mean time to be the standard time in Ireland, superseding +# various forms of local mean time. # -# It also confirms the fact that Ireland followed Dublin time back then, -# and 25 minutes behind Greenwich, as Shanks has it, would be correct. - -# From Peter Ilieve <peter@memex.co.uk> (1993-10-28): +# - The Statutory Time Act, 1883 (???) # -# I now have before me, thanks to my learned legal friend Lorna, the text of -# the Time (Ireland) Act 1916. +# An Act of Tynwald, the Isle of Man Parliament. It appears to have +# defined the standard time on the Isle of Man as GMT but as I haven't +# seen it I don't know if it used Greenwich mean time, some other definition, +# or just said that Isle of Man time would be the same as in Great Britain. # -# It says that as from 2 AM Dublin Mean Time on 1 October 1916 the time -# for general purposes in Ireland shall be the same as the rest of Great -# Britain (ie. GMT with the Summer Time periods specified by the Summer Time -# Act 1916).... As Ireland was behind GMT/BST at 02:00 DMT on 1 Oct GB would -# have already put the clocks back. Using DST as Dublin Summer Time the -# sequence would have been: -# Dublin London -# 02:34 DST 02:59 BST -# 02:35 DST 02:00 GMT -# 02:59 DST 02:24 GMT -# 02:25 GMT 02:25 GMT -# with the transition 03:00 DST -> 02:00 DMT -> 02:25 GMT all at once. +# - The Isle of Man (War Legislation) Act, 1914 (4 & 5 Geo. 5. c. 62) (???) # -# In a table of repeals in the Schedule to the Act it mentions the -# Statutes (Definition of Time) Act 1880. This is presumably the source -# of the 1880 date in Shanks. The little bit of it that is repealed -# also refers solely to Ireland and Dublin Mean Time. - -# From Peter Ilieve <peter@memex.co.uk> (1993-10-29): +# Gives the power, by Order in Council, to extend wartime legislation +# to the Isle of Man. +# +# - The Summer Time Act, 1916 (6 & 7 Geo. 5. c. 14) +# +# Introduced Summer Time for the first time, in Great Britain and Ireland. +# Specified a one hour offset from GMT (DMT in Ireland), dates of +# Sunday 21 May and Sunday 1 October and times of 02:00 (GMT/DMT). +# Gave a power to make Orders in subsequent years, for the duration +# of the then current war. +# +# - The Time (Ireland) Act, 1916 (6 & 7 Geo. 5. c. 45) +# +# This abolished Dublin mean time at 02:00 DMT on Sunday 1 October 1916, +# bringing the whole of the United Kingdom onto GMT. As Ireland was behind +# GMT/BST at 02:00 DMT on 1 Oct Great Britain had already put the clocks back. +# Using Paul Eggert's suggestion of IST for Irish Summer Time and the figure +# derived from Whitman for the offset of IST from GMT (00:34:39) the sequence +# would have been: +# Dublin London +# 02:34:38 IST 02:59:59 BST +# 02:34:39 IST 02:00:00 GMT +# 02:59:59 IST 02:25:20 GMT +# 02:25:21 GMT 02:25:21 GMT +# with the transition 03:00:00 IST -> 02:00:00 DMT -> 02:25:21 GMT all at once. +# +# - S.R.&O. 1916, No. 382 +# +# An Order made under the Isle of Man (War Legislation) Act, 1914 +# extending the Summer Time Act, 1916 to the Isle of Man. Dated +# 23 May 1916, two days after the start of Summer Time, but it says that +# the Act is deemed to have taken effect in the Isle of Man at the same +# time as it took effect in the United Kingdom. +# +# - S.R.&O. 1917, No. 362 +# +# An Order made under the Summer Time Act, 1916 giving dates +# for Summer Time in 1917 of Sunday 8 April to Monday 17 September, +# both at 02:00 GMT. Note that Summer Time ends on a Monday. +# +# - S.R.&O. 1917, No. 358 +# +# An Order made under the Summer Time (Isle of Man) Act, 1916 +# (the thing created by S.R.&O. 1916, No. 382) specifying the same +# dates of 8 April to 17 September, at 02:00 GMT for the Isle of Man. +# +# - S.R.&O. 1918, No. 274 +# +# An Order made under the Summer Time Act, 1916 giving dates +# for Summer Time in 1918 of Sunday 24 March to Monday 30 September, +# both at 02:00 GMT. +# +# - S.R.&O. 1918, No. 429 +# +# The matching Isle of Man Order for 1918 with the same dates and times. +# +# - S.R.&O. 1919, No. 297 +# +# An Order made under the Summer Time Act, 1916 giving dates +# for Summer Time in 1919 of Sunday 30 March to Monday 29 September, +# both at 02:00 GMT. +# +# - S.R.&O. 1919, No. 366 +# +# The matching Isle of Man Order for 1919 with the same dates and times. +# +# - S.R.&O. 1920, No. 458 +# +# An Order made under the Summer Time Act, 1916 giving dates +# for Summer Time in 1920 of Sunday 28 March to Monday 27 September, +# both at 02:00 GMT. +# +# - S.R.&O. 1920, No. 573 +# +# The matching Isle of Man Order for 1920 with the same dates and times. +# +# - S.R.&O. 1920, No. 1844 +# +# An Order modifying both S.R.&O. 1920, No. 458 and S.R.&O. 1920, No. 573 to +# change the end date for Summer Time from Monday 27 September to +# Monday 25 October (the time remaining 02:00 GMT). The 1989 Green +# Paper (Cm 722) says this was done because of a coal strike. +# +# - The War Emergency Laws (Continuance) Act, 1920 (10 & 11 Geo. 5. c. 5) (???) # -# My case is that, with the sole exception of Ireland in 1916 using Dublin -# Mean Time, Summer Time has been uniform throughout the United Kingdom -# ever since it first started in 1916. +# This extends the power to make Orders under the Summer Time Act, 1916 +# for a period of 12 months after the termination of the war. +# I haven't seen this one so I don't know when it came into force, or +# when the law deemed the termination of the war to have been. # -# The United Kingdom is England, Wales and Scotland plus all of Ireland from -# 1916 up to and including 1921, or plus Northern Ireland from 1922 to date. +# - S.R.&O. 1921, No. 363 # -# The dates used are those specified in the table in Summer Time: A Consultation -# Document (Cm 722, 1989) that are now included in the europe file, with a -# change to a single date, the start in 1924. I made a typo in my 1989 mail -# and the table itself is also wrong. The correct date is 13 April. -# The times were 02:00 GMT up to and including 1980, 01:00 GMT from 1981 on, -# except for wartime double summer time. +# An Order made under the Summer Time Act, 1916 and the War +# Emergency Laws (Continuance) Act, 1920 giving dates for Summer Time +# in 1921 of Sunday 3 April to Monday 3 October, both at 02:00 GMT. # -# As evidence I would cite: +# - S.R.&O. 1921, No. 364 # -# - The Summer Time Act, 1916. +# The matching Isle of Man Order for 1921 with the same dates and times. # -# This specifically states that it applies to Ireland, specifies dates of -# 21 May and 1 October and times of 02:00, and says that in Ireland the -# times relate to Dublin mean time. It specifies an offset of 1 hour. -# -# - The Time (Ireland) Act, 1916 -# -# This abolishes Dublin mean time on 02:00 DMT 1 October 1916. -# It repeals that section of the Statutes (Definition of Time) Act, 1880 -# that specifies DMT. It is therefore a safe bet that DMT existed at least -# from 1880 and was the only alternative standard time in the UK. +# - S.R.&O. 1922, No. 264 (???) # -# - The Summer Time Act, 1922 +# This probably defines Summer Time for 1922 as the Summer Time Act, 1922 +# was passed after the start date. Dates from Cm 722: +# 1922: 26 March to 8 October +# +# - S.R.&O. 1922, No. 290 (???) +# +# This is probably the matching Isle of Man Order. +# +# - The Summer Time Act, 1922 (12 & 13 Geo. 5. c. 22) # # This specifies an offset of 1 hour and dates of the day after the third # Saturday in April, unless that be Easter, in which case it is the day after # the second Saturday, and the day after the third Saturday in September. # The time is 02:00 GMT. It applied in 1922 and 1923, and longer if Parliament -# so approved. +# so approved. It applied to the Isle of Man and the Channel Islands as well. +# Came into Force on 20 July 1920. Note the reversion to ending on a Sunday. +# +# - S.R.&O. 1922, No. 1205 +# +# An Order made under the War Emergency Laws (Continuance) Act, 1920 +# dated 13 October 1922. It revokes (among other things) the Order extending +# the Summer Time Act, 1916 to the Isle of Man. +# +# - The Expiring Laws Continuance Act, 1923 (13 & 14 Geo. 5. c. 37) (jsm) +# +# This extended the Summer Time Act, 1922 (among other things) until +# 31 December 1924. +# +# - The Expiring Laws Continuance Act, 1924 (15 Geo. 5. c. 1) (jsm) # -# It specifically states that it applies to Northern Ireland, the Channel -# Islands, and the Isle of Man. +# This further extended the Summer Time Act, 1922 (among other things) until +# 31 December 1925. # -# - The Summer Time Act, 1925 +# - The Time Act (Northern Ireland), 1924 (14 & 15 Geo. 5. c. 24 (N.I.)) +# +# This Act says that while it remains in force, any Act or Order relating +# to the time for general purposes in Great Britain shall also apply +# in Northern Ireland, and the Time (Ireland) Act, 1916 shall have effect +# accordingly. +# +# - The Summer Time Act, 1925 (15 & 16 Geo. 5. c. 64) # # This makes the 1922 Act permanent, with a change to the end date to the -# day after the first Saturday in October. It says nothing about extent, -# so that part of the 1922 Act will still apply. +# day after the first Saturday in October. Came into force on 7 August 1925. +# +# - The Emergency Powers (Defence) Act, 1939 (2 & 3 Geo. 6. c. 62) (???) +# +# I haven't seen this one. It presumably gave the Government powers to +# do all manner of things during the newly started war. # -# - The Defence (Summer Time) Regulations, 1939, SR&O 1939 No. 1379 -# [SR&O == Statutory Regulation and Order] +# - The Defence (Summer Time) Regulations, 1939, S.R.&O. 1939, No. 1379 # # These were made under the Emergency Powers (Defence) Act, 1939. -# It changes the end date to be the day after the third Saturday in November. -# It makes consequential changes to some vehicle lighting legislation, -# which includes the Motor Vehicles and Road Traffic (Northern Ireland) Act, -# 1934, so it seems clear it applies in Northern Ireland. +# They change the end date to be the day after the third Saturday in November. # -# - An Order in Council amending the The Defence (Summer Time) Regulations, -# 1939, SR&O 1940 No. 1883 +# - S.R.&O. 1940, No. 1883 # +# An Order in Council amending the Defence (Summer Time) Regulations, 1939. # This continues summer time throughout the year after it starts in 1940. -# It says nothing about extent and has no consequential changes. +# There was another Order (S.R.&O. 1940, No. 172) that I assume had merely +# changed the dates, to start on 4 February, and was then superseded by this +# one. I haven't seen No. 172 so I don't know what end date it would have +# specified. The dates from Cm 722: +# 1940: Summer Time starts on 4 February # -# - An Order in Council amending the The Defence (Summer Time) Regulations, -# 1939, SR&O 1941 No. 476 +# - S.R.&O. 1941, No. 476 # +# Another Order amending the Defence (Summer Time) Regulations, 1939. # This introduces double summer time, starting at 01:00 GMT on the day after # the first Saturday in May and ending at 01:00 GMT on the day after the # second Saturday in August, offset another hour from normal summer time, -# which continues throughout the rest of the year. It goes on a lot about -# consequential changes to agricultural wages legislation, and says in part -# `... and in its application to Northern Ireland have effect as -# if for the references to the Agricultural Wages (Regulation) Acts, 1924 and -# 1940, there were substituted references to the Agricultural Wages (Regulation) -# Acts (Northern Ireland), 1939 and 1940, ...'. It also has a similar section -# for Scotland. Both sections substitute the local Agricultural Wages Board -# for the Agricultural Wages Board for England and Wales, showing that -# England and Wales were indivisible. -# -# - An Order in Council amending the The Defence (Summer Time) Regulations, -# 1939, SR&O 1942 No. 506 -# -# This changes the start date of double summer time to the day after the first -# Saturday in April. It says nothing about extent. -# -# - An Order in Council amending the The Defence (Summer Time) Regulations, -# 1939, SR&O 1944 No. 932 -# -# This changed the end date of double summer time to 17 September 1944. +# which continues throughout the rest of the year. +# +# - S.R.&O. 1942, No. 506 +# +# Another Order amending the Defence (Summer Time) Regulations, 1939. +# This changes the start date of Double Summer Time to the day after the first +# Saturday in April, bringing it forward from May. +# +# - S.R.&O. 1944, No. 932 +# +# This changed the end date of Double Summer Time to 17 September 1944. # (I don't have the text of this, just a note of what it did, the text almost # certainly had the `day after the nth Saturday' form.) # -# (I am missing whatever regulations there were to change things in 1945 -# and the Summer Time Act, 1947.) +# - S.R.&O. 1945, No. 312 (???) # -# - The British Standard Time Act, 1968 +# Probably defines the dates of Double Summer Time in 1945. +# I do have this quote from Hansard (the official record of the United Kingdom +# Parliament), Oral Answers, 1 March 1945, cols 1559--60: # -# This came into force on 27 October 1968 and continued summer time throughout -# the year as an experiment until it expired on 31 October 1971. -# There was no double summer time so we didn't have to change the clocks at all. -# It specifically said it applied to Northern Ireland. It also said it -# applied to Jersey, Guernsey and the Isle of Man unless they passed -# measures saying it didn't. +# `58. Major Sir Goronwy Owen asked the Secretary of State for the Home +# Department if he is now able to state the Government's proposals +# regarding double summer time. # -# - The Manx Time Act, 1968 +# [two other similar questions omitted] # -# This is an Act of Tynwald (the Isle of Man Parliament) that said that -# henceforth Manx time would be the same as the time in Great Britain. +# Mr. H. Morrison: The Government, in reviewing the matter, have +# considered, [...] the conclusion has been reached that the adoption of +# double summer time from the beginning of April is essential to the +# maintenance of the war effort. [...] As 1st April is Easter Sunday, +# when very early services are held in many churches, it is proposed that +# double summer time shall start not in the night preceding Easter +# Sunday, but in the night of Sunday-Monday so that it will operate from +# Monday, 2nd April.' # -# - The Summer Time Act, 1972 +# Cm 722 gives dates of: +# 1945: Double Summer time: 2 April to 15 July +# 1945: Summer Time ends on 7 October # -# This specified a reversion to normal summer time behaviour with a start -# date of the day after the third Saturday in March, unless that is Easter, -# when it is the day after the second Saturday, and an end date of the day -# after the fourth Saturday in October. Times are at 02:00 GMT, offset is -# 1 hour. +# - S.R.&O. 1945, No. 1208 # -# It has the same wording about extent as the British Standard Time Act, 1968, -# applying to Northern Ireland unconditionally and to Jersey, Guernsey and the -# Isle of Man if they don't do something about it. +# An Order under the Emergency Powers (Defence) Acts, 1939 and 1940 revoking +# a long list of things, including the Defence (Summer Time) Regulations, 1939. +# This meant that Summer Time reverted to being set by the 1922 and 1925 Acts. # -# (I am missing various Summer Time Orders that modified the 1972 Act to -# harmonise with the EC since 1981. The major change is that the time changes -# to 01:00 GMT.) +# - The Summer Time Act, 1947 (10 & 11 Geo. 6. c. 16) # -# - The Summer Time Order, 1992, SI 1992/1729 [SI == Statutory Instrument] +# Came into force on 11 March 1947. Amended the Summer Time Acts, 1922 and +# 1925 to change the dates of Summer Time and to introduce Double Summer Time +# (although it doesn't give this, or any, name for this period of 2 hour +# offset from GMT). Dates are given for 1947 only and are: 02:00 GMT Sunday +# 16 March, 01:00 GMT Sunday 13 April, 01:00 GMT Sunday 10 August, and 02:00 +# Sunday 2 November. It gave a power to make Orders for subsequent years, +# both to vary the dates and to continue Double Summer Time. It applied +# to the Isle of Man and the Channel Islands. # -# This specifies dates of: -# Start End -# 1993 28 March 24 October -# 1994 27 March 23 October -# All start and end times are at 01:00 GMT.... +# - Summer Time Order, 1948 (S.I. 1948/495) (???) +# - Summer Time Order, 1949 (S.I. 1949/373) (???) +# - Summer Time Order, 1950 (S.I. 1950/518) (???) +# - Summer Time Order, 1951 (S.I. 1951/430) (???) +# - Summer Time Order, 1952 (S.I. 1952/451) (???) # -# - Some text on the extent of Acts, from Halsbury's Statutes +# These presumably give the dates of Summer Time for the relevent years. +# There was no Double Summer Time. The dates given in the 1989 Green Paper +# for these years are: +# 1948: 14 March to 31 October +# 1949: 3 April to 30 October +# 1950: 16 April to 22 October +# 1951: 15 April to 21 October +# 1952: 20 April to 26 October +# After 1952 things revert back to the 1922 and 1925 Acts. # -# `An Act of the United Kingdom Parliament is to be construed prima facie -# to apply to the whole of the United Kingdom and not to any place outside. -# [...] The expression "United Kingdom" for this purpose includes (since -# 1922) Great Britain (ie. England, Wales and Scotland) and Northern Ireland, -# but it does not include the Channel Islands or the Isle of Man.' +# - The Interpretation Act (Northern Ireland), 1954 (1954 c. 33 (N.I.)) (???) # -# So, many of these measures specifically include Northern Ireland, -# the Channel Islands and the Isle of Man. None of them exclude any -# part of the UK. The default interpretation of Acts is that they apply -# throughout the UK. +# I presume that section 39 of this Act is similar to section 9 of the +# Interpretation Act, 1978 (listed below) in specifying GMT as the +# legal time in Northern Ireland, replacing the Time (Ireland) Act, 1916. # -# With that, I rest my case Milud :-) +# - Summer Time Order, 1961 (S.I. 1961/71) # -# Thanks are due to my learned legal friend Lorna Montgomerie, who dug out -# the dusty old statutes, and to Melanie Allison of the Ministry of Defence, -# who provided the wartime regulations and a snippet of Hansard explaining -# why double summer time started on a Monday in 1945 (it was Easter). - -# From Peter Ilieve <peter@aldie.co.uk> (1996-05-29): -# I have now got a copy of the British Standard Time Act 1968. -# It says (S4(2)) that it expires at 02:00 GMT on 31 October 1971 unless -# an Order in Council was passed in Parliament to make the Act permanent. -# No Order was passed, so 02:00 1971-10-31 it is... +# Specified dates of 26 March and 29 October (02:00 GMT) for 1961 +# +# - Summer Time (1962) Order, 1961 (S.I. 1961/2465) +# +# Specified dates of 25 March to 28 October (02:00 GMT) for 1962. +# +# - Summer Time Order, 1963 (S.I. 1963/81) +# +# Specified dates of 31 March to 27 October (02:00 GMT) for 1963. +# +# - Summer Time (1964) Order, 1963 (S.I. 1963/2101) +# +# Specified dates of 22 March to 25 October (02:00 GMT) for 1964. +# +# - Summer Time Order, 1964 (S.I. 1964/1201) +# +# Specified dates for three years (all 02:00 GMT): +# 1965: 21 March to 24 October +# 1966: 20 March to 23 October +# 1967: 19 March to 29 October +# +# - Summer Time Order, 1967 (S.I. 1967/1148) +# - Summer Time Order, 1968 (S.I. 1968/117) +# +# The first of these specifies dates for 1968 of 18 February for the United +# Kingdom but 7 April for the Isle of Man, both ending on 27 October, +# all at 02:00 GMT. The second Order changes the Isle of Man start date +# to 18 February to match the United Kingdom. +# +# - The British Standard Time Act 1968 (1968 c. 45) +# +# This came into force on 27 October 1968 and continued summer time throughout +# the year. It expired at 02:00 GMT on 31 October 1971, as specified in the +# Act, as Parliament did not move to make this experment permanent. +# It applied to the Isle of Man and the Channel Islands. # # Interestingly, it says baldly `This Act shall come into force on # 27 October 1968', without giving a time. As S1 of the Act merely @@ -443,218 +499,182 @@ # possibly argue that the start time of BStandardT was 00:00 1968-10-27, # especially as the Act repealed the Summer Time Acts 1916--1947 in toto, # thereby destroying the authority of the Summer Time Order specifying -# summer time in 1968.... - -# From Peter Ilieve <peter@memex.co.uk> (1993-11-18) -# -# Here is a revised version of my tabrules file for the perl script I sent -# before. I have personally verified the various Orders back to 1953 and -# all the Acts. -# -# There are no changes to the dates we already have. -# -# My doubt about an early start in 1967 on 18 Feb was misplaced, the Order -# does say 18 Feb. This is an interesting case as the first Order gave a -# different date of 7 April 1967 for the Isle of Man but this was changed -# before it came into effect by another Order for the Isle of Man alone. -# -# I don't think I will be able to find any more of the earlier Orders. -# The annual volumes for 1949--52 do not contain the various Summer Time -# Orders. They therefore don't appear in the index. They rate a mention in -# italics in the numerical list at the start but that is all. -# I think what happens is that the annual volume is produced well after the -# end of the year in question, by which time the Summer Time Order is spent. -# They assume that nobody would ever be stupid enough to want to see it -# again so they leave it out. -# -# It might be a good idea to put this table, or the output of tabscript -# showing all the moves because of Easter, in the europe file comments in -# place of my old transcription of the Green Paper table [the UK Government -# paper "Summer Time: A Consultation Document" (HMSO Cm722 June 1989)]. -# -# Peter Ilieve peter@memex.co.uk -# -# -# ## control file for tabscript, a program to generate UK summer time dates -# ## matching the table in Cm 722, the 1989 Green Paper. -# ## Lines like this are comments. -# ## Lines with a single # at the start are copied into the output -# ## Control lines are of the form -# ## <years> <start date> <end date> <flags> <double start> <double end> -# ## <years> is either a single year or a hyphen separated range, with -- -# ## also accepted as I use this in TeX a lot. -# ## <start date> and <end date> are a digit followed bu a month name. -# ## It is either an nth Saturday or an explicit date, depending on <flags>. -# ## 0 and/or none are used when there is no date, as during 1968--71. -# ## <flags> can contain `fixed' to indicate explicit dates and `double' -# ## to indicate double summer time dates are present. -# ## At present double requires fixed as well. -# ## <double start> and <double end> are like the start and end dates, with -# ## the exception of the 0 and/or none feature. -# -# ## Blank lines are also ignored. -# -# ## Places where I am uncertain, not having personally verified the dates -# ## against the Act or Order, are marked ??? -# ## These dates are taken from the Cm 722 table. -# -# # Summer Time Act, 1916 -# 1916 21 May 1 October fixed -# -# ## I haven't yet looked for Orders for 1916--22 and I doubt I will find them. -# # unknown Order or Orders ??? -# 1917 8 apr 17 sep fixed -# 1918 24 mar 30 sep fixed -# 1919 30 mar 29 sep fixed -# # end date extended in 1920 from 27 Sep because of coal strike (from Cm 722) -# 1920 28 mar 25 oct fixed -# 1921 3 apr 3 oct fixed -# -# # Summer Time Act, 1922 -# # came into force 22 July 1922, too late for 1922, so missing Order ??? -# 1922 26 mar 8 oct fixed -# 1923-1924 3 April 3 September -# -# # Summer Time Act, 1925 -# 1925--1938 3 April 1 October -# -# # Defence (Summer Time) Regulations, 1939 -# 1939 3 April 3 November -# # 1940 amendment (SR&O 1940 Nos. 172 & 1883) -# 1940 4 feb 0 none -# # 1941 amendment (SR&O 1941 No. 476) -# 1941 0 none 0 none fixed,double 4 may 10 aug -# # 1942 amendment (SR&O 1942 No. 506) -# 1942 0 none 0 none fixed,double 5 apr 9 aug -# 1943 0 none 0 none fixed,double 4 apr 15 aug -# # 1944 amendment (SR&O 1944 No. 932) -# 1944 0 none 0 none fixed,double 2 apr 17 sep -# # 1945 dates from Hansard, Oral Answers, 1 March 1945 -# 1945 0 none 7 oct fixed,double 2 apr 15 jul -# -# # reversion to Summer Time Act, 1925 -# 1946 3 April 1 October -# -# # Summer Time Act, 1947 -# # Fixed dates for 1947 only, gives power to have double summer time -# 1947 16 mar 2 nov fixed,double 13 apr 10 aug -# ## I can't find any trace of the Order for 1948. -# # Unknown Order ??? -# 1948 14 mar 31 oct fixed -# ## I know the numbers for the 1949--52 ones but the text is missing from the -# ## annual volumes. I also don't know if the 49 Order was for 49 or 50, etc. -# # Summer Time Order, 1949 (SI1949/373) ??? -# 1949 3 apr 30 oct fixed -# # Summer Time Order, 1950 (SI1950/518) ??? -# 1950 16 apr 22 oct fixed -# # Summer Time Order, 1951 (SI1951/430) ??? -# 1951 15 apr 21 oct fixed -# # Summer Time Order, 1952 (SI1952/451) ??? -# 1952 20 apr 26 oct fixed -# -# # reversion to Summer Time Act, 1925 -# 1953--1960 3 April 1 October -# -# ## All Orders from here on specify fixed dates, not day after nth Sunday -# ## Start pattern looks like Mar lastSun up to 1963, Mar Sun>=19 up to 1967. -# ## End pattern looks like Oct Sun>=23 up to 1967. -# # Summer Time Order, 1961 (SI1961/71) -# 1961 26 March 29 October fixed -# # Summer Time (1962) Order, 1961 (SI1961/2465) -# 1962 25 Mar 28 Oct fixed -# # Summer Time Order, 1963 (SI1963/81) -# 1963 31 March 27 October fixed -# # Summer Time (1964) Order, 1963 (SI1963/2101) -# 1964 22 March 25 October fixed -# # Summer Time Order, 1964 (SI1964/1201) -# 1965 21 Mar 24 Oct fixed -# 1966 20 Mar 23 Oct fixed -# 1967 19 Mar 29 Oct fixed -# # Summer Time Order, 1967 (SI1967/1148) -# # Specifies different start date of 7 April for Isle of Man -# # Summer Time Order, 1968 (SI1968/117) -# # Changes Isle of Man start date to 18 Feb to match rest of UK -# # British Standard Time Act, 1968 -# 1968 18 feb 0 none fixed -# 1969--1970 0 none 0 none -# 1971 0 none 31 oct fixed -# -# # Summer Time Act, 1972 -# 1972-1980 3 March 4 October -# -# # The pattern here looks like Last Sun in Mar, day after 4th Sat in Oct -# # First EC Directive ??? -# # Summer Time Order, 1980 (SI1980/1089) -# 1981 29 Mar 25 Oct fixed -# 1982 28 Mar 24 Oct fixed -# # Second EC Directive ??? -# # Summer Time Order, 1982 (SI1982/1673) -# 1983 27 Mar 23 Oct fixed -# 1984 25 Mar 28 Oct fixed -# 1985 31 Mar 27 Oct fixed -# # Third EC Directive ??? -# # Summer Time Order, 1986 (SI1986/223) -# 1986 30 Mar 26 Oct fixed -# 1987 29 Mar 25 Oct fixed -# 1988 27 Mar 23 Oct fixed -# # Fourth EC Directive ??? -# # Summer Time Order, 1988 (SI1988/931) -# 1989 26 Mar 29 Oct fixed -# # Fifth EC Directive ??? -# # Summer Time Order, 1989 (SI1989/985) -# 1990 25 Mar 28 Oct fixed -# 1991 31 Mar 27 Oct fixed -# 1992 29 Mar 25 Oct fixed -# # Sixth EC Directive -# # Summer Time Order, 1992 (SI1992/1729) -# 1993 28 Mar 24 Oct fixed -# 1994 27 Mar 23 Oct fixed - -# From Peter Ilieve <peter@memex.co.uk> (1994-08-18): -# I now have the text of the 7th EC directive on summer time arrangements -# (94/21/EC), which was approved on 30 May.... -# The major changes from existing practice are that 1995 will be the last year -# that the UK and Eire finish on a different date from everyone else, -# and the common end date from 1996 onwards will be the last Sunday in October. -# Year Start End End (UK & Eire, 1995 only) -# (rule) (last Sun) (last Sun) (4th Sun) -# 1995 26 March 24 September 22 October -# 1996 31 March 27 October -# 1997 30 March 26 October -# -# From Peter Ilieve <peter@memex.co.uk> (1994-12-01): -# The final piece of the legislative jigsaw for summer time in the UK for -# 1995-97 is now in place. The Summer Time Order 1994 (SI 1994/2798) -# came into force on 16 November. It restates the dates from the EC -# seventh Summer Time Directive.... -# -# From Peter Ilieve <peter@aldie.co.uk> (1997-08-06): -# I now have a copy of the ... Eighth Directive 97/44/EC of the European -# Parliament and of the Council of 22 July 1997 on summer-time arrangements. -# It runs for 4 years, 1998--2001, and confirms the current rules of -# last Sunday in March to last Sunday in October.... -# The directive does not apply in overseas territories of the Member States. -# It says the Commission should produce a proposal for 2002 and beyond -# by 1 Jan 2000 and this should be adopted by 1 Jan 2001. I doubt that -# this will happen though.... -# There is no mention of the French desire to abandon the whole idea. -# France has had a change of government recently so maybe it will -# be quietly dropped. - -# From Peter Ilieve <peter@memex.co.uk> (1994-03-28): -# The [GB-Eire] end date of 22 October [1995] conflicts with your current rule -# of Oct Sun>=23, and the historical UK formula of Sun after 4th Sat. -# The last time 4th Sun and Sun after 4th Sat differed was in 1989, -# when 29 October was used. That year was covered by a UK Summer Time Order -# for only a single year and it looks as though there was a matching 4th EC -# directive for just this year. I don't have the text of the 5th EC -# directive (for 1990--92) but my guess would be it said 4th Sun. -# To maintain strict historical accuracy you could start a new UK ending rule -# of Oct Sun>=22 in 1990. +# summer time in 1968. +# +# - The Manx Time Act 1968 +# +# This is an Act of Tynwald (the Isle of Man Parliament) that said that +# henceforth Manx time would be the same as the time in Great Britain. +# +# - The Summer Time Act 1972 (1972 c. 6) +# +# This specified a reversion to normal Summer Time behaviour with a start +# date of the day after the third Saturday in March, unless that is Easter, +# when it is the day after the second Saturday, and an end date of the day +# after the fourth Saturday in October. Times are at 02:00 GMT, offset is +# 1 hour. It gives the power to make Orders to vary these dates and +# times. This Act is still in force and is the legal authority for +# implementing the EC Directives in the United Kingdom. +# +# - The Interpretation Act 1978 (1978 c. 30) +# +# Section 9 of this Act replaces section 1 of the Statutes (Definition of +# Time) Act, 1880 with very similar wording maintaining GMT as the legal +# time in Great Britain. This does not apply in Northern Ireland (it +# has its own Interpretation Act listed above). +# +# - Council Directive of 22 July 1980 on summertime arrangements (80/737/EEC) +# +# The first of the European Directives on Summer Time. It specified start +# dates for 1981 and 1982. No agreement had been reached on end dates. +# Only dates were given, there was no rule like `last Sunday in March'. +# The main change for the United Kingdom was a move to a 01:00 GMT change +# time. The dates: +# 1981: 29 March +# 1982: 28 March +# +# - Summer Time Order, 1980 (S.I. 1980/1089) +# +# Specified dates for 1981 and 1982, with the start dates as in the +# EC Directive and all times 01:00 GMT: +# 1981: 29 March to 25 October +# 1982: 28 March to 24 October +# +# - Second Council Directive of 10 June 1982 on summertime arrangements +# (82/399/EEC) +# +# The next European Directive. Specified dates for three years, 1983 to 1985. +# Agreement still hadn't been reached on a common end date, and wouldn't +# be until 1994 with the appeareance of the seventh Directive with a common +# date for 1996 and beyond, but this time the Directive gave two sets of +# end dates. The start date was specified by rule: the last Sunday in March. +# All times were 01:00 GMT. The end dates were given without rule, as: +# 1983: 25 September or 23 October +# 1984: 30 September or 28 october +# 1985: 29 September or 27 October +# +# - Summer Time Order, 1982 (S.I. 1982/1673) +# +# Implemented the second EC Directive, using the October end dates. +# 1983: 27 March to 23 October +# 1984: 25 March to 28 october +# 1985: 31 March to 27 October +# +# - Third Council Directive of 12 December 1984 on summertime arrangements +# (84/634/EEC) +# +# Specified start dates of the last Sunday in March and two sets of end +# dates, last Sunday in September and fourth Sunday in October, all at +# 01:00 GMT. The end dates were also specified as dates: +# 1986: 28 September or 26 October +# 1987: 27 September or 25 October +# 1988: 25 September or 23 October +# +# - Summer Time Order, 1986 (S.I. 1986/223) +# +# Implemented the third EC Directive, using the October end dates. +# 1986: 30 March to 26 October +# 1987: 29 March to 25 October +# 1988: 27 March to 23 October +# +# - Council Directive of 20 December 1985 amending Directive 84/634/EEC +# on summertime arrangements (85/582/EEC) +# +# This was to do with the accession of Spain and Portugal to the EEC. +# The previous directve had used wording like `Member States belonging +# to the zero (Greenwich) time zone' when refering to the different +# sets of end dates. Portugal was in that time zone but was not going +# to follow the United Kingdom and Ireland dates, so the text was reworded +# without any change to the dates themselves. +# +# - Fourth Council Directive of 22 December 1987 on summertime arrangements +# (88/14/EEC) +# +# This Directive covered only a single year: 1989. My guess is that +# this was because 1989 was one of the years when the historic United Kingdom +# end date of the Sunday after the fourth Saturday in October differed from +# the rule in the previous Directive of the fourth Sunday in October. +# All times are 01:00 GMT. No rule was specified, specific dates were given: +# 1989: 26 March to 24 September or 29 October +# +# - Summer Time Order, 1988 (S.I. 1988/931) +# +# Implemented the dates of 26 March to 29 October for 1989. +# +# - Fifth Council Directive of 21 December 1988 on summertime arrangements +# (89/47/EEC) +# +# Covered the three years 1990 to 1992. All times are 01:00 GMT. Gave both +# rules (last Sunday in March, last Sunday in September or fourth Sunday +# in October) and specific dates: +# 1990: 25 March to 30 September or 28 October +# 1991: 31 March to 29 September or 27 October +# 1992: 29 March to 27 September or 25 October +# +# - Summer Time Order, 1989 (S.I. 1989/985) +# +# Implemented the fifth Directive using the October end dates. +# +# - Sixth Council Directive 92/20/EEC of 26 March 1992 on summertime +# arrangements +# +# Covered the two years 1993 and 1994. All times are 01:00 GMT. Specified +# both rules (same as the fifth Directive) and specific dates: +# 1993: 28 March to 26 September or 24 October +# 1994: 27 March to 25 September or 23 October +# +# - Summer Time Order, 1992 (S.I. 1992/1729) +# +# Implemented the sixth Directive using the October end dates. +# +# - Seventh Directive 94/21/EC of the European Parliament and of the Council +# of 30 May 1994 on summer-time arrangements +# +# Covered the three years 1995 to 1997. Agreement had finally been reached +# on a common end date, to start in 1996. Both rules and dates were given. +# The rules were the same last Sunday in March to last Sunday in September +# or fourth Sunday in October for 1995, with the end rule changing to the +# last Sunday in October for 1996 and 1997. The year 1995 was another of +# the tricky ones where the EC and traditional United Kingdom rules differed +# but this time the UK changed on the fourth Sunday, 22 October, earlier +# than usual. All times are 01:00 GMT. Specific dates were also given: +# 1995: 26 March to 24 September or 22 October +# 1996: 31 March to 27 October +# 1997: 30 March to 26 October +# +# - Summer Time Order 1994 (S.I. 1994/2798) +# +# Implements the seventh Directive using the October end date in 1995. +# Applies also to the Bailiwick of Guernsey but not to the Bailiwick of +# Jersey or the Isle of Man, which have their own (unspecified) legislation +# on the subject. +# +# - Eighth Directive 97/44/EC of the European Parliament and of the Council +# of 22 July 1997 on summer-time arrangements +# +# Covers four years: 1998 to 2001. All times are 01:00 GMT. Specifies both +# rules, last Sunday in March and last Sunday in October, and specific dates: +# 1998: 29 March to 25 October +# 1999: 28 March to 31 October +# 2000: 26 March to 29 October +# 2001: 25 March to 28 October +# +# - Summer Time Order 1997 (S.I. 1997/2982) +# +# Implements the eighth Directive. Has the same text about the Isle of Man, +# Guernsey and Jersey as the 1994 Order. + +# From Joseph S. Myers <jsm28@hermes.cam.ac.uk> (1998-01-06): +# +# The legal time in the UK outside of summer time is definitely GMT, not UTC; +# see Lord Tanlaw's speech +# <a href="http://www.parliament.the-stationery-office.co.uk/pa/ld199697/ldhansrd/pdvn/lds97/text/70611-20.htm#70611-20_head0"> +# (Lords Hansard 11 June 1997 columns 964 to 976) +# </a>. # From Paul Eggert <eggert@twinsun.com> (1996-06-12): # -# As Ilieve remarks, the date `20 April 1924' in the table of ``Summer Time: A +# The date `20 April 1924' in the table of ``Summer Time: A # Consultation Document'' (Cm 722, 1989) table is a transcription error; # 20 April was an Easter Sunday. Shanks has 13 April, the correct date. # Also, the table is not quite right for 1925 through 1938; the correct rules @@ -695,79 +715,112 @@ # "Irish Summer Time", abbreviated to "IST". # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -# 1916 to 1925--irregular +# Summer Time Act, 1916 Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST Rule GB-Eire 1916 only - Oct 1 2:00s 0 GMT +# S.R.&O. 1917, No. 358 Rule GB-Eire 1917 only - Apr 8 2:00s 1:00 BST Rule GB-Eire 1917 only - Sep 17 2:00s 0 GMT +# S.R.&O. 1918, No. 274 Rule GB-Eire 1918 only - Mar 24 2:00s 1:00 BST Rule GB-Eire 1918 only - Sep 30 2:00s 0 GMT +# S.R.&O. 1919, No. 297 Rule GB-Eire 1919 only - Mar 30 2:00s 1:00 BST Rule GB-Eire 1919 only - Sep 29 2:00s 0 GMT +# S.R.&O. 1920, No. 458 Rule GB-Eire 1920 only - Mar 28 2:00s 1:00 BST +# S.R.&O. 1920, No. 1844 Rule GB-Eire 1920 only - Oct 25 2:00s 0 GMT +# S.R.&O. 1921, No. 363 Rule GB-Eire 1921 only - Apr 3 2:00s 1:00 BST Rule GB-Eire 1921 only - Oct 3 2:00s 0 GMT +# S.R.&O. 1922, No. 264 Rule GB-Eire 1922 only - Mar 26 2:00s 1:00 BST +# The Summer Time Act, 1922 Rule GB-Eire 1922 only - Oct 8 2:00s 0 GMT Rule GB-Eire 1923 only - Apr Sun>=16 2:00s 1:00 BST Rule GB-Eire 1923 1924 - Sep Sun>=16 2:00s 0 GMT -Rule GB-Eire 1924 only - Apr 13 2:00s 1:00 BST -# 1925 to 1939 start--regular, except for avoiding Easter +Rule GB-Eire 1924 only - Apr Sun>=9 2:00s 1:00 BST Rule GB-Eire 1925 1926 - Apr Sun>=16 2:00s 1:00 BST +# The Summer Time Act, 1925 Rule GB-Eire 1925 1938 - Oct Sun>=2 2:00s 0 GMT -Rule GB-Eire 1927 only - Apr 10 2:00s 1:00 BST +Rule GB-Eire 1927 only - Apr Sun>=9 2:00s 1:00 BST Rule GB-Eire 1928 1929 - Apr Sun>=16 2:00s 1:00 BST -Rule GB-Eire 1930 only - Apr 13 2:00s 1:00 BST +Rule GB-Eire 1930 only - Apr Sun>=9 2:00s 1:00 BST Rule GB-Eire 1931 1932 - Apr Sun>=16 2:00s 1:00 BST -Rule GB-Eire 1933 only - Apr 9 2:00s 1:00 BST +Rule GB-Eire 1933 only - Apr Sun>=9 2:00s 1:00 BST Rule GB-Eire 1934 only - Apr Sun>=16 2:00s 1:00 BST -Rule GB-Eire 1935 only - Apr 14 2:00s 1:00 BST +Rule GB-Eire 1935 only - Apr Sun>=9 2:00s 1:00 BST Rule GB-Eire 1936 1937 - Apr Sun>=16 2:00s 1:00 BST -Rule GB-Eire 1938 only - Apr 10 2:00s 1:00 BST +Rule GB-Eire 1938 only - Apr Sun>=9 2:00s 1:00 BST Rule GB-Eire 1939 only - Apr Sun>=16 2:00s 1:00 BST -# 1939 end to 1947--irregular, and with double summer time -Rule GB-Eire 1939 only - Nov 19 2:00s 0 GMT +# S.R.&O. 1939, No. 1379 +Rule GB-Eire 1939 only - Nov Sun>=16 2:00s 0 GMT +# S.R.&O. 1940, No. 172 and No. 1883 Rule GB-Eire 1940 only - Feb 25 2:00s 1:00 BST +# S.R.&O. 1941, No. 476 Rule GB-Eire 1941 only - May Sun>=2 1:00s 2:00 BDST Rule GB-Eire 1941 1943 - Aug Sun>=9 1:00s 1:00 BST +# S.R.&O. 1942, No. 506 Rule GB-Eire 1942 1944 - Apr Sun>=2 1:00s 2:00 BDST +# S.R.&O. 1944, No. 932 Rule GB-Eire 1944 only - Sep Sun>=16 1:00s 1:00 BST -# Double daylight starts on a Monday in 1945--see above. +# S.R.&O. 1945, No. 312 Rule GB-Eire 1945 only - Apr 2 1:00s 2:00 BDST +# S.R.&O. 1945, No. 1208 Rule GB-Eire 1945 only - Jul 15 1:00s 1:00 BST -Rule GB-Eire 1945 only - Oct 7 2:00s 0 GMT -Rule GB-Eire 1946 only - Apr 14 2:00s 1:00 BST -Rule GB-Eire 1946 only - Oct 6 2:00s 0 GMT +Rule GB-Eire 1945 1946 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1946 only - Apr Sun>=9 2:00s 1:00 BST +# The Summer Time Act, 1947 Rule GB-Eire 1947 only - Mar 16 2:00s 1:00 BST Rule GB-Eire 1947 only - Apr 13 1:00s 2:00 BDST Rule GB-Eire 1947 only - Aug 10 1:00s 1:00 BST Rule GB-Eire 1947 only - Nov 2 2:00s 0 GMT -# So much for double saving time. 1948 and 1949, irregular. +# Summer Time Order, 1948 (S.I. 1948/495) Rule GB-Eire 1948 only - Mar 14 2:00s 1:00 BST Rule GB-Eire 1948 1949 - Oct lastSun 2:00s 0 GMT +# Summer Time Order, 1949 (S.I. 1949/373) Rule GB-Eire 1949 only - Apr 3 2:00s 1:00 BST -# 1950 through start of 1953, regular. -Rule GB-Eire 1950 1953 - Apr Sun>=14 2:00s 1:00 BST +# Summer Time Order, 1950 (S.I. 1950/518) +# Summer Time Order, 1951 (S.I. 1951/430) +# Summer Time Order, 1952 (S.I. 1952/451) +Rule GB-Eire 1950 1952 - Apr Sun>=14 2:00s 1:00 BST Rule GB-Eire 1950 1952 - Oct Sun>=21 2:00s 0 GMT -# 1954 to 1980, starting rules -Rule GB-Eire 1954 only - Apr 11 2:00s 1:00 BST +# revert to the rules of the Summer Time Act, 1925 +Rule GB-Eire 1953 only - Apr Sun>=16 2:00s 1:00 BST +Rule GB-Eire 1953 1960 - Oct Sun>=2 2:00s 0 GMT +Rule GB-Eire 1954 only - Apr Sun>=9 2:00s 1:00 BST Rule GB-Eire 1955 1956 - Apr Sun>=16 2:00s 1:00 BST -Rule GB-Eire 1957 only - Apr 14 2:00s 1:00 BST +Rule GB-Eire 1957 only - Apr Sun>=9 2:00s 1:00 BST Rule GB-Eire 1958 1959 - Apr Sun>=16 2:00s 1:00 BST -Rule GB-Eire 1960 only - Apr 10 2:00s 1:00 BST +Rule GB-Eire 1960 only - Apr Sun>=9 2:00s 1:00 BST +# Summer Time Order, 1961 (S.I. 1961/71) +# Summer Time (1962) Order, 1961 (S.I. 1961/2465) +# Summer Time Order, 1963 (S.I. 1963/81) Rule GB-Eire 1961 1963 - Mar lastSun 2:00s 1:00 BST +Rule GB-Eire 1961 1968 - Oct Sun>=23 2:00s 0 GMT +# Summer Time (1964) Order, 1963 (S.I. 1963/2101) +# Summer Time Order, 1964 (S.I. 1964/1201) +# Summer Time Order, 1967 (S.I. 1967/1148) Rule GB-Eire 1964 1967 - Mar Sun>=19 2:00s 1:00 BST +# Summer Time Order, 1968 (S.I. 1968/117) Rule GB-Eire 1968 only - Feb 18 2:00s 1:00 BST +# The British Standard Time Act, 1968 +# (no summer time) +# The Summer Time Act, 1972 Rule GB-Eire 1972 1980 - Mar Sun>=16 2:00s 1:00 BST -# 1953 to 1980, ending rules -Rule GB-Eire 1953 1960 - Oct Sun>=1 2:00s 0 GMT -Rule GB-Eire 1961 1968 - Oct Sun>=23 2:00s 0 GMT Rule GB-Eire 1972 1980 - Oct Sun>=23 2:00s 0 GMT -# 1981 on +# Summer Time Order, 1980 (S.I. 1980/1089) +# Summer Time Order, 1982 (S.I. 1982/1673) +# Summer Time Order, 1986 (S.I. 1986/223) +# Summer Time Order, 1988 (S.I. 1988/931) Rule GB-Eire 1981 1995 - Mar lastSun 1:00u 1:00 BST Rule GB-Eire 1981 1989 - Oct Sun>=23 1:00u 0 GMT +# Summer Time Order, 1989 (S.I. 1989/985) +# Summer Time Order, 1992 (S.I. 1992/1729) +# Summer Time Order 1994 (S.I. 1994/2798) Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT +# Summer Time Order 1997 (S.I. 1997/2982) # See EU for rules starting in 1996. # Zone NAME GMTOFF RULES FORMAT [UNTIL] @@ -778,14 +831,14 @@ Zone Europe/London -0:01:15 - LMT 1847 Sep 22 0:00 EU GMT/BST Zone Europe/Belfast -0:23:40 - LMT 1880 Aug 2 -0:25:21 - DMT 1916 May 21 2:00 # Dublin MT - -0:25:21 1:00 IST 1916 Oct 1 3:00 # Irish Summer Time + -0:25:21 1:00 IST 1916 Oct 1 2:00s # Irish Summer Time 0:00 GB-Eire %s 1968 Oct 27 1:00 - BST 1971 Oct 31 2:00u 0:00 GB-Eire %s 1996 0:00 EU GMT/BST Zone Europe/Dublin -0:25:21 - LMT 1880 Aug 2 -0:25:21 - DMT 1916 May 21 2:00 # Dublin MT - -0:25:21 1:00 IST 1916 Oct 1 3:00 + -0:25:21 1:00 IST 1916 Oct 1 2:00s 0:00 GB-Eire %s 1921 Dec 6 # independence 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00 0:00 1:00 IST 1946 Oct 6 2:00 @@ -1040,13 +1093,7 @@ Zone Europe/Brussels 0:17:30 - LMT 1880 1:00 EU CE%sT # Bosnia and Herzegovina -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Europe/Sarajevo 1:13:40 - LMT 1884 - 1:00 - CET 1941 Apr 18 23:00 - 1:00 C-Eur CE%sT 1945 May 8 2:00s - 1:00 1:00 CEST 1945 Sep 16 2:00s - 1:00 - CET 1982 Nov 27 - 1:00 EU CE%sT +# see Yugoslavia # Bulgaria # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -1066,13 +1113,7 @@ Zone Europe/Sofia 1:33:16 - LMT 1880 2:00 E-Eur EE%sT # Croatia -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Europe/Zagreb 1:03:52 - LMT 1884 - 1:00 - CET 1941 Apr 18 23:00 - 1:00 C-Eur CE%sT 1945 May 8 2:00s - 1:00 1:00 CEST 1945 Sep 16 2:00s - 1:00 - CET 1982 Nov 27 - 1:00 EU CE%sT +# see Yugosloavia # Czech Republic # Gregorian calendar adopted 1584-01-17. @@ -1192,13 +1233,14 @@ Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31 # France # Gregorian calendar adopted 1582-12-20. -# French Revolutionary calendar used 1792-09-22 - 1805-12-31. +# French Revolutionary calendar used 1793-11-24 through 1805-12-31, +# and (in Paris only) 1871-05-06 through 1871-05-23. # # Shanks seems to use `24:00' ambiguously; we resolve it with Whitman. # From Shanks (1991): # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule France 1916 only - Jun 14 23:00s 1:00 S -Rule France 1916 1919 - Oct Sun>=1 0:00 0 - +Rule France 1916 1919 - Oct Sun>=1 23:00s 0 - Rule France 1917 only - Mar 24 23:00s 1:00 S Rule France 1918 only - Mar 9 23:00s 1:00 S Rule France 1919 only - Mar 1 23:00s 1:00 S @@ -1230,27 +1272,34 @@ Rule France 1940 only - Feb 25 2:00 1:00 S # The French rules for 1941-1944 were not used in Paris, # but were used in other places (e.g. Monaco). Rule France 1941 only - May 5 0:00 2:00 DS -Rule France 1941 only - Oct 6 1:00 1:00 S -Rule France 1942 only - Mar 8 0:00 2:00 DS +# Shanks says this transition occurred at Oct 6 1:00, +# but go with Denis.Excoffier@ens.fr (1997-12-12), +# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes +# as saying 5/10/41 22hUT. +Rule France 1941 only - Oct 6 0:00 1:00 S +Rule France 1942 only - Mar 9 0:00 2:00 DS Rule France 1942 only - Nov 2 3:00 1:00 S Rule France 1943 only - Mar 29 2:00 2:00 DS -Rule France 1943 only - Nov 4 3:00 1:00 S +Rule France 1943 only - Oct 4 3:00 1:00 S Rule France 1944 only - Apr 3 2:00 2:00 DS Rule France 1944 only - Oct 8 1:00 1:00 S Rule France 1945 only - Apr 2 2:00 2:00 DS Rule France 1945 only - Sep 16 3:00 0 - -Rule France 1976 only - Mar 28 2:00s 1:00 S -Rule France 1976 only - Sep lastSun 2:00s 0 - +# Shanks gives Mar 28 2:00 and Sep 26 3:00; +# go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT. +Rule France 1976 only - Mar 28 1:00 1:00 S +Rule France 1976 only - Sep 26 1:00 0 - # Shanks gives 0:09 for Paris Mean Time, and Whitman gives 0:09:05, # but Howse quotes the actual French legislation as saying 0:09:21. # Go with Howse. Howse writes that the time in France was officially based # on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC. # Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01 +Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time - 0:00 France WE%sT 1940 Jun 14 +# Shanks gives 1940 Jun 14 0:00; go with Excoffier's 14/6/40 22hUT. + 0:00 France WE%sT 1940 Jun 14 23:00 1:00 C-Eur CE%sT 1944 Aug 25 - 0:00 France WE%sT 1945 Sep 16 3:00 + 0:00 France WE%sT 1945 Sep 16 3:00 1:00 France CE%sT 1977 1:00 EU CE%sT @@ -1414,9 +1463,11 @@ Zone Atlantic/Reykjavik -1:27:24 - LMT 1837 # # From Paul Eggert (1996-05-06): # For Italian DST we have three sources: Shanks, Whitman, and F. Pollastri -# <URL:http://pisolo.cstv.to.cnr.it/toi/uk/ienitlt.html> (1996-03-14) (`FP' -# below), taken from an Italian National Electrotechnical Institute publication. -# When the three sources disagree, guess who's right, as follows: +# <a href="http://pisolo.cstv.to.cnr.it/toi/uk/ienitlt.html"> +# http://pisolo.cstv.to.cnr.it/toi/uk/ienitlt.html (1996-03-14) +# </a> +# (`FP' below), taken from an Italian National Electrotechnical Institute +# publication. When the three sources disagree, guess who's right, as follows: # # year FP Shanks (S) Whitman (W) Go with: # 1916 06-03 06-03 24:00 06-03 00:00 FP & W @@ -1565,13 +1616,7 @@ Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun 1:00 EU CE%sT # Macedonia -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Europe/Skopje 1:25:44 - LMT 1884 - 1:00 - CET 1941 Apr 18 23:00 - 1:00 C-Eur CE%sT 1945 May 8 2:00s - 1:00 1:00 CEST 1945 Sep 16 2:00s - 1:00 - CET 1982 Nov 27 - 1:00 EU CE%sT +# see Yugoslavia # Malta # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S @@ -1709,8 +1754,10 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880 1:00 Poland CE%sT 1977 Apr 3 1:00 1:00 W-Eur CE%sT # IATA SSIM (1991/1996) gives EU rules, but the _The Warsaw Voice_ -# <URL:http://www.contact.waw.pl/voice/v361/NewsInBrief.shtml> -# (1995-09-24) says the autumn 1995 switch was at 02:00. +# <a href="http://www.contact.waw.pl/voice/v361/NewsInBrief.shtml"> +# http://www.contact.waw.pl/voice/v361/NewsInBrief.shtml (1995-09-24) +# </a> +# says the autumn 1995 switch was at 02:00. # Stick with W-Eur for now. # Portugal @@ -1961,13 +2008,7 @@ Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2 Link Europe/Prague Europe/Bratislava # Slovenia -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Europe/Ljubljana 0:58:04 - LMT 1884 - 1:00 - CET 1941 Apr 18 23:00 - 1:00 C-Eur CE%sT 1945 May 8 2:00s - 1:00 1:00 CEST 1945 Sep 16 2:00s - 1:00 - CET 1982 Nov 27 - 1:00 EU CE%sT +# see Yugoslavia # Spain # Gregorian calendar adopted 1582-10-15. @@ -2042,7 +2083,10 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C. # Sweden -# From: msb@sq.com (Mark Brader) <URL:news:1996Jul6.012937.29190@sq.com>: +# From: msb@sq.com (Mark Brader) +# <a href=news:1996Jul6.012937.29190@sq.com> +# news:1996Jul6.012937.29190@sq.com +# </a>: # # In 1700, Denmark made the transition from Julian to Gregorian. Sweden # decided to *start* a transition in 1700 as well, but rather than have one of @@ -2072,6 +2116,8 @@ Zone Europe/Stockholm 1:12:12 - LMT 1878 May 31 1:00 EU CE%sT # Switzerland +# The Gregorian calendar was introduced gradually in Switzerland, +# by omitting leap years during 1583-1812. # From Howse (1988), p 82: # By the end of the 18th century clocks and watches became commonplace # and their performance improved enormously. Communities began to keep @@ -2211,6 +2257,10 @@ Zone Europe/Belgrade 1:22:00 - LMT 1884 # Shanks doesn't give as much detail, so go with Kozelj. 1:00 - CET 1982 Nov 27 1:00 EU CE%sT +Link Europe/Belgrade Europe/Ljubljana # Slovenia +Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina +Link Europe/Belgrade Europe/Skopje # Macedonia +Link Europe/Belgrade Europe/Zagreb # Croatia ############################################################################### @@ -2287,21 +2337,3 @@ Zone Europe/Belgrade 1:22:00 - LMT 1884 # ... # Monaco: has same DST as France. # ... - -# ... -# Date: Fri, 3 Sep 93 13:43:41 BST -# From: Peter Ilieve <peter@memex.co.uk> -# ... -# Turning to Europe, I now have a copy of the `Sixth Council Directive 92/20/EEC -# of 26 March 1992 on summertime arrangements'. This only covers 1993 and -# 1994, a seventh one is in the works but I doubt that the algorithm will -# change. This says summertime starts at 01:00 GMT on the last Sunday in March -# and ends at 01:00 GMT on the last Sunday in September, except for the UK -# and Eire where it ends at 01:00 GMT on the fourth Sunday in October. -# It says the arrangements for 1995 onwards will be decided by 1 January 1994, -# but as the sixth directive was supposed to appear by 1 Jan 92 and didn't -# arrive til March I wouldn't hold your breath. -# -# The first summertime directive was adopted in 1980, although the UK didn't -# seem to use it until 1981. I suspect it would be safe to move your start -# dates for the -Eur rules back to 1981. diff --git a/time/leapseconds b/time/leapseconds index 6ff99ada37..903da5aaae 100644 --- a/time/leapseconds +++ b/time/leapseconds @@ -1,4 +1,4 @@ -# @(#)leapseconds 7.9 +# @(#)leapseconds 7.10 # Allowance for leapseconds added to each timezone file. @@ -17,7 +17,7 @@ # Leap YEAR MON DAY 23:59:59 - R/S # If the leapsecond is Rolling (R) the given time is local time -# If the leapsecond is Stationary (S) the given time is GMT +# If the leapsecond is Stationary (S) the given time is UTC # Leap YEAR MONTH DAY HH:MM:SS CORR R/S Leap 1972 Jun 30 23:59:60 + S diff --git a/time/northamerica b/time/northamerica index a978333503..baaf84095a 100644 --- a/time/northamerica +++ b/time/northamerica @@ -1,4 +1,4 @@ -# @(#)northamerica 7.35 +# @(#)northamerica 7.39 # also includes Central America and the Caribbean # This data is by no means authoritative; if you think you know better, @@ -651,6 +651,20 @@ Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15 # Nipigon (EST) and Rainy River (CST) are the largest that we know of. # Far west Ontario is like Winnipeg; far east Quebec is like Halifax. +# From Paul Eggert (1997-10-17): +# msb@sq.com writes that an article in the 1997-10-14 Toronto Star +# says that Atikokan, Ontario currently does not observe DST, +# but will vote on 11-10 whether to use EST/EDT. +# He also writes that the +# <a href="http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html"> +# Ontario Time Act (1990, Chapter T.9) +# </a> +# says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT. +# Officially Atikokan is therefore on CST/CDT, and most likely this report +# concerns a non-official time observed as a matter of local practice. +# For what it's worth, Shanks (1995) says that Atikokan has agreed with +# Rainy River ever since standard time was introduced. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Mont 1917 only - Mar 25 2:00 1:00 D Rule Mont 1917 only - Apr 24 0:00 0 S @@ -893,7 +907,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20 # From Guy Harris: # Rules are from the Official Airline Guide, Worldwide Edition, for 1987. -# Rules prior to 1987 are unknown. +# Rules [before] 1987 are unknown. # The comments in the OAG say "Only Ensenada, Mexicale, San Felipe and Tijuana # observe DST." This is presumably Baja California Norte, above 28th parallel, # as listed there; [there is also] "Baja California Sur and N. Pacific @@ -971,9 +985,10 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20 # # -------------- End Forwarded Message -------------- # From Paul Eggert (1996-06-12): -# For an English translation of the decree, -# see ``Diario Oficial: Time Zone Changeover'', -# <URL:http://mexico-travel.com/extra/timezone_eng.html> (1996-01-04). +# For an English translation of the decree, see +# <a href="http://mexico-travel.com/extra/timezone_eng.html"> +# ``Diario Oficial: Time Zone Changeover'' (1996-01-04). +# </a> # From Shanks (1991): # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S diff --git a/time/southamerica b/time/southamerica index 4f8cb906d9..f53355c4c0 100644 --- a/time/southamerica +++ b/time/southamerica @@ -1,4 +1,4 @@ -# @(#)southamerica 7.21 +# @(#)southamerica 7.22 # 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 @@ -189,7 +189,7 @@ Zone America/La_Paz -4:32:36 - LMT 1890 # ending dates, giving them as "estimated date(s) based on previous year". We # infer a rule here from one example, always a dangerous practice.... Yes, # they really do switch on Saturday, according to the OAG. -# "[America/Porto_Acre]" is for the Territory of Acre; +# "[America/Porto_Acre]" is for the [State] of Acre; # "[America/Noronha]" is for Fernando De Noronha. # From Paul Eggert <eggert@twinsun.com> (1993-11-18): @@ -242,6 +242,11 @@ Zone America/La_Paz -4:32:36 - LMT 1890 # Sao Paulo (UTC-3) and Cuiaba (UTC-4) always observed DST. # Porto Acre (UTC-5) stopped observing DST in mid-1988. +# From Rodrigo Feher <feher@pobox.com> (1998-01-17): +# Reading "southamerica" file in timezone 7.55 I've found an +# error. Line 193 say "Territory of Acre". It is not a territory anymore +# but a state. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Brazil 1931 only - Oct 3 11:00 1:00 D Rule Brazil 1932 1933 - Apr 1 0:00 0 S diff --git a/time/tzfile.h b/time/tzfile.h index 90441cbbc3..0921c3c339 100644 --- a/time/tzfile.h +++ b/time/tzfile.h @@ -21,7 +21,7 @@ #ifndef lint #ifndef NOID -static char tzfilehid[] = "@(#)tzfile.h 7.13"; +static char tzfilehid[] = "@(#)tzfile.h 7.14"; #endif /* !defined NOID */ #endif /* !defined lint */ @@ -64,7 +64,7 @@ struct tzhead { ** tzh_timecnt (char [4])s coded transition times a la time(2) ** tzh_timecnt (unsigned char)s types of local time starting at above ** tzh_typecnt repetitions of -** one (char [4]) coded GMT offset in seconds +** one (char [4]) coded UTC offset in seconds ** one (unsigned char) used to set tm_isdst ** one (unsigned char) that's an abbreviation list index ** tzh_charcnt (char)s '\0'-terminated zone abbreviations @@ -77,7 +77,7 @@ struct tzhead { ** if absent, transition times are ** assumed to be wall clock time ** tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition -** time is GMT, if FALSE, +** time is UTC, if FALSE, ** transition time is local time ** if absent, transition times are ** assumed to be local time diff --git a/time/zdump.c b/time/zdump.c index 01c79ca7fb..f6480bb308 100644 --- a/time/zdump.c +++ b/time/zdump.c @@ -1,6 +1,6 @@ #ifndef lint #ifndef NOID -static char elsieid[] = "@(#)zdump.c 7.26"; +static char elsieid[] = "@(#)zdump.c 7.27"; #endif /* !defined NOID */ #endif /* !defined lint */ @@ -344,7 +344,7 @@ int v; (void) printf("%-*s ", (int) longest, zone); if (v) - (void) printf("%.24s GMT = ", asctime(gmtime(&t))); + (void) printf("%.24s UTC = ", asctime(gmtime(&t))); tmp = localtime(&t); (void) printf("%.24s", asctime(tmp)); if (*abbr(tmp) != '\0') diff --git a/time/zic.c b/time/zic.c index 2780e4c996..adec622672 100644 --- a/time/zic.c +++ b/time/zic.c @@ -1,6 +1,6 @@ #ifndef lint #ifndef NOID -static char elsieid[] = "@(#)zic.c 7.91"; +static char elsieid[] = "@(#)zic.c 7.93"; #endif /* !defined NOID */ #endif /* !defined lint */ @@ -601,10 +601,23 @@ const char * const tofile; if (!itsdir(toname)) (void) remove(toname); if (link(fromname, toname) != 0) { - if (mkdirs(toname) != 0) - (void) exit(EXIT_FAILURE); - if (link(fromname, toname) != 0) { - const char *e = strerror(errno); + int failure = errno; + if (failure == ENOENT) + if (mkdirs(toname) != 0) + failure = errno; + else if (link(fromname, toname) == 0) + failure = 0; + else + failure = errno; +#ifndef MISSING_SYMLINK + if (failure == EXDEV) + if (symlink(fromname, toname) != 0) + failure = errno; + else + failure = 0; +#endif + if (failure) { + const char *e = strerror(failure); (void) fprintf(stderr, _("%s: Can't link from %s to %s: %s\n"), @@ -1020,7 +1033,7 @@ const int iscont; } z.z_filename = filename; z.z_linenum = linenum; - z.z_gmtoff = gethms(fields[i_gmtoff], _("invalid GMT offset"), TRUE); + z.z_gmtoff = gethms(fields[i_gmtoff], _("invalid UTC offset"), TRUE); if ((cp = strchr(fields[i_format], '%')) != 0) { if (*++cp != 's' || strchr(cp, '%') != 0) { error(_("invalid abbreviation format")); @@ -1254,11 +1267,12 @@ const char * const timep; } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1) { error(_("invalid starting year")); return; - } else if (noise) + } else if (noise) { if (rp->r_loyear < min_year_representable) warning(_("starting year too low to be represented")); else if (rp->r_loyear > max_year_representable) warning(_("starting year too high to be represented")); + } cp = hiyearp; if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) { case YR_MINIMUM: @@ -1278,11 +1292,12 @@ const char * const timep; } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1) { error(_("invalid ending year")); return; - } else if (noise) + } else if (noise) { if (rp->r_loyear < min_year_representable) warning(_("starting year too low to be represented")); else if (rp->r_loyear > max_year_representable) warning(_("starting year too high to be represented")); + } if (rp->r_loyear > rp->r_hiyear) { error(_("starting year greater than ending year")); return; @@ -1630,7 +1645,7 @@ const int zonecount; INITIALIZE(ktime); if (useuntil) { /* - ** Turn untiltime into GMT + ** Turn untiltime into UTC ** assuming the current gmtoff and ** stdoff values. */ @@ -1946,10 +1961,11 @@ register const struct lookup * const table; */ foundlp = NULL; for (lp = table; lp->l_word != NULL; ++lp) - if (itsabbr(word, lp->l_word)) + if (itsabbr(word, lp->l_word)) { if (foundlp == NULL) foundlp = lp; else return NULL; /* multiple inexact matches */ + } return foundlp; } |