+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
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
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
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.
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.
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
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
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) { }' > $@
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
/* 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.
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;
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. */
[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 },
[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 },
[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 },
_IO_list_all; _IO_stderr_; _IO_stdin_; _IO_stdout_;
+ __libc_pid; __libc_uid;
+
# This is for ix86 only.
_fp_hw;
_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;
/* 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. */
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. */
-/* 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.
cmfile->token.val.str.start,
cmfile->token.val.str.len);
- state = 3;
+ state = 5;
continue;
case 90:
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);
}
}
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;
}
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); \
} \
|| 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];
+++ /dev/null
-# This is only to keep the GNU C library configure mechanism happy.
-#
-exit 0
@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
@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
@comment BSD
@item PRIO_MAX
@vindex PRIO_MAX
-The smallest valid priority value.
+The largest valid priority value.
@end table
@comment sys/resource.h
#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));
}
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));
}
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));
}
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));
}
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));
}
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));
}
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));
}
-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));
}
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));
}
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));
}
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));
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));
}
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));
}
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));
}
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));
}
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));
}
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));
}
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));
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
+#include <sys/resource.h>
/*
Since not all architectures might define all exceptions, we define
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);
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);
/* 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.
if (result == NULL)
{
/* Not available. Insert at the end. */
- memcpy (base + (*nmemb) * size, key, size);
+ result = memcpy (base + (*nmemb) * size, key, size);
++(*nmemb);
}
# 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.
#
@$(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."
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;
/* 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 ();
{ \
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); \
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;
/* 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.
_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);
/* 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.
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)
{
/* 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
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, ,,
/* 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
#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, ,,
/* 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
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
#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))
},
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
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)
{
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));
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");
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
-/* 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
#include <signal.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
+#include <bits/libc-lock.h>
#ifndef HAVE_GNU_LD
/* 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;
+}
--- /dev/null
+/* 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);
+}
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,
#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
-/* 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
#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
{
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]);
/* 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
/* 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) \
/* 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)
{
/* 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) \
/* 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)
{
/* Return the length of S. */
+#define _HAVE_STRING_ARCH_strlen 1
__STRING_INLINE size_t
strlen (__const char *__str)
{
/* Copy SRC to DEST. */
+#define _HAVE_STRING_ARCH_strcpy 1
__STRING_INLINE char *
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)
{
/* Append SRC onto DEST. */
+#define _HAVE_STRING_ARCH_strcat 1
__STRING_INLINE char *
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)
{
/* Compare S1 and S2. */
+#define _HAVE_STRING_ARCH_strcmp 1
__STRING_INLINE int
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)
{
/* 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) \
/* 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)
/* 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)
/* 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)
/* 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)
/* 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
: (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) \
{ \
"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;
}
"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;
}
#define socket accept
+#define __socket __libc_accept
#define NARGS 3
#include <socket.S>
-strong_alias (__accept, __libc_accept)
+weak_alias (__libc_accept, __accept)
# 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
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)
/* 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)
#define socket connect
+#define __socket __libc_connect
#define NARGS 3
#include <socket.S>
-strong_alias (__connect, __libc_connect)
+weak_alias (__libc_connect, __connect)
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
/* Successful; return the syscall's value. */
ret
-PSEUDO_END (P(__,socket))
+PSEUDO_END (__socket)
-weak_alias (P(__,socket), socket)
+weak_alias (__socket, socket)
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
/* Successful; return the syscall's value. */
rts
-PSEUDO_END (P(__,socket))
+PSEUDO_END (__socket)
-weak_alias (P(__,socket), socket)
+weak_alias (__socket, socket)
# 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
-/* 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
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
-/* 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
#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)
#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 */
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
*/
#define socket recv
+#define __socket __libc_recv
#define NARGS 4
#include <socket.S>
-strong_alias (__recv, __libc_recv)
+weak_alias (__libc_recv, __recv)
#define socket recvfrom
+#define __socket __libc_recvfrom
#define NARGS 6
#include <socket.S>
-strong_alias (__recvfrom, __libc_recvfrom)
+weak_alias (__libc_recvfrom, __recvfrom)
#define socket recvmsg
+#define __socket __libc_recvmsg
#define NARGS 3
#include <socket.S>
-strong_alias (__recvmsg, __libc_recvmsg)
+weak_alias (__libc_recvmsg, __recvmsg)
#define socket send
+#define __socket __libc_send
#define NARGS 4
#include <socket.S>
-strong_alias (__send, __libc_send)
+weak_alias (__libc_send, __send)
#define socket sendmsg
+#define __socket __libc_sendmsg
#define NARGS 3
#include <socket.S>
-strong_alias (__sendmsg, __libc_sendmsg)
+weak_alias (__libc_sendmsg, __sendmsg)
#define socket sendto
+#define __socket __libc_sendto
#define NARGS 6
#include <socket.S>
-strong_alias (__sendto, __libc_sendto)
+weak_alias (__libc_sendto, __sendto)
#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"
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. */
1: SYSCALL_ERROR_HANDLER
-END (P(__,socket))
+END (__socket)
-weak_alias (P(__,socket), socket)
+weak_alias (__socket, socket)
# 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
-# @(#)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
# 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
-# @(#)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,
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
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
# 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.
-# @(#)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
# 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
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.
# 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
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
# 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.
# 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.
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
-# @(#)australasia 7.37
+# @(#)australasia 7.39
# This file also includes Pacific islands.
# Notes are at the end of this file
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
# 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):
-# @(#)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"
# 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,
-# @(#)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
# 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
# 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
# "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]
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
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
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.
# 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
# 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
#
# 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
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
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
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.
# 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
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
# 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
###############################################################################
# ...
# 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.
-# @(#)leapseconds 7.9
+# @(#)leapseconds 7.10
# Allowance for leapseconds added to each timezone file.
# 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
-# @(#)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,
# 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
# 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
#
# -------------- 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
-# @(#)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
# 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):
# 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
#ifndef lint
#ifndef NOID
-static char tzfilehid[] = "@(#)tzfile.h 7.13";
+static char tzfilehid[] = "@(#)tzfile.h 7.14";
#endif /* !defined NOID */
#endif /* !defined lint */
** 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
** 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
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)zdump.c 7.26";
+static char elsieid[] = "@(#)zdump.c 7.27";
#endif /* !defined NOID */
#endif /* !defined lint */
(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')
#ifndef lint
#ifndef NOID
-static char elsieid[] = "@(#)zic.c 7.91";
+static char elsieid[] = "@(#)zic.c 7.93";
#endif /* !defined NOID */
#endif /* !defined lint */
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"),
}
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"));
} 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:
} 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;
INITIALIZE(ktime);
if (useuntil) {
/*
- ** Turn untiltime into GMT
+ ** Turn untiltime into UTC
** assuming the current gmtoff and
** stdoff values.
*/
*/
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;
}