diff options
| -rw-r--r-- | apps/lang/english.lang | 14 | ||||
| -rw-r--r-- | apps/recorder/radio.c | 42 | ||||
| -rw-r--r-- | apps/settings.c | 3 |
3 files changed, 54 insertions, 5 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 1d1af2d..42a2fcb 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -8501,3 +8501,17 @@ *: "All tracks" </voice> </phrase> +<phrase> + id: LANG_INVALID_FILENAME + desc: "invalid filename entered" error message + user: + <source> + *: "Invalid Filename!" + </source> + <dest> + *: "Invalid Filename!" + </dest> + <voice> + *: "Invalid Filename" + </voice> +</phrase>
\ No newline at end of file diff --git a/apps/recorder/radio.c b/apps/recorder/radio.c index c1e5d9a..df3c689 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 2eeb6a9..5929da4 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)) |