From 27ebdfcb25e2c6e7c5ad97686047500ccde50a7e Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Thu, 9 Apr 2026 16:29:27 +0200 Subject: [PATCH] settings: fix mismatched resume setting variable types The SYSTEM_STATUS macro for these variables has an F_T_INT flag, which may result in an unexpected value being written to the resume file for PLM and PVS. Change-Id: Iea18efbdc68604e1297721d132a9a5b7d056ffad --- apps/playlist.c | 2 +- apps/root_menu.c | 12 ++++++++---- apps/settings.h | 4 ++-- apps/settings_list.c | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/apps/playlist.c b/apps/playlist.c index 1543fad262..056bab957f 100644 --- a/apps/playlist.c +++ b/apps/playlist.c @@ -3789,7 +3789,7 @@ int playlist_update_resume_info(const struct mp3entry* id3) global_status.resume_crc32 = -1; global_status.resume_elapsed = -1; global_status.resume_offset = -1; - global_status.resume_modified = false; + global_status.resume_modified = 0; status_save(true); return -1; } diff --git a/apps/root_menu.c b/apps/root_menu.c index 977a72e80c..090819dc70 100644 --- a/apps/root_menu.c +++ b/apps/root_menu.c @@ -492,7 +492,7 @@ static const struct root_items items[] = { [GO_TO_SHORTCUTMENU] = { do_shortcut_menu, NULL, NULL }, }; -//static const int nb_items = sizeof(items)/sizeof(*items); +#define NUM_ITEMS (int)(sizeof(items)/sizeof(*items)) static int item_callback(int action, const struct menu_item_ex *this_item, @@ -852,9 +852,13 @@ static int root_menu_setup_screens(void) { int new_screen = next_screen; if (global_settings.start_in_screen == 0) - new_screen = (int)global_status.last_screen; - else new_screen = global_settings.start_in_screen - 2; - if (new_screen == GO_TO_PLUGIN) + new_screen = global_status.last_screen; + else + new_screen = global_settings.start_in_screen - 2; + + if (new_screen >= NUM_ITEMS) + new_screen = GO_TO_ROOT; + else if (new_screen == GO_TO_PLUGIN) { if (global_status.last_screen == GO_TO_SHORTCUTMENU) { diff --git a/apps/settings.h b/apps/settings.h index 695af0276d..29b120dbde 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -359,12 +359,12 @@ struct system_status int last_frequency; /* Last frequency for resuming, in FREQ_STEP units, relative to MIN_FREQ */ #endif - signed char last_screen; + int last_screen; int viewer_icon_count; int last_volume_change; /* tick the last volume change happened. skins use this */ int font_id[NB_SCREENS]; /* font id of the settings font for each screen */ - bool resume_modified; /* playlist is modified (=> warn before erase) */ + int resume_modified; /* playlist is modified (=> warn before erase) */ char browse_last_folder[MAX_PATH];/* only saved if keep_directory = true */ }; diff --git a/apps/settings_list.c b/apps/settings_list.c index e0c18dcee3..73c7785580 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -956,7 +956,7 @@ const struct settings_list settings[] = { SYSTEM_STATUS(0, resume_crc32, -1, "CRC"), SYSTEM_STATUS(0, resume_elapsed, -1, "ELA"), SYSTEM_STATUS(0, resume_offset, -1, "OFF"), - SYSTEM_STATUS(0, resume_modified, false, "PLM"), + SYSTEM_STATUS(0, resume_modified, 0, "PLM"), SYSTEM_STATUS(0, runtime, 0, "CRT"), SYSTEM_STATUS(0, topruntime, 0, "TRT"), SYSTEM_STATUS(0, last_screen, -1, "PVS"),