Handle localtime_r() failure in j1939 timedate

When the call to localtime_r() fails (by returning NULL, as per the POSIX specification), make sure to fill the hour/minute offsets with the fallback values as specified in the J1939DA supporting information.
pull/627/head
Samantaz Fox 2026-05-05 21:47:40 +00:00 committed by GitHub
parent 99ab67143a
commit e9b81276e5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 16 additions and 10 deletions

View File

@ -41,16 +41,22 @@ static void gmtime_to_j1939_pgn_65254_td(struct j1939_time_date_packet *tdp)
utc_tm = gmtime_r(&now, &utc_tm_buf); utc_tm = gmtime_r(&now, &utc_tm_buf);
local_tm = localtime_r(&now, &local_tm_buf); local_tm = localtime_r(&now, &local_tm_buf);
/* Calculate the offsets */ if (local_tm != NULL) {
hour_offset = local_tm->tm_hour - utc_tm->tm_hour; /* Calculate the offsets */
minute_offset = local_tm->tm_min - utc_tm->tm_min; hour_offset = local_tm->tm_hour - utc_tm->tm_hour;
minute_offset = local_tm->tm_min - utc_tm->tm_min;
/* Handle date rollover */ /* Handle date rollover */
if (local_tm->tm_mday != utc_tm->tm_mday) { if (local_tm->tm_mday != utc_tm->tm_mday) {
if (local_tm->tm_hour < 12) if (local_tm->tm_hour < 12)
hour_offset += 24; /* past midnight */ hour_offset += 24; /* past midnight */
else else
hour_offset -= 24; /* before midnight */ hour_offset -= 24; /* before midnight */
}
} else {
/* The local time offsets cannot be determined at the moment */
hour_offset = 0xF9;
minute_offset = 0xFF;
} }
/* /*