summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/lang/english.lang14
-rw-r--r--apps/recorder/radio.c42
-rw-r--r--apps/settings.c3
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))