scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/libc/time/gmtime.c | 2+-
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;