aboutsummaryrefslogtreecommitdiff
path: root/time
diff options
context:
space:
mode:
Diffstat (limited to 'time')
-rw-r--r--time/tzfile.c10
-rw-r--r--time/tzset.c21
2 files changed, 15 insertions, 16 deletions
diff --git a/time/tzfile.c b/time/tzfile.c
index 9fab857..1d51a69 100644
--- a/time/tzfile.c
+++ b/time/tzfile.c
@@ -415,13 +415,13 @@ find_transition (time_t timer)
int
__tzfile_compute (time_t timer, int use_localtime,
long int *leap_correct, int *leap_hit,
- int *isdst, long int *offset)
+ struct tm *tp)
{
- struct ttinfo *info = find_transition (timer);
register size_t i;
if (use_localtime)
{
+ struct ttinfo *info = find_transition (timer);
__daylight = rule_stdoff != rule_dstoff;
__timezone = -rule_stdoff;
__tzname[1] = NULL;
@@ -432,11 +432,11 @@ __tzfile_compute (time_t timer, int use_localtime,
if (__tzname[1] == NULL)
/* There is no daylight saving time. */
__tzname[1] = __tzname[0];
+ tp->tm_isdst = info->isdst;
+ tp->tm_zone = &zone_names[info->idx];
+ tp->tm_gmtoff = info->offset;
}
- *isdst = info->isdst;
- *offset = info->offset;
-
*leap_correct = 0L;
*leap_hit = 0;
diff --git a/time/tzset.c b/time/tzset.c
index 251967e..4b8fa41 100644
--- a/time/tzset.c
+++ b/time/tzset.c
@@ -38,7 +38,7 @@ extern int __use_tzfile;
extern void __tzfile_read __P ((const char *file));
extern int __tzfile_compute __P ((time_t timer, int use_localtime,
long int *leap_correct, int *leap_hit,
- int *isdst, long int *offset));
+ struct tm *tp));
extern void __tzfile_default __P ((const char *std, const char *dst,
long int stdoff, long int dstoff));
extern char *__tzstring __P ((const char *string));
@@ -595,8 +595,6 @@ __tz_convert (const time_t *timer, int use_localtime, struct tm *tp)
{
long int leap_correction;
int leap_extra_secs;
- int isdst;
- long int offset;
if (timer == NULL)
{
@@ -615,8 +613,7 @@ __tz_convert (const time_t *timer, int use_localtime, struct tm *tp)
if (__use_tzfile)
{
if (! __tzfile_compute (*timer, use_localtime,
- &leap_correction, &leap_extra_secs,
- &isdst, &offset))
+ &leap_correction, &leap_extra_secs, tp))
tp = NULL;
}
else
@@ -625,18 +622,20 @@ __tz_convert (const time_t *timer, int use_localtime, struct tm *tp)
tp = NULL;
leap_correction = 0L;
leap_extra_secs = 0;
-
- isdst = (*timer >= tz_rules[0].change && *timer < tz_rules[1].change);
- offset = tz_rules[isdst].offset;
}
if (tp)
{
if (use_localtime)
{
- tp->tm_isdst = isdst;
- tp->tm_zone = __tzname[isdst];
- tp->tm_gmtoff = offset;
+ if (!__use_tzfile)
+ {
+ int isdst = (*timer >= tz_rules[0].change
+ && *timer < tz_rules[1].change);
+ tp->tm_isdst = isdst;
+ tp->tm_zone = __tzname[isdst];
+ tp->tm_gmtoff = tz_rules[isdst].offset;
+ }
}
else
{