diff options
author | Jorge Arellano Cid <jcid@dillo.org> | 2009-05-10 15:21:17 -0400 |
---|---|---|
committer | Jorge Arellano Cid <jcid@dillo.org> | 2009-05-10 15:21:17 -0400 |
commit | 4d42e72f4dd6d7472b67deb32bde17fd1a56f4e2 (patch) | |
tree | c792cac20aabaa8e7365c8f66dd8127114f6f49b | |
parent | 2023266c7206c3fb456fda012ae0a4c81b69a634 (diff) |
Replace %20 and ' ' with '_' in the suggested filename for saving
-rw-r--r-- | src/uicmd.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/uicmd.cc b/src/uicmd.cc index 38c883e0..f299db23 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -684,14 +684,23 @@ void a_UIcmd_redirection0(void *vbw, const DilloUrl *url) static char *UIcmd_make_save_filename(const char *pathstr) { size_t MaxLen = 64; - char *FileName, *name; + char *FileName, *name, *newname, *o, *n; const char *dir = a_UIcmd_get_save_dir(); if ((name = strrchr(pathstr, '/'))) { if (strlen(++name) > MaxLen) { name = name + strlen(name) - MaxLen; } - FileName = dStrconcat(dir ? dir : "", name, NULL); + /* Replace %20 and ' ' with '_' in Filename */ + o = n = newname = dStrdup(name); + for (int i = 0; o[i]; i++) { + *n++ = (o[i] == ' ') ? '_' : + (o[i] == '%' && o[i+1] == '2' && o[i+2] == '0') ? + i+=2, '_' : o[i]; + } + *n = 0; + FileName = dStrconcat(dir ? dir : "", newname, NULL); + dFree(newname); } else { FileName = dStrconcat(dir ? dir : "", pathstr, NULL); } |