diff --git a/apps/filetree.c b/apps/filetree.c index 4136998c2a..4d682166d0 100644 --- a/apps/filetree.c +++ b/apps/filetree.c @@ -461,15 +461,15 @@ static void ft_load_font(char *file) { case 0: /* main lcd */ screen = SCREEN_MAIN; - set_file(file, (char *)global_settings.font_file, MAX_FILENAME); + set_file(file, (char *)global_settings.font_file); break; case 1: /* 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; } #else - set_file(file, (char *)global_settings.font_file, MAX_FILENAME); + set_file(file, (char *)global_settings.font_file); #endif splash(0, ID2P(LANG_WAIT)); current_font_id = screens[screen].getuifont(); @@ -480,10 +480,10 @@ static void ft_load_font(char *file) 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)); - set_file(buf, file, maxlen); + set_file(buf, file); settings_apply_skins(); } @@ -639,30 +639,30 @@ int ft_enter(struct tree_context* c) rc = GO_TO_FM; break; 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; #ifdef HAVE_REMOTE_LCD 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; #endif #endif 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; #ifdef HAVE_REMOTE_LCD 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; #endif /* wps config file */ 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; #if defined(HAVE_REMOTE_LCD) && (NB_SCREENS > 1) /* remote-wps config file */ 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; #endif case FILE_ATTR_CFG: @@ -685,8 +685,7 @@ int ft_enter(struct tree_context* c) splash(HZ, ID2P(LANG_FAILED)); break; } - set_file(buf, (char *)global_settings.lang_file, - MAX_FILENAME); + set_file(buf, (char *)global_settings.lang_file); talk_init(); /* use voice of same language */ viewportmanager_theme_changed(THEME_LANGUAGE); settings_apply_skins(); @@ -701,7 +700,7 @@ int ft_enter(struct tree_context* c) splash(0, ID2P(LANG_WAIT)); if (!load_kbd(buf)) 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; #if defined(HAVE_ROLO) diff --git a/apps/radio/presets.c b/apps/radio/presets.c index c7a5bae372..1a748e9f88 100644 --- a/apps/radio/presets.c +++ b/apps/radio/presets.c @@ -197,7 +197,7 @@ void radio_save_presets(void) close(fd); if (strcasestr(filepreset, FMPRESET_PATH)) - set_file(filepreset, global_settings.fmr_file, MAX_FILENAME); + set_file(filepreset, global_settings.fmr_file); presets_changed = false; } else @@ -240,7 +240,7 @@ void radio_load_presets(const char *filename) /* Preset inside the default folder? */ 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. */ fd = open_utf8(filepreset, O_RDONLY); diff --git a/apps/settings.c b/apps/settings.c index 6638efefba..04114a8f31 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -1284,8 +1284,9 @@ bool set_option(const char* string, const void* variable, enum optiontype type, * Takes filename, removes the directory and the extension, * 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* extptr; int len; @@ -1305,9 +1306,12 @@ void set_file(const char* filename, char* setting, const int maxlen) len = strlen(fptr) - extlen + 1; - /* error if filename isn't in ROCKBOX_DIR */ - if (len > maxlen) + /* error later if filename isn't in ROCKBOX_DIR */ + if (len > maxlen || !file_exists(filename)) + { + DEBUGF("%s Error %s\n", __func__, filename); return; + } strmemccpy(setting, fptr, len); settings_save(); diff --git a/apps/settings.h b/apps/settings.h index ed609612f3..2fc20221ea 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -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*), 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, const struct opt_items* options, int numoptions, void (*function)(int));