Consider this struct tm for in CET (Europe/Prague):
tm_sec: 3tm_min: 59
tm_hour: 1
tm_mday: 31
tm_mon: 2
tm_year: 124
tm_wday: 0
tm_yday: 90
tm_isdst: 0
Representing:
2024-03-31 01:59:02
Add a minute and call mktime (crossing DST boundary).
Instead of getting:
2024-03-31 03:00:02
You get:
2024-03-31 01:00:02
tm_sec: 3
tm_min: 0
tm_hour: 1
tm_mday: 31
tm_mon: 2
tm_year: 124
tm_wday: 0
tm_yday: 90
tm_isdst: 0
Not only We are going backwards, DST flag is not even set.
Glibc behaves correctly:
tm_sec: 3tm_min: 0
tm_hour: 3
tm_mday: 31
tm_mon: 2
tm_year: 124
tm_wday: 0
tm_yday: 90
tm_isdst: 1
tm_hour = 3 and tm_isdst = 1
This pretty messes with my cron tool that rely on mktime being able to correctly calculate struct tm after incrementing fields.