Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Force rereading TZDEFRULES after it was used to set DST rules only (b…
…ug #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.
  • Loading branch information
Andreas Schwab committed Jan 11, 2016
1 parent 97ee300 commit c83196b
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 2 deletions.
11 changes: 11 additions & 0 deletions ChangeLog
@@ -1,3 +1,14 @@
2016-01-11 Andreas Schwab <schwab@suse.de>

[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, CPPFLAGS-tst-tzname.c): Define.
* timezone/Makefile (test-zones): Add $(posixrules-file).
($(testdata)/$(posixrules-file)): New rule.

2016-01-10 Paul Eggert <eggert@cs.ucla.edu>

Fix doc quoting problems with Texinfo 5
Expand Down
6 changes: 5 additions & 1 deletion time/Makefile
Expand Up @@ -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

Expand All @@ -63,4 +64,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
CPPFLAGS-tst-tzname.c = -DTZDEFRULES='"$(posixrules-file)"'

bug-getdate1-ARGS = ${objpfx}bug-getdate1-fmt
50 changes: 50 additions & 0 deletions 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"
6 changes: 6 additions & 0 deletions time/tzfile.c
Expand Up @@ -628,6 +628,12 @@ __tzfile_default (const char *std, const char *dst,
__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
Expand Down
5 changes: 4 additions & 1 deletion timezone/Makefile
Expand Up @@ -40,7 +40,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

Expand Down Expand Up @@ -91,6 +92,8 @@ zic-deps = $(objpfx)zic $(leapseconds) yearistype

$(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.
Expand Down

0 comments on commit c83196b

Please sign in to comment.