void *g_menubg_src_ptr;\r
void *g_menubg_ptr;\r
\r
-#if !MSCREEN_SIZE_FIXED\r
int g_menuscreen_w;\r
int g_menuscreen_h;\r
-#endif\r
\r
static unsigned char *menu_font_data = NULL;\r
static int menu_text_color = 0xfffe; // default to white\r
return alphasort(d1, d2);\r
}\r
\r
+static const char **filter_exts_internal;\r
+\r
static int scandir_filter(const struct dirent *ent)\r
{\r
+ const char **filter = filter_exts_internal;\r
const char *ext;\r
int i;\r
\r
return 0;\r
\r
ext++;\r
- for (i = 0; i < array_size(filter_exts); i++)\r
- if (strcasecmp(ext, filter_exts[i]) == 0)\r
+ for (i = 0; filter[i] != NULL; i++)\r
+ if (strcasecmp(ext, filter[i]) == 0)\r
return 1;\r
\r
return 0;\r
return i - 1;\r
}\r
\r
-static char *menu_loop_romsel(char *curr_path, int len,\r
+static const char *menu_loop_romsel(char *curr_path, int len,\r
+ const char **filter_exts,\r
int (*extra_filter)(struct dirent **namelist, int count,\r
const char *basedir))\r
{\r
struct dirent **namelist = NULL;\r
int n = 0, inp = 0, sel = 0, show_help = 0;\r
char *curr_path_restore = NULL;\r
- char *ret = NULL;\r
+ const char *ret = NULL;\r
char cinp;\r
\r
+ filter_exts_internal = filter_exts;\r
sel_fname[0] = 0;\r
\r
// is this a dir or a full path?\r
if (!plat_is_dir(curr_path)) {\r
- char *p = curr_path + strlen(curr_path) - 1;\r
- for (; p > curr_path && *p != '/'; p--)\r
- ;\r
- *p = 0;\r
- curr_path_restore = p;\r
- snprintf(sel_fname, sizeof(sel_fname), "%s", p + 1);\r
+ char *p = strrchr(curr_path, '/');\r
+ if (p != NULL) {\r
+ *p = 0;\r
+ curr_path_restore = p;\r
+ snprintf(sel_fname, sizeof(sel_fname), "%s", p + 1);\r
+ }\r
\r
- show_help = 2;\r
+ if (rom_fname_reload[0] == 0)\r
+ show_help = 2;\r
}\r
\r
rescan:\r
strcat(newdir, "/");\r
strcat(newdir, namelist[sel+1]->d_name);\r
}\r
- ret = menu_loop_romsel(newdir, newlen, extra_filter);\r
+ ret = menu_loop_romsel(newdir, newlen, filter_exts, extra_filter);\r
free(newdir);\r
break;\r
}\r