summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/uicmd.cc13
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);
}