From: Daniel Veillard Date: Tue, 8 Apr 2008 17:05:41 +0000 (+0000) Subject: add back #452876 patch lost on previous commit, Daniel X-Git-Tag: v1.1.28~151 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6f9f02c608d7a2b1398ca38e0c7e2f86fd70f543;p=platform%2Fupstream%2Flibxslt.git add back #452876 patch lost on previous commit, Daniel svn path=/trunk/; revision=1466 --- diff --git a/libexslt/date.c b/libexslt/date.c index 2276778..fef6044 100644 --- a/libexslt/date.c +++ b/libexslt/date.c @@ -2143,7 +2143,7 @@ static double exsltDateWeekInYear (const xmlChar *dateTime) { exsltDateValPtr dt; - long fdiy, fdiw, ret; + long diy, diw, year, ret; if (dateTime == NULL) { #ifdef WITH_TIME @@ -2161,20 +2161,26 @@ exsltDateWeekInYear (const xmlChar *dateTime) } } - fdiy = DAY_IN_YEAR(1, 1, dt->value.date.year); - + diy = DAY_IN_YEAR(dt->value.date.day, dt->value.date.mon, + dt->value.date.year); + /* * Determine day-in-week (0=Sun, 1=Mon, etc.) then adjust so Monday * is the first day-in-week */ - fdiw = (_exsltDateDayInWeek(fdiy, dt->value.date.year) + 6) % 7; - - ret = (DAY_IN_YEAR(dt->value.date.day, dt->value.date.mon, - dt->value.date.year) + fdiw) / 7; + diw = (_exsltDateDayInWeek(diy, dt->value.date.year) + 6) % 7; /* ISO 8601 adjustment, 3 is Thu */ - if (fdiw <= 3) - ret += 1; + diy += (3 - diw); + if(diy < 1) { + year = dt->value.date.year - 1; + if(year == 0) year--; + diy = DAY_IN_YEAR(31, 12, year) + diy; + } else if (diy > DAY_IN_YEAR(31, 12, dt->value.date.year)) { + diy -= DAY_IN_YEAR(31, 12, dt->value.date.year); + } + + ret = ((diy - 1) / 7) + 1; exsltDateFreeDate(dt);