diff options
-rw-r--r-- | ChangeLog | 29 | ||||
-rwxr-xr-x | debug/xtrace.sh | 17 | ||||
-rw-r--r-- | linuxthreads/sysdeps/pthread/Subdirs (renamed from linuxthreads/Implies) | 0 | ||||
-rw-r--r-- | linuxthreads_db/ChangeLog | 4 | ||||
-rw-r--r-- | linuxthreads_db/shlib-versions | 2 | ||||
-rw-r--r-- | linuxthreads_db/td_ta_get_nthreads.c | 4 | ||||
-rw-r--r-- | linuxthreads_db/td_ta_new.c | 15 | ||||
-rw-r--r-- | linuxthreads_db/thread_db.h | 6 | ||||
-rwxr-xr-x | malloc/memprof.sh | 20 | ||||
-rw-r--r-- | math/Makefile | 2 | ||||
-rw-r--r-- | math/basic-test.c | 123 | ||||
-rw-r--r-- | nis/nss_nisplus/nisplus-parser.c | 38 | ||||
-rw-r--r-- | timezone/europe | 59 |
13 files changed, 268 insertions, 51 deletions
@@ -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. |