forked from pool/glibc
134 lines
4.6 KiB
Diff
134 lines
4.6 KiB
Diff
|
Force rereading TZDEFRULES after it was used to set DST rules only (bug #19253)
|
|||
|
|
|||
|
If the TZDEFRULES file was used to set the DST rules when $TZ didn't
|
|||
|
provide any we need to make sure that the next time it is used we
|
|||
|
recompute everything as __tzfile_default changes some setting from what is
|
|||
|
provided by TZDEFRULES.
|
|||
|
|
|||
|
[BZ #19253]
|
|||
|
* time/tzfile.c (__tzfile_default): Invalidate tzfile attribute
|
|||
|
cache when TZDEFRULES was used.
|
|||
|
* time/tst-tzname.c: New file.
|
|||
|
* time/Makefile (test): Add tst-tzname.
|
|||
|
(tst-tzname-ENV, CFLAGS-tst-tzname.c): Define.
|
|||
|
* timezone/Makefile (test-zones): Add $(posixrules-file).
|
|||
|
($(testdata)/$(posixrules-file)): New rule.
|
|||
|
|
|||
|
Index: glibc-2.22/time/Makefile
|
|||
|
===================================================================
|
|||
|
--- glibc-2.22.orig/time/Makefile
|
|||
|
+++ glibc-2.22/time/Makefile
|
|||
|
@@ -37,7 +37,8 @@ aux := era alt_digit lc-time-cleanup
|
|||
|
tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
|
|||
|
tst-getdate tst-mktime tst-mktime2 tst-ftime_l tst-strftime \
|
|||
|
tst-mktime3 tst-strptime2 bug-asctime bug-asctime_r bug-mktime1 \
|
|||
|
- tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime
|
|||
|
+ tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \
|
|||
|
+ tst-tzname
|
|||
|
|
|||
|
include ../Rules
|
|||
|
|
|||
|
@@ -55,4 +56,7 @@ CFLAGS-test_time.c = -Wno-format
|
|||
|
tst-getdate-ENV= DATEMSK=datemsk TZDIR=${common-objpfx}timezone/testdata
|
|||
|
test_time-ARGS= EST5EDT CST
|
|||
|
|
|||
|
+tst-tzname-ENV = TZDIR=${common-objpfx}timezone/testdata
|
|||
|
+CFLAGS-tst-tzname.c = -DTZDEFRULES='"$(posixrules-file)"'
|
|||
|
+
|
|||
|
bug-getdate1-ARGS = ${objpfx}bug-getdate1-fmt
|
|||
|
Index: glibc-2.22/time/tst-tzname.c
|
|||
|
===================================================================
|
|||
|
--- /dev/null
|
|||
|
+++ glibc-2.22/time/tst-tzname.c
|
|||
|
@@ -0,0 +1,50 @@
|
|||
|
+/* Test that tzset sets tzname correctly (BZ #19253).
|
|||
|
+ Copyright (C) 2015 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 Lesser General Public
|
|||
|
+ License as published by the Free Software Foundation; either
|
|||
|
+ version 2.1 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
|
|||
|
+ Lesser General Public License for more details.
|
|||
|
+
|
|||
|
+ You should have received a copy of the GNU Lesser General Public
|
|||
|
+ License along with the GNU C Library; if not, see
|
|||
|
+ <http://www.gnu.org/licenses/>. */
|
|||
|
+
|
|||
|
+#include <stdio.h>
|
|||
|
+#include <stdlib.h>
|
|||
|
+#include <string.h>
|
|||
|
+#include <time.h>
|
|||
|
+
|
|||
|
+static int
|
|||
|
+do_test (void)
|
|||
|
+{
|
|||
|
+ int result = 0;
|
|||
|
+
|
|||
|
+ setenv ("TZ", TZDEFRULES, 1);
|
|||
|
+ tzset ();
|
|||
|
+ const char *stdtz = strdup (tzname[0]);
|
|||
|
+ setenv ("TZ", "STD-1DST", 1);
|
|||
|
+ tzset ();
|
|||
|
+ if (strcmp (tzname[0], "STD") != 0)
|
|||
|
+ {
|
|||
|
+ printf ("FAIL: TZ=STD-1DST, tzname[0] = %s\n", tzname[0]);
|
|||
|
+ result = 1;
|
|||
|
+ }
|
|||
|
+ setenv ("TZ", TZDEFRULES, 1);
|
|||
|
+ tzset ();
|
|||
|
+ if (strcmp (tzname[0], stdtz) != 0)
|
|||
|
+ {
|
|||
|
+ printf ("FAIL: TZ=%s, tzname[0] = %s\n", TZDEFRULES, tzname[0]);
|
|||
|
+ result = 1;
|
|||
|
+ }
|
|||
|
+ return result;
|
|||
|
+}
|
|||
|
+
|
|||
|
+#define TEST_FUNCTION do_test ()
|
|||
|
+#include "../test-skeleton.c"
|
|||
|
Index: glibc-2.22/time/tzfile.c
|
|||
|
===================================================================
|
|||
|
--- glibc-2.22.orig/time/tzfile.c
|
|||
|
+++ glibc-2.22/time/tzfile.c
|
|||
|
@@ -628,6 +628,12 @@ __tzfile_default (const char *std, const
|
|||
|
__timezone = -types[0].offset;
|
|||
|
|
|||
|
compute_tzname_max (stdlen + dstlen);
|
|||
|
+
|
|||
|
+ /* Invalidate the tzfile attribute cache to force rereading
|
|||
|
+ TZDEFRULES the next time it is used. */
|
|||
|
+ tzfile_dev = 0;
|
|||
|
+ tzfile_ino = 0;
|
|||
|
+ tzfile_mtime = 0;
|
|||
|
}
|
|||
|
|
|||
|
void
|
|||
|
Index: glibc-2.22/timezone/Makefile
|
|||
|
===================================================================
|
|||
|
--- glibc-2.22.orig/timezone/Makefile
|
|||
|
+++ glibc-2.22/timezone/Makefile
|
|||
|
@@ -49,7 +49,8 @@ ifeq ($(run-built-tests),yes)
|
|||
|
# List zones generated by separate commands running zic on the host.
|
|||
|
# Each such zic run counts as a separate test.
|
|||
|
test-zones := America/New_York Etc/UTC UTC Europe/Berlin \
|
|||
|
- Australia/Melbourne America/Sao_Paulo Asia/Tokyo
|
|||
|
+ Australia/Melbourne America/Sao_Paulo Asia/Tokyo \
|
|||
|
+ $(posixrules-file)
|
|||
|
tests-special += $(addprefix $(testdata)/, $(test-zones))
|
|||
|
endif
|
|||
|
|
|||
|
@@ -101,6 +102,8 @@ zic-deps = $(objpfx)zic $(leapseconds) y
|
|||
|
|
|||
|
$(testdata)/America/New_York: northamerica $(zic-deps)
|
|||
|
$(build-testdata)
|
|||
|
+$(testdata)/$(posixrules-file): $(testdata)/America/New_York
|
|||
|
+ $(make-link); $(evaluate-test)
|
|||
|
$(testdata)/Etc/UTC: etcetera $(zic-deps)
|
|||
|
$(build-testdata)
|
|||
|
# Use a pattern rule to indicate the command produces both targets at once.
|