summaryrefslogtreecommitdiffstats
path: root/newlib/libc/time/mktm_r.c
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2011-10-11 11:28:05 +0000
committerCorinna Vinschen <corinna@vinschen.de>2011-10-11 11:28:05 +0000
commitf13f2da4ee2eb36a740caddbfb09bbfd927bc52f (patch)
tree885778528256232ea425a9e170a77cd5b98c0904 /newlib/libc/time/mktm_r.c
parenteefc33184a564c1d33384af6c9776274a72481f8 (diff)
downloadcygnal-f13f2da4ee2eb36a740caddbfb09bbfd927bc52f.tar.gz
cygnal-f13f2da4ee2eb36a740caddbfb09bbfd927bc52f.tar.bz2
cygnal-f13f2da4ee2eb36a740caddbfb09bbfd927bc52f.zip
* libc/time/mktm_r.c: (__tzcalc_limits) Fix Julian day calculation.
* libc/time/mktime.c: (mktime) Fix tm_yday, tm_mday updating when timezone causes roll over.
Diffstat (limited to 'newlib/libc/time/mktm_r.c')
-rw-r--r--newlib/libc/time/mktm_r.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/newlib/libc/time/mktm_r.c b/newlib/libc/time/mktm_r.c
index c0ab2191a..9a3bc820e 100644
--- a/newlib/libc/time/mktm_r.c
+++ b/newlib/libc/time/mktm_r.c
@@ -216,10 +216,13 @@ _DEFUN (__tzcalc_limits, (year),
for (i = 0; i < 2; ++i)
{
- if (tz->__tzrule[i].ch == 'J')
+ if (tz->__tzrule[i].ch == 'J') {
+ /* The Julian day n (1 <= n <= 365). */
days = year_days + tz->__tzrule[i].d +
(isleap(year) && tz->__tzrule[i].d >= 60);
- else if (tz->__tzrule[i].ch == 'D')
+ /* Convert to yday */
+ --days;
+ } else if (tz->__tzrule[i].ch == 'D')
days = year_days + tz->__tzrule[i].d;
else
{