Merge pull request #224 from rieck/deadline_face_fix

Fix of two bugs in deadline face
This commit is contained in:
voloved
2026-07-28 09:07:46 -04:00
committed by GitHub
+7 -11
View File
@@ -227,8 +227,6 @@ static void _correct_time_difference(int16_t *units, watch_date_time_t deadline)
/* Increment date in settings mode. Function taken from `set_time_face.c` */ /* Increment date in settings mode. Function taken from `set_time_face.c` */
static void _increment_date(deadline_state_t *state, watch_date_time_t date_time) static void _increment_date(deadline_state_t *state, watch_date_time_t date_time)
{ {
const uint8_t days_in_month[12] = { 31, 28, 31, 30, 31, 30, 30, 31, 30, 31, 30, 31 };
switch (state->current_page) { switch (state->current_page) {
case 0: case 0:
/* Only 10 years covered. Fix this sometime next decade */ /* Only 10 years covered. Fix this sometime next decade */
@@ -237,17 +235,15 @@ static void _increment_date(deadline_state_t *state, watch_date_time_t date_time
case 1: case 1:
date_time.unit.month = (date_time.unit.month % 12) + 1; date_time.unit.month = (date_time.unit.month % 12) + 1;
break; break;
case 2: case 2: {
date_time.unit.day = date_time.unit.day + 1; int days = _days_in_month(date_time.unit.month, date_time.unit.year);
/* Check for leap years */ /* Compute next day outside the 5-bit bitfield so overflow past 31
int8_t days = days_in_month[date_time.unit.month - 1]; * can be compared against `days` before it gets truncated. */
if (date_time.unit.month == 2 && _is_leap(date_time.unit.year)) uint8_t day = date_time.unit.day + 1;
days++; date_time.unit.day = (day > days) ? 1 : day;
if (date_time.unit.day > days)
date_time.unit.day = 1;
break; break;
}
case 3: case 3:
date_time.unit.hour = (date_time.unit.hour + 1) % 24; date_time.unit.hour = (date_time.unit.hour + 1) % 24;
break; break;