settings: fix mismatched resume setting variable types

rockbox-gerrit-noreply--- via rockbox-cvs <[email protected]> Fri, 10 Apr 2026 20:05:14 -0400
Newsgroups gmane.comp.systems.archos.rockbox.cvs
Message-ID <[email protected]>
commit 27ebdfcb25e2c6e7c5ad97686047500ccde50a7e
Author: Christian Soffke <[email protected]>
Date:   Thu Apr 9 16:29:27 2026 +0200

    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

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"),
-- 
rockbox-cvs mailing list
[email protected]
https://lists.haxx.se/mailman/listinfo/rockbox-cvs