forked from pool/glibc
Andreas Schwab
5f9962d8aa
- resolv-mem-leak.patch: Fix resource leak in resolver (BZ #19257) - tzset-tzname.patch: Force rereading TZDEFRULES after it was used to set DST rules only (BZ #19253) - glibc-2.3.90-noversion.diff: use stat64 - ld-pointer-guard.patch: Always enable pointer guard (bsc#950944, BZ #18928) OBS-URL: https://build.opensuse.org/request/show/345159 OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=419
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.
|