aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog29
-rwxr-xr-xdebug/xtrace.sh17
-rw-r--r--linuxthreads/sysdeps/pthread/Subdirs (renamed from linuxthreads/Implies)0
-rw-r--r--linuxthreads_db/ChangeLog4
-rw-r--r--linuxthreads_db/shlib-versions2
-rw-r--r--linuxthreads_db/td_ta_get_nthreads.c4
-rw-r--r--linuxthreads_db/td_ta_new.c15
-rw-r--r--linuxthreads_db/thread_db.h6
-rwxr-xr-xmalloc/memprof.sh20
-rw-r--r--math/Makefile2
-rw-r--r--math/basic-test.c123
-rw-r--r--nis/nss_nisplus/nisplus-parser.c38
-rw-r--r--timezone/europe59
13 files changed, 268 insertions, 51 deletions
diff --git a/ChangeLog b/ChangeLog
index 551ddac..4950a18 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,32 @@
+1999-10-08 Ulrich Drepper <drepper@cygnus.com>
+
+ * nis/nss_nisplus/nisplus-parser.c (_nss_nisplus_parse_spent): Fix
+ handling of empty entries.
+ Patch by Thorsten Kukuk <kukuk@suse.de>.
+
+1999-10-08 Andreas Schwab <schwab@suse.de>
+
+ * debug/xtrace.sh: Fix quoting bugs. Implement --help and --version.
+
+1999-10-08 Andreas Schwab <schwab@suse.de>
+
+ * debug/pcprofiledump.c: Fix typos.
+
+1999-10-07 Andreas Jaeger <aj@suse.de>
+
+ * math/Makefile (tests): Added basic-tests.
+
+ * math/basic-test.c: New file. Contains function basic_tests from
+ libm-test.
+
+1999-10-07 Andreas Schwab <schwab@suse.de>
+
+ * malloc/memprof.sh: Fix quoting bugs.
+
+1999-10-08 Ulrich Drepper <drepper@cygnus.com>
+
+ * timezone/europe: Update from tzdata1999h.
+
1999-10-07 Ulrich Drepper <drepper@cygnus.com>
* elf/elf.h: Update from last gABI draft.
diff --git a/debug/xtrace.sh b/debug/xtrace.sh
index c688391..241ebe8 100755
--- a/debug/xtrace.sh
+++ b/debug/xtrace.sh
@@ -81,6 +81,9 @@ COLUMNS=${COLUMNS:-80}
# If `TERM' is not set, set it to `xterm'.
TERM=${TERM:-xterm}
+# The data file to process, if any.
+data=
+
# Process arguments. But stop as soon as the program name is found.
while test $# -gt 0; do
case "$1" in
@@ -94,6 +97,12 @@ while test $# -gt 0; do
--d=* | --da=* | --dat=* | --data=*)
data=${1##*=}
;;
+ -? | --h | --he | --hel | --help)
+ do_help
+ ;;
+ --v | --ve | --ver | --vers | --versi | --versio | --version)
+ do_version
+ ;;
--)
# Stop processing arguments.
shift
@@ -133,9 +142,9 @@ fi
printf "%-20s %-*s %6s\n" Function $(expr $COLUMNS - 30) File Line
for i in $(seq 1 $COLUMNS); do echo -n -; done; echo
if test -n "$data"; then
- eval $pcprofiledump $data |
+ $pcprofiledump "$data" |
sed 's/this = \([^,]*\).*/\1/' |
- addr2line -fC -e $program |
+ addr2line -fC -e "$program" |
while read fct; do
read file
if test "$fct" != '??' -a "$file" != '??:0'; then
@@ -146,9 +155,9 @@ else
fifo=$(mktemp -u ${TMPDIR:-/tmp}/xprof.XXXXXX)
mkfifo -m 0600 $fifo || exit 1
# Now start the program and let it write to the FIFO.
- eval $TERM -T "'xtrace - $program $*'" -e /bin/sh -c "'LD_PRELOAD=$pcprofileso PCPROFILE_OUTPUT=$fifo $program $*; read $fifo'" &
+ $TERM -T "xtrace - $program $*" -e /bin/sh -c "LD_PRELOAD=$pcprofileso PCPROFILE_OUTPUT=$fifo $program $*; read $fifo" &
termpid=$!
- eval $pcprofiledump $fifo |
+ $pcprofiledump $fifo |
sed 's/this = \([^,]*\).*/\1/' |
addr2line -fC -e $program |
while read fct; do
diff --git a/linuxthreads/Implies b/linuxthreads/sysdeps/pthread/Subdirs
index 2c56497..2c56497 100644
--- a/linuxthreads/Implies
+++ b/linuxthreads/sysdeps/pthread/Subdirs
diff --git a/linuxthreads_db/ChangeLog b/linuxthreads_db/ChangeLog
index 1ee1a7e..8626147 100644
--- a/linuxthreads_db/ChangeLog
+++ b/linuxthreads_db/ChangeLog
@@ -1,3 +1,7 @@
+1999-10-08 Ulrich Drepper <drepper@cygnus.com>
+
+ * shlib-versions: New file.
+
1999-10-07 Ulrich Drepper <drepper@cygnus.com>
* Makefile: New file.
diff --git a/linuxthreads_db/shlib-versions b/linuxthreads_db/shlib-versions
new file mode 100644
index 0000000..592f7fa
--- /dev/null
+++ b/linuxthreads_db/shlib-versions
@@ -0,0 +1,2 @@
+# The thread debug library
+.*-.*-linux.* libthread_db=1
diff --git a/linuxthreads_db/td_ta_get_nthreads.c b/linuxthreads_db/td_ta_get_nthreads.c
index 955555b..13d5032 100644
--- a/linuxthreads_db/td_ta_get_nthreads.c
+++ b/linuxthreads_db/td_ta_get_nthreads.c
@@ -19,7 +19,7 @@
Boston, MA 02111-1307, USA. */
#include "thread_dbP.h"
-
+#include <gnu/lib-names.h>
td_err_e
td_ta_get_nthreads (const td_thragent_t *ta, int *np)
@@ -29,7 +29,7 @@ td_ta_get_nthreads (const td_thragent_t *ta, int *np)
LOG (__FUNCTION__);
/* Access the variable `__pthread_handles_num'. */
- if (ps_pglobal_lookup (ta->ph, "libpthread.so.0", "__pthread_handles_num",
+ if (ps_pglobal_lookup (ta->ph, LIBPTHREAD_SO, "__pthread_handles_num",
&addr) != PS_OK)
return TD_ERR; /* XXX Other error value? */
diff --git a/linuxthreads_db/td_ta_new.c b/linuxthreads_db/td_ta_new.c
index d018ac6..15f445a 100644
--- a/linuxthreads_db/td_ta_new.c
+++ b/linuxthreads_db/td_ta_new.c
@@ -21,6 +21,7 @@
#include <stddef.h>
#include <stdlib.h>
+#include <gnu/lib-names.h>
#include "thread_dbP.h"
@@ -33,7 +34,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
LOG (__FUNCTION__);
/* See whether the library contains the necessary symbols. */
- if (ps_pglobal_lookup (ps, "libpthread.so.0", "__pthread_threads_debug",
+ if (ps_pglobal_lookup (ps, LIBPTHREAD_SO, "__pthread_threads_debug",
&addr) != PS_OK)
return TD_LIBTHREAD;
@@ -47,7 +48,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
(*ta)->ph = ps;
/* See whether the library contains the necessary symbols. */
- if (ps_pglobal_lookup (ps, "libpthread.so.0", "__pthread_handles",
+ if (ps_pglobal_lookup (ps, LIBPTHREAD_SO, "__pthread_handles",
&addr) != PS_OK)
{
free_return:
@@ -58,7 +59,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
(*ta)->handles = (struct pthread_handle_struct *) addr;
- if (ps_pglobal_lookup (ps, "libpthread.so.0", "pthread_keys",
+ if (ps_pglobal_lookup (ps, LIBPTHREAD_SO, "pthread_keys",
&addr) != PS_OK)
goto free_return;
@@ -68,7 +69,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
/* Find out about the maximum number of threads. Old implementations
don't provide this information. In this case we assume that the
debug library is compiled with the same values. */
- if (ps_pglobal_lookup (ps, "libpthread.so.0",
+ if (ps_pglobal_lookup (ps, LIBPTHREAD_SO,
"__linuxthreads_pthread_threads_max", &addr) != PS_OK)
(*ta)->pthread_threads_max = PTHREAD_THREADS_MAX;
else
@@ -79,7 +80,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
}
/* Similar for the maximum number of thread local data keys. */
- if (ps_pglobal_lookup (ps, "libpthread.so.0",
+ if (ps_pglobal_lookup (ps, LIBPTHREAD_SO,
"__linuxthreads_pthread_keys_max", &addr) != PS_OK)
(*ta)->pthread_keys_max = PTHREAD_KEYS_MAX;
else
@@ -90,7 +91,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
}
/* And for the size of the second level arrays for the keys. */
- if (ps_pglobal_lookup (ps, "libpthread.so.0",
+ if (ps_pglobal_lookup (ps, LIBPTHREAD_SO,
"__linuxthreads_pthread_sizeof_descr", &addr)
!= PS_OK)
(*ta)->sizeof_descr = offsetof (struct _pthread_descr_struct, p_startfct);
@@ -101,7 +102,7 @@ td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta)
}
/* Similar for the maximum number of thread local data keys. */
- if (ps_pglobal_lookup (ps, "libpthread.so.0",
+ if (ps_pglobal_lookup (ps, LIBPTHREAD_SO,
"__linuxthreads_pthread_keys_max", &addr) != PS_OK)
(*ta)->pthread_keys_max = PTHREAD_KEYS_MAX;
else
diff --git a/linuxthreads_db/thread_db.h b/linuxthreads_db/thread_db.h
index f65363e..310e2ae 100644
--- a/linuxthreads_db/thread_db.h
+++ b/linuxthreads_db/thread_db.h
@@ -291,7 +291,7 @@ extern td_err_e td_init (void);
/* Historical relict. Should not be used anymore. */
extern td_err_e td_log (void);
-/* Generate new thread debu librarz handle for process PS. */
+/* Generate new thread debug library handle for process PS. */
extern td_err_e td_ta_new (struct ps_prochandle *__ps, td_thragent_t **__ta);
/* Free resources allocated for TA. */
@@ -316,7 +316,7 @@ extern td_err_e td_ta_map_lwp2thr (const td_thragent_t *__ta, lwpid_t __lwpid,
td_thrhandle_t *__th);
-/* Call for each thread is process associated with TA the callback function
+/* Call for each thread in a process associated with TA the callback function
CALLBACK. */
extern td_err_e td_ta_thr_iter (const td_thragent_t *__ta,
td_thr_iter_f *__callback, void *__cbdata_p,
@@ -344,7 +344,7 @@ extern td_err_e td_ta_enable_stats (const td_thragent_t *__ta, int __enable);
/* Reset statistics. */
extern td_err_e td_ta_reset_stats (const td_thragent_t *__ta);
-/* Retrieve statitics from process associated with TA. */
+/* Retrieve statistics from process associated with TA. */
extern td_err_e td_ta_get_stats (const td_thragent_t *__ta,
td_ta_stats_t *__statsp);
diff --git a/malloc/memprof.sh b/malloc/memprof.sh
index d7d8750..5fc011b 100755
--- a/malloc/memprof.sh
+++ b/malloc/memprof.sh
@@ -201,6 +201,7 @@ fi
add_env="LD_PRELOAD=$memprofso"
# Generate data file name.
+datafile=
if test -n "$data"; then
datafile="$data"
elif test -n "$png"; then
@@ -229,21 +230,22 @@ if test -n "$notimer"; then
fi
# Execute the program itself.
-eval $add_env $*
+eval $add_env '"$@"'
result=$?
-# Generate the PNG data file is wanted and there is something to generate
+# Generate the PNG data file if wanted and there is something to generate
# it from.
-if test -n "$png" -a -s "$datafile"; then
+if test -n "$png" -a -n "$datafile" -a -s "$datafile"; then
# Append extension .png if it isn't already there.
- if test $png = ${png%*.png}; then
- png="$png.png"
- fi
- eval $memprofstat $memprofstat_args $datafile $png
+ case $png in
+ *.png) ;;
+ *) png="$png.png" ;;
+ esac
+ $memprofstat $memprofstat_args "$datafile" "$png"
fi
-if test -z "$data" -a -n $datafile; then
- rm -f $datafile
+if test -z "$data" -a -n "$datafile"; then
+ rm -f "$datafile"
fi
exit $result
diff --git a/math/Makefile b/math/Makefile
index 34136b9..670faaf 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -77,7 +77,7 @@ distribute += $(long-c-yes:=.c)
# Rules for the test suite.
tests = test-float test-double $(test-longdouble-$(long-double-fcts)) \
test-ifloat test-idouble test-matherr test-fenv \
- atest-exp atest-sincos atest-exp2
+ atest-exp atest-sincos atest-exp2 basic-test
# We do the `long double' tests only if this data type is available and
# distinct from `double'.
test-longdouble-yes = test-ldouble test-ildoubl
diff --git a/math/basic-test.c b/math/basic-test.c
new file mode 100644
index 0000000..4706519
--- /dev/null
+++ b/math/basic-test.c
@@ -0,0 +1,123 @@
+/* Copyright (C) 1999 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andreas Jaeger <aj@suse.de>, 1999.
+
+ 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. */
+
+#include <math.h>
+#include <float.h>
+#include <stdio.h>
+
+static int errors = 0;
+
+
+static void
+check (const char *testname, int result)
+{
+ if (!result) {
+ printf ("Failure: %s\n", testname);
+ errors++;
+ }
+}
+
+#define TEST_FUNC(NAME, FLOAT, NANFUNC, EPSILON, HUGEVAL) \
+static void \
+NAME (void) \
+{ \
+ /* Variables are declared volatile to forbid some compiler \
+ optimizations. */ \
+ volatile FLOAT Inf_var, NaN_var, zero_var, one_var; \
+ FLOAT x1, x2; \
+ \
+ zero_var = 0.0; \
+ one_var = 1.0; \
+ NaN_var = zero_var/zero_var; \
+ Inf_var = one_var / zero_var; \
+ \
+ (void) &zero_var; \
+ (void) &one_var; \
+ (void) &NaN_var; \
+ (void) &Inf_var; \
+ \
+ \
+ check (#FLOAT " isinf (inf) == 1", isinf (Inf_var) == 1); \
+ check (#FLOAT " isinf (-inf) == -1", isinf (-Inf_var) == -1); \
+ check (#FLOAT " !isinf (1)", !(isinf (one_var))); \
+ check (#FLOAT " !isinf (NaN)", !(isinf (NaN_var))); \
+ \
+ check (#FLOAT " isnan (NaN)", isnan (NaN_var)); \
+ check (#FLOAT " isnan (-NaN)", isnan (-NaN_var)); \
+ check (#FLOAT " !isnan (1)", !(isnan (one_var))); \
+ check (#FLOAT " !isnan (inf)", !(isnan (Inf_var))); \
+ \
+ check (#FLOAT " inf == inf", Inf_var == Inf_var); \
+ check (#FLOAT " -inf == -inf", -Inf_var == -Inf_var); \
+ check (#FLOAT " inf != -inf", Inf_var != -Inf_var); \
+ check (#FLOAT " NaN != NaN", NaN_var != NaN_var); \
+ \
+ /* \
+ the same tests but this time with NAN from <bits/nan.h> \
+ NAN is a double const \
+ */ \
+ check (#FLOAT " isnan (NAN)", isnan (NAN)); \
+ check (#FLOAT " isnan (-NAN)", isnan (-NAN)); \
+ check (#FLOAT " !isinf (NAN)", !(isinf (NAN))); \
+ check (#FLOAT " !isinf (-NAN)", !(isinf (-NAN))); \
+ check (#FLOAT " NAN != NAN", NAN != NAN); \
+ \
+ /* \
+ And again with the value returned by the `nan' function. \
+ */ \
+ check (#FLOAT " isnan (NAN)", isnan (NANFUNC (""))); \
+ check (#FLOAT " isnan (-NAN)", isnan (-NANFUNC (""))); \
+ check (#FLOAT " !isinf (NAN)", !(isinf (NANFUNC ("")))); \
+ check (#FLOAT " !isinf (-NAN)", !(isinf (-NANFUNC ("")))); \
+ check (#FLOAT " NAN != NAN", NANFUNC ("") != NANFUNC ("")); \
+ \
+ /* test if EPSILON is ok */ \
+ x1 = 1.0; \
+ x2 = x1 + EPSILON; \
+ check (#FLOAT " 1 != 1+EPSILON", x1 != x2); \
+ \
+ x1 = 1.0; \
+ x2 = x1 - EPSILON; \
+ check (#FLOAT " 1 != 1-EPSILON", x1 != x2); \
+ \
+ /* test if HUGE_VALx is ok */ \
+ x1 = HUGEVAL; \
+ check (#FLOAT " isinf (HUGE_VALx) == +1", isinf (x1) == +1); \
+ x1 = - HUGEVAL; \
+ check (#FLOAT " isinf (-HUGE_VALx) == -1", isinf (x1) == -1); \
+}
+
+TEST_FUNC (float_test, float, nanf, FLT_EPSILON, HUGE_VALF)
+TEST_FUNC (double_test, double, nan, DBL_EPSILON, HUGE_VAL)
+#ifndef NO_LONG_DOUBLE
+TEST_FUNC (ldouble_test, long double, nan, LDBL_EPSILON, HUGE_VALL)
+#endif
+
+int
+main (void)
+{
+ float_test ();
+ double_test ();
+
+#ifndef NO_LONG_DOUBLE
+ ldouble_test ();
+#endif
+
+ return errors != 0;
+}
diff --git a/nis/nss_nisplus/nisplus-parser.c b/nis/nss_nisplus/nisplus-parser.c
index e8d1079..7a91992 100644
--- a/nis/nss_nisplus/nisplus-parser.c
+++ b/nis/nss_nisplus/nisplus-parser.c
@@ -307,7 +307,8 @@ _nss_nisplus_parse_spent (nis_result *result, struct spwd *sp,
first_unused += (len + 1);
sp->sp_lstchg = sp->sp_min = sp->sp_max = sp->sp_warn = sp->sp_inact =
- sp->sp_expire = sp->sp_flag = -1;
+ sp->sp_expire = -1;
+ sp->sp_flag = ~0ul;
if (NISENTRYLEN (0, 7, result) > 0)
{
@@ -316,49 +317,56 @@ _nss_nisplus_parse_spent (nis_result *result, struct spwd *sp,
line = NISENTRYVAL (0, 7, result);
cp = strchr (line, ':');
if (cp == NULL)
- return 0;
+ return 1;
*cp++ = '\0';
- sp->sp_lstchg = atol (line);
+ if (*line)
+ sp->sp_lstchg = atol (line);
line = cp;
cp = strchr (line, ':');
if (cp == NULL)
- return 0;
+ return 1;
*cp++ = '\0';
- sp->sp_min = atol (line);
+ if (*line)
+ sp->sp_min = atol (line);
line = cp;
cp = strchr (line, ':');
if (cp == NULL)
- return 0;
+ return 1;
*cp++ = '\0';
- sp->sp_max = atol (line);
+ if (*line)
+ sp->sp_max = atol (line);
line = cp;
cp = strchr (line, ':');
if (cp == NULL)
- return 0;
+ return 1;
*cp++ = '\0';
- sp->sp_warn = atol (line);
+ if (*line)
+ sp->sp_warn = atol (line);
line = cp;
cp = strchr (line, ':');
if (cp == NULL)
- return 0;
+ return 1;
*cp++ = '\0';
- sp->sp_inact = atol (line);
+ if (*line)
+ sp->sp_inact = atol (line);
line = cp;
cp = strchr (line, ':');
if (cp == NULL)
- return 0;
+ return 1;
*cp++ = '\0';
- sp->sp_expire = atol (line);
+ if (*line)
+ sp->sp_expire = atol (line);
line = cp;
if (line == NULL)
- return 0;
- sp->sp_flag = atol (line);
+ return 1;
+ if (*line)
+ sp->sp_flag = atol (line);
}
return 1;
diff --git a/timezone/europe b/timezone/europe
index 4b4290e..ea38d12 100644
--- a/timezone/europe
+++ b/timezone/europe
@@ -1,4 +1,4 @@
-# @(#)europe 7.64
+# @(#)europe 7.65
# 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
@@ -723,6 +723,23 @@
# clear whether the islands were using GMT or local time then. The
# changes in Alderney and Guernsey were at the same 2am GMT time as
# for Great Britain; the order for Jersey is more interesting.
+#
+# From Paul Eggert (1999-10-06):
+# Mark Brader kindly translated the 1916 Jersey order from the French.
+# It says that the 1916 transitions were 05-20 and 09-30 at midnight.
+# Presumably this was 24:00, two hours earlier than Great Britain.
+# It also says that after 1916 they'll sync with Great Britain.
+
+# From Joseph S. Myers (1999-09-28):
+# I have the 1918 orders for Guernsey, Alderney (both changing on same
+# dates as UK, 2am GMT) and Sark (same dates; start and end at 2am,
+# start "temps de Greenwich" (not specified as "temps moyen de
+# Greenwich" which was used in the other orders) and end in an
+# unspecified zone). For Jersey the same file (Public Record Office: HO
+# 45/10892/357138) includes letters to the effect that in 1918 and 1919
+# the States of Jersey agreed the same start and end dates as the UK
+# (times unspecified, and it was the 1916 Jersey order that specified
+# change at midnight of an unspecified zone).
# From Joseph S. Myers <jsm28@hermes.cam.ac.uk> (1998-01-06):
#
@@ -1304,6 +1321,15 @@ Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik
# for their standard and summer times. He says no, they use "suveaeg"
# (summer time) and "talveaeg" (winter time).
+# From <a href="http://www.baltictimes.com/">The Baltic Times</a> (1999-09-09)
+# via Steffen Thorsen:
+# This year will mark the last time Estonia shifts to summer time,
+# a council of the ruling coalition announced Sept. 6....
+# But what this could mean for Estonia's chances of joining the European
+# Union are still unclear. In 1994, the EU declared summer time compulsory
+# for all member states until 2001. Brussels has yet to decide what to do
+# after that.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Tallinn 1:39:00 - LMT 1880
1:39:00 - TMT 1918 Feb # Tallinn Mean Time
@@ -1315,7 +1341,8 @@ Zone Europe/Tallinn 1:39:00 - LMT 1880
3:00 Russia MSK/MSD 1989 Mar 26 2:00s
2:00 1:00 EEST 1989 Sep 24 2:00s
2:00 C-Eur EE%sT 1998 Sep 22
- 2:00 EU EE%sT
+ 2:00 EU EE%sT 2000
+ 2:00 - EET
# Finland
#
@@ -1715,6 +1742,24 @@ Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun
1:00 EU CE%sT
# Lithuania
+
+# From Paul Eggert (1996-11-22):
+# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is
+# known to be wrong about Estonia and Latvia, assume it's wrong here too.
+
+# From Marius Gedminas <mgedmin@pub.osf.lt> (1998-08-07):
+# I would like to inform that in this year Lithuanian time zone
+# (Europe/Vilnius) was changed.
+
+# From <a href="http://www.elta.lt/">ELTA</a> No. 972 (2582) (1999-09-29),
+# via Steffen Thorsen:
+# Lithuania has shifted back to the second time zone (GMT plus two hours)
+# to be valid here starting from October 31,
+# as decided by the national government on Wednesday....
+# The Lithuanian government also announced plans to consider a
+# motion to give up shifting to summer time in spring, as it was
+# already done by Estonia.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Vilnius 1:41:16 - LMT 1880
1:24:00 - WMT 1917 # Warsaw Mean Time
@@ -1728,14 +1773,8 @@ Zone Europe/Vilnius 1:41:16 - LMT 1880
2:00 1:00 EEST 1991 Sep 29 2:00s
2:00 C-Eur EE%sT 1998
2:00 - EET 1998 Mar 29 1:00u
- 1:00 EU CE%sT
-# From Paul Eggert (1996-11-22):
-# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is
-# known to be wrong about Estonia and Latvia, assume it's wrong here too.
-
-# From Marius Gedminas <mgedmin@pub.osf.lt> (1998-08-07):
-# I would like to inform that in this year Lithuanian time zone
-# (Europe/Vilnius) was changed.
+ 1:00 EU CE%sT 1999 Oct 31 1:00u
+ 2:00 EU EE%sT
# Luxembourg
# Whitman disagrees with most of these dates in minor ways; go with Shanks.