+1998-09-10 11:53 Ulrich Drepper <drepper@cygnus.com>
+
+ * timezone/Makefile: Add rules to generate Asia/Tokyo zoneinfo files
+ for test.
+ * timezone/tst-timezone.c (tests): Fix typo in last patch.
+
+ * time/tzfile.c (__tzfile_read): Handle case when there are no
+ transitions. Set __timezone based on computed offset.
+ * time/tzset.c (tzset_internal): Set __timezone before returning.
+
+ * time/tzset.c (tzset_internal): Optimize handling of local string
+ copy.
+
+1998-09-10 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * timezone/tst-timezone.c (tests): Add test for Asia/Tokyo (see PR
+ libc/776).
+
1998-09-09 Benjamin Kosnik <bkoz@tintin.cygnus.com>
* math/libm-test.c (exp10_test): Adapt epsilons for powerpc.
(csqrt_test): Likewise.
- * sysdeps/powerpc/bits/fenv.h: Add parens. .
+ * sysdeps/powerpc/bits/fenv.h: Add parens.
1998-09-09 18:48 Ulrich Drepper <drepper@cygnus.com>
compute_tzname_max (chars);
- rule_stdoff = rule_dstoff = 0;
- for (i = 0; i < num_transitions; ++i)
+ if (num_transitions == 0)
+ /* Use the first rule (which should also be the only one. */
+ rule_stdoff = rule_dstoff = types[0].offset;
+ else
{
- if (!rule_stdoff && !types[type_idxs[i]].isdst)
- rule_stdoff = types[type_idxs[i]].offset;
- if (!rule_dstoff && types[type_idxs[i]].isdst)
- rule_dstoff = types[type_idxs[i]].offset;
- if (rule_stdoff && rule_dstoff)
- break;
+ rule_stdoff = rule_dstoff = 0;
+ for (i = 0; i < num_transitions; ++i)
+ {
+ if (!rule_stdoff && !types[type_idxs[i]].isdst)
+ rule_stdoff = types[type_idxs[i]].offset;
+ if (!rule_dstoff && types[type_idxs[i]].isdst)
+ rule_dstoff = types[type_idxs[i]].offset;
+ if (rule_stdoff && rule_dstoff)
+ break;
+ }
}
__daylight = rule_stdoff != rule_dstoff;
__tzname[0] = (char *) std;
__tzname[1] = (char *) dst;
+ /* Set the timezone. */
+ __timezone = -types[0].offset;
+
compute_tzname_max (stdlen + dstlen);
}
\f
tz_rules[0].name = tz_rules[1].name = "";
/* Get the standard timezone name. */
- tzbuf = malloc (strlen (tz) + 1);
- if (! tzbuf)
- {
- /* Clear the old tz name so we will try again. */
- free (old_tz);
- old_tz = NULL;
- return;
- }
+ tzbuf = strdupa (tz);
if (sscanf (tz, "%[^0-9,+-]", tzbuf) != 1 ||
(l = strlen (tzbuf)) < 3)
- {
- free (tzbuf);
- return;
- }
+ return;
tz_rules[0].name = __tzstring (tzbuf);
/* Figure out the standard offset from UTC. */
if (*tz == '\0' || (*tz != '+' && *tz != '-' && !isdigit (*tz)))
- {
- free (tzbuf);
- return;
- }
+ return;
if (*tz == '-' || *tz == '+')
tz_rules[0].offset = *tz++ == '-' ? 1L : -1L;
switch (sscanf (tz, "%hu:%hu:%hu", &hh, &mm, &ss))
{
default:
- free (tzbuf);
return;
case 1:
mm = 0;
{
free (old_tz);
old_tz = NULL;
- free (tzbuf);
return;
}
}
/* There is no DST. */
tz_rules[1].name = tz_rules[0].name;
tz_rules[1].offset = tz_rules[0].offset;
- free (tzbuf);
- return;
+ goto out;
}
done_names:
- free (tzbuf);
-
/* Figure out the standard <-> DST rules. */
for (whichrule = 0; whichrule < 2; ++whichrule)
{
char *end;
tzr->type = *tz == 'J' ? J1 : J0;
if (tzr->type == J1 && !isdigit (*++tz))
- return;
+ goto out;
tzr->d = (unsigned short int) strtoul (tz, &end, 10);
if (end == tz || tzr->d > 365)
- return;
+ goto out;
else if (tzr->type == J1 && tzr->d == 0)
- return;
+ goto out;
tz = end;
}
else if (*tz == 'M')
&tzr->m, &tzr->n, &tzr->d, &n) != 3 ||
tzr->m < 1 || tzr->m > 12 ||
tzr->n < 1 || tzr->n > 5 || tzr->d > 6)
- return;
+ goto out;
tz += n;
}
else if (*tz == '\0')
}
}
else
- return;
+ goto out;
if (*tz != '\0' && *tz != '/' && *tz != ',')
- return;
+ goto out;
else if (*tz == '/')
{
/* Get the time of day of the change. */
++tz;
if (*tz == '\0')
- return;
+ goto out;
switch (sscanf (tz, "%hu:%hu:%hu", &hh, &mm, &ss))
{
default:
tzr->computed_for = -1;
}
+
+ out:
+ /* We know the offset now, set `__timezone'. */
+ __timezone = -tz_rules[0].offset;
}
\f
/* Maximum length of a timezone name. __tz_compute keeps this up to date
$(objpfx)tst-timezone.out: $(addprefix $(testdata)/, \
Europe/Berlin Universal \
Australia/Melbourne \
- America/Sao_Paulo)
+ America/Sao_Paulo Asia/Tokyo)
test-tz-ENV = TZDIR=$(testdata)
tst-timezone-ENV = TZDIR=$(testdata)
$(testdata)/America/Sao_Paulo: southamerica $(objpfx)zic $(leapseconds) \
yearistype
$(build-testdata)
+$(testdata)/Asia/Tokyo: asia $(objpfx)zic $(leapseconds) yearistype
+ $(build-testdata)
$(objpfx)tzselect: tzselect.ksh $(common-objpfx)config.make
{ "Australia/Melbourne", 1, -36000, { "EST", "EST" }},
{ "America/Sao_Paulo", 1, 10800, {"EST", "EDT" }},
{ "America/Los_Angeles", 1, 28800, {"PST", "PDT" }},
+ { "Asia/Tokyo", 0, -32400, {"JST", "JST" }},
{ NULL, 0, 0 }
};