commit c4250239fb94b6620bd6ea56eaba653b23a74784
parent e058f92b4049440893187d087de983c670d2348d
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Fri, 25 Mar 2022 20:51:50 +0100
libc: gmtime: fix mday calculation for wrapping in the month
An example:
int
main(void)
{
time_t t = 1617235200;
struct tm *tm;
// should be: 2021-04-01 02:00
// scc showed: 2021-03-32 00:00
tm = localtime(&t);
printf("%04d-%02d-%02d %02d:%02d\n",
tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
tm->tm_hour, tm->tm_min);
return 0;
}
Note that tm_yday already has the inclusive >= check and is correct.
Diffstat:
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/libc/time/gmtime.c b/src/libc/time/gmtime.c
@@ -26,7 +26,7 @@ gmtime(const time_t *tim)
tm.tm_yday = day;
_daysmon[FEB] = FEBDAYS(tm.tm_year);
- for (i = JAN; day > _daysmon[i]; i++)
+ for (i = JAN; day >= _daysmon[i]; i++)
day -= _daysmon[i];
tm.tm_mon = i;
tm.tm_mday = day + 1;