@@ -60,42 +60,48 @@ void ActionLoadDiscFile(const char *file_path)
6060 xemu_queue_error_message (error_get_pretty (err));
6161 error_free (err);
6262 } else {
63- if (file_path && file_path[0 ]) {
64- if (!g_config.general .recent .discs ) {
65- g_config.general .recent .discs = g_new0 (const char *, 1 );
66- g_config.general .recent .discs_count = 0 ;
67- }
63+ if (!g_config.general .recent .discs ) {
64+ g_config.general .recent .discs = g_new0 (const char *, 1 );
65+ g_config.general .recent .discs_count = 0 ;
66+ }
6867
69- int i;
70- for (i = 0 ; i < g_config.general .recent .discs_count ; i++) {
71- if (g_strcmp0 (g_config.general .recent .discs [i], file_path) == 0 ) {
72- for (int j = i; j > 0 ; j--) {
73- g_config.general .recent .discs [j] = g_config.general .recent .discs [j-1 ];
74- }
75- g_config.general .recent .discs [0 ] = g_strdup (file_path);
76- return ;
68+ // If current game is already in history,
69+ // move other game entries down,
70+ // then move the current game to the most recent slot.
71+ for (unsigned i = 0 ; i < g_config.general .recent .discs_count ; i++) {
72+ if (g_strcmp0 (g_config.general .recent .discs [i], file_path) == 0 ) {
73+ const char *current_path = g_config.general .recent .discs [i];
74+ for (unsigned int j = i; j > 0 ; j--) {
75+ g_config.general .recent .discs [j] =
76+ g_config.general .recent .discs [j - 1 ];
7777 }
78+ g_config.general .recent .discs [0 ] = current_path;
79+ return ;
80+ }
81+ }
82+ // Free a slot for our entry.
83+ if (g_config.general .recent .discs_count >= MAX_RECENT_DISCS) {
84+ for (unsigned i = MAX_RECENT_DISCS;
85+ i < g_config.general .recent .discs_count ; i++) {
86+ g_free ((void *)g_config.general .recent .discs [i]);
7887 }
7988
80- if (i == g_config.general .recent .discs_count ) {
81- if (g_config.general .recent .discs_count >= MAX_RECENT_DISCS) {
82- for (int j = MAX_RECENT_DISCS; j < g_config.general .recent .discs_count ; j++) {
83- g_free ((void *)g_config.general .recent .discs [j]);
84- }
85- g_config.general .recent .discs_count = MAX_RECENT_DISCS;
86- } else {
87- const char **new_discs = g_renew (const char *, g_config.general .recent .discs ,
88- g_config.general .recent .discs_count + 1 );
89- g_config.general .recent .discs = new_discs;
90- g_config.general .recent .discs_count ++;
91- }
89+ g_free ((void *)g_config.general .recent .discs [MAX_RECENT_DISCS - 1 ]);
90+ g_config.general .recent .discs_count = MAX_RECENT_DISCS;
91+ } else {
92+ // Allocate new space.
93+ const char **new_discs =
94+ g_renew (const char *, g_config.general .recent .discs ,
95+ g_config.general .recent .discs_count + 1 );
96+ g_config.general .recent .discs = new_discs;
97+ g_config.general .recent .discs_count ++;
98+ }
9299
93- for (int i = g_config.general .recent .discs_count - 1 ; j > 0 ; j--) {
94- g_config.general .recent .discs [i] = g_config.general .recent .discs [j-1 ];
95- }
96- g_config.general .recent .discs [0 ] = g_strdup (file_path);
97- }
100+ for (unsigned i = g_config.general .recent .discs_count - 1 ; i > 0 ; i--) {
101+ g_config.general .recent .discs [i] =
102+ g_config.general .recent .discs [i - 1 ];
98103 }
104+ g_config.general .recent .discs [0 ] = g_strdup (file_path);
99105 }
100106}
101107
@@ -120,7 +126,7 @@ void ActionShutdown(void)
120126
121127void ActionScreenshot (void )
122128{
123- g_screenshot_pending = true ;
129+ g_screenshot_pending = true ;
124130}
125131
126132void ActionActivateBoundSnapshot (int slot, bool save)
@@ -154,8 +160,8 @@ void ActionLoadSnapshotChecked(const char *name)
154160
155161void ActionClearDiscRecent (void )
156162{
157- for (int i = 0 ; i < g_config.general .recent .discs_count ; i++) {
158- g_free ((void *)g_config.general .recent .discs [i]);
163+ for (unsigned i = 0 ; i < g_config.general .recent .discs_count ; i++) {
164+ g_free ((void *)g_config.general .recent .discs [i]);
159165 }
160166 g_free (g_config.general .recent .discs );
161167 g_config.general .recent .discs = NULL ;
0 commit comments