From c13f2af1fe1856e36dd1b2773cac05d5d72641dc Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Thu, 13 Aug 2015 17:28:39 +0200 Subject: match historical behavior for tm_gmtoff member of struct tm tm_gmtoff is a nonstandard field, but on historical systems which have this field, it stores the offset of the local time zone from GMT or UTC. this is the opposite of the POSIX extern long timezone object and the offsets used in POSIX-form TZ strings, which represent the offset from local time to UTC. previously we were storing these negated offsets in tm_gmtoff too. programs which only used this field indirectly via strftime were not affected since strftime performed the negation for presentation. however, some programs and libraries accesse tm_gmtoff directly and were obtaining negated time zone offsets. --- src/time/localtime_r.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/time/localtime_r.c') diff --git a/src/time/localtime_r.c b/src/time/localtime_r.c index 1d43d9f4..2e62c29f 100644 --- a/src/time/localtime_r.c +++ b/src/time/localtime_r.c @@ -11,7 +11,7 @@ struct tm *__localtime_r(const time_t *restrict t, struct tm *restrict tm) return 0; } __secs_to_zone(*t, 0, &tm->tm_isdst, &tm->__tm_gmtoff, 0, &tm->__tm_zone); - if (__secs_to_tm((long long)*t - tm->__tm_gmtoff, tm) < 0) { + if (__secs_to_tm((long long)*t + tm->__tm_gmtoff, tm) < 0) { errno = EOVERFLOW; return 0; } -- cgit v1.2.1