diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 1d1af2d5e7..42a2fcbdce 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -8501,3 +8501,17 @@ *: "All tracks" + + id: LANG_INVALID_FILENAME + desc: "invalid filename entered" error message + user: + + *: "Invalid Filename!" + + + *: "Invalid Filename!" + + + *: "Invalid Filename" + + \ No newline at end of file diff --git a/apps/recorder/radio.c b/apps/recorder/radio.c index c1e5d9a8d2..df3c689c13 100644 --- a/apps/recorder/radio.c +++ b/apps/recorder/radio.c @@ -1223,13 +1223,47 @@ bool save_preset_list(void) { if(num_presets != 0) { + bool bad_file_name = true; + if(!opendir(FMPRESET_PATH)) /* Check if there is preset folder */ mkdir(FMPRESET_PATH, 0); - create_numbered_filename(filepreset, FMPRESET_PATH, "preset", ".fmr", 2); - - if (!kbd_input(filepreset, sizeof(filepreset))) - radio_save_presets(); + create_numbered_filename(filepreset,FMPRESET_PATH,"preset",".fmr",2); + + while(bad_file_name) + { + if(!kbd_input(filepreset, sizeof(filepreset))) + { + /* check the name: max MAX_FILENAME (20) chars */ + char* p2; + char* p1; + int len; + p1 = strrchr(filepreset, '/'); + p2 = p1; + while((p1) && (*p2) && (*p2 != '.')) + p2++; + len = (int)(p2-p1) - 1; + if((!p1) || (len > MAX_FILENAME) || (len == 0)) + { + /* no slash, too long or too short */ + gui_syncsplash(HZ,true,str(LANG_INVALID_FILENAME)); + } + else + { + /* add correct extension (easier to always write) + at this point, p2 points to 0 or the extension dot */ + *p2 = '\0'; + strcat(filepreset,".fmr"); + bad_file_name = false; + radio_save_presets(); + } + } + else + { + /* user aborted */ + return false; + } + } } else gui_syncsplash(HZ,true,str(LANG_FM_NO_PRESETS)); diff --git a/apps/settings.c b/apps/settings.c index 2eeb6a937e..5929da4439 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -1316,10 +1316,11 @@ void set_file(char* filename, char* setting, int maxlen) len = strlen(fptr); ptr = fptr + len; - while (*ptr != '.') { + while ((*ptr != '.') && (ptr != fptr)) { extlen++; ptr--; } + if(ptr == fptr) extlen = 0; if (strncasecmp(ROCKBOX_DIR, filename ,strlen(ROCKBOX_DIR)) || (len-extlen > maxlen))