1
0
Fork 0
forked from len0rd/rockbox

settings set_file() cleanup unused maxlen and check for file exist

maxlen is set to MAX_FILENAME by all callers so lets just make that part of the deal
check the file exists before we set it

Change-Id: I3074f3164fcd4b8873b69612d5c1a51a39de4baf
This commit is contained in:
William Wilgus 2025-01-24 00:20:45 -05:00
parent 14898bc19e
commit bdf89bf4b0
4 changed files with 23 additions and 20 deletions

View file

@ -461,15 +461,15 @@ static void ft_load_font(char *file)
{ {
case 0: /* main lcd */ case 0: /* main lcd */
screen = SCREEN_MAIN; screen = SCREEN_MAIN;
set_file(file, (char *)global_settings.font_file, MAX_FILENAME); set_file(file, (char *)global_settings.font_file);
break; break;
case 1: /* remote */ case 1: /* remote */
screen = SCREEN_REMOTE; screen = SCREEN_REMOTE;
set_file(file, (char *)global_settings.remote_font_file, MAX_FILENAME); set_file(file, (char *)global_settings.remote_font_file);
break; break;
} }
#else #else
set_file(file, (char *)global_settings.font_file, MAX_FILENAME); set_file(file, (char *)global_settings.font_file);
#endif #endif
splash(0, ID2P(LANG_WAIT)); splash(0, ID2P(LANG_WAIT));
current_font_id = screens[screen].getuifont(); current_font_id = screens[screen].getuifont();
@ -480,10 +480,10 @@ static void ft_load_font(char *file)
viewportmanager_theme_changed(THEME_UI_VIEWPORT); viewportmanager_theme_changed(THEME_UI_VIEWPORT);
} }
static void ft_apply_skin_file(char *buf, char *file, const int maxlen) static void ft_apply_skin_file(char *buf, char *file)
{ {
splash(0, ID2P(LANG_WAIT)); splash(0, ID2P(LANG_WAIT));
set_file(buf, file, maxlen); set_file(buf, file);
settings_apply_skins(); settings_apply_skins();
} }
@ -639,30 +639,30 @@ int ft_enter(struct tree_context* c)
rc = GO_TO_FM; rc = GO_TO_FM;
break; break;
case FILE_ATTR_FMS: case FILE_ATTR_FMS:
ft_apply_skin_file(buf, global_settings.fms_file, MAX_FILENAME); ft_apply_skin_file(buf, global_settings.fms_file);
break; break;
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
case FILE_ATTR_RFMS: case FILE_ATTR_RFMS:
ft_apply_skin_file(buf, global_settings.rfms_file, MAX_FILENAME); ft_apply_skin_file(buf, global_settings.rfms_file);
break; break;
#endif #endif
#endif #endif
case FILE_ATTR_SBS: case FILE_ATTR_SBS:
ft_apply_skin_file(buf, global_settings.sbs_file, MAX_FILENAME); ft_apply_skin_file(buf, global_settings.sbs_file);
break; break;
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
case FILE_ATTR_RSBS: case FILE_ATTR_RSBS:
ft_apply_skin_file(buf, global_settings.rsbs_file, MAX_FILENAME); ft_apply_skin_file(buf, global_settings.rsbs_file);
break; break;
#endif #endif
/* wps config file */ /* wps config file */
case FILE_ATTR_WPS: case FILE_ATTR_WPS:
ft_apply_skin_file(buf, global_settings.wps_file, MAX_FILENAME); ft_apply_skin_file(buf, global_settings.wps_file);
break; break;
#if defined(HAVE_REMOTE_LCD) && (NB_SCREENS > 1) #if defined(HAVE_REMOTE_LCD) && (NB_SCREENS > 1)
/* remote-wps config file */ /* remote-wps config file */
case FILE_ATTR_RWPS: case FILE_ATTR_RWPS:
ft_apply_skin_file(buf, global_settings.rwps_file, MAX_FILENAME); ft_apply_skin_file(buf, global_settings.rwps_file);
break; break;
#endif #endif
case FILE_ATTR_CFG: case FILE_ATTR_CFG:
@ -685,8 +685,7 @@ int ft_enter(struct tree_context* c)
splash(HZ, ID2P(LANG_FAILED)); splash(HZ, ID2P(LANG_FAILED));
break; break;
} }
set_file(buf, (char *)global_settings.lang_file, set_file(buf, (char *)global_settings.lang_file);
MAX_FILENAME);
talk_init(); /* use voice of same language */ talk_init(); /* use voice of same language */
viewportmanager_theme_changed(THEME_LANGUAGE); viewportmanager_theme_changed(THEME_LANGUAGE);
settings_apply_skins(); settings_apply_skins();
@ -701,7 +700,7 @@ int ft_enter(struct tree_context* c)
splash(0, ID2P(LANG_WAIT)); splash(0, ID2P(LANG_WAIT));
if (!load_kbd(buf)) if (!load_kbd(buf))
splash(HZ, ID2P(LANG_KEYBOARD_LOADED)); splash(HZ, ID2P(LANG_KEYBOARD_LOADED));
set_file(buf, (char *)global_settings.kbd_file, MAX_FILENAME); set_file(buf, (char *)global_settings.kbd_file);
break; break;
#if defined(HAVE_ROLO) #if defined(HAVE_ROLO)

View file

@ -197,7 +197,7 @@ void radio_save_presets(void)
close(fd); close(fd);
if (strcasestr(filepreset, FMPRESET_PATH)) if (strcasestr(filepreset, FMPRESET_PATH))
set_file(filepreset, global_settings.fmr_file, MAX_FILENAME); set_file(filepreset, global_settings.fmr_file);
presets_changed = false; presets_changed = false;
} }
else else
@ -240,7 +240,7 @@ void radio_load_presets(const char *filename)
/* Preset inside the default folder? */ /* Preset inside the default folder? */
if (strcasestr(filepreset, FMPRESET_PATH)) if (strcasestr(filepreset, FMPRESET_PATH))
set_file(filepreset, global_settings.fmr_file, MAX_FILENAME); set_file(filepreset, global_settings.fmr_file);
/* else Temporary preset, loaded until player shuts down. */ /* else Temporary preset, loaded until player shuts down. */
fd = open_utf8(filepreset, O_RDONLY); fd = open_utf8(filepreset, O_RDONLY);

View file

@ -1284,8 +1284,9 @@ bool set_option(const char* string, const void* variable, enum optiontype type,
* Takes filename, removes the directory and the extension, * Takes filename, removes the directory and the extension,
* and then copies the basename into setting, unless the basename exceeds maxlen * and then copies the basename into setting, unless the basename exceeds maxlen
**/ **/
void set_file(const char* filename, char* setting, const int maxlen) void set_file(const char* filename, char* setting)
{ {
const int maxlen = MAX_FILENAME;
const char* fptr = strrchr(filename,'/'); const char* fptr = strrchr(filename,'/');
const char* extptr; const char* extptr;
int len; int len;
@ -1305,9 +1306,12 @@ void set_file(const char* filename, char* setting, const int maxlen)
len = strlen(fptr) - extlen + 1; len = strlen(fptr) - extlen + 1;
/* error if filename isn't in ROCKBOX_DIR */ /* error later if filename isn't in ROCKBOX_DIR */
if (len > maxlen) if (len > maxlen || !file_exists(filename))
{
DEBUGF("%s Error %s\n", __func__, filename);
return; return;
}
strmemccpy(setting, fptr, len); strmemccpy(setting, fptr, len);
settings_save(); settings_save();

View file

@ -308,7 +308,7 @@ bool set_int_ex(const unsigned char* string, const char* unit, int voice_unit,
const char* (*formatter)(char*, size_t, int, const char*), const char* (*formatter)(char*, size_t, int, const char*),
int32_t (*get_talk_id)(int, int)); int32_t (*get_talk_id)(int, int));
void set_file(const char* filename, char* setting, const int maxlen); void set_file(const char* filename, char* setting);
bool set_option(const char* string, const void* variable, enum optiontype type, bool set_option(const char* string, const void* variable, enum optiontype type,
const struct opt_items* options, int numoptions, void (*function)(int)); const struct opt_items* options, int numoptions, void (*function)(int));