summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--input/input.c7
-rw-r--r--libmenu/menu_filesel.c18
2 files changed, 18 insertions, 7 deletions
diff --git a/input/input.c b/input/input.c
index 932d1a13f6..c0cf9bc8bd 100644
--- a/input/input.c
+++ b/input/input.c
@@ -601,14 +601,15 @@ mp_input_parse_cmd(char* str) {
break;
} else if(!e) e = ptr+strlen(ptr);
l = e-start;
- cmd->args[i].v.s = (char*)malloc((l+1)*sizeof(char));
- strncpy(cmd->args[i].v.s,start,l);
- cmd->args[i].v.s[l] = '\0';
ptr2 = start;
for(e = strchr(ptr2,'\\') ; e ; e = strchr(ptr2,'\\')) {
memmove(e,e+1,strlen(e));
ptr2 = e + 1;
+ l--;
}
+ cmd->args[i].v.s = (char*)malloc((l+1)*sizeof(char));
+ strncpy(cmd->args[i].v.s,start,l);
+ cmd->args[i].v.s[l] = '\0';
} break;
case -1:
ptr = NULL;
diff --git a/libmenu/menu_filesel.c b/libmenu/menu_filesel.c
index e7835773b6..4dd2d69e8b 100644
--- a/libmenu/menu_filesel.c
+++ b/libmenu/menu_filesel.c
@@ -77,12 +77,22 @@ static char* replace_path(char* title , char* dir) {
int dl = strlen(dir);
int t1l = p-title;
int l = tl - 2 + dl;
- char*r = malloc(l + 1);
+ char *r, *n, *d = dir;
+ char term = *(p-1);
+
+ do {
+ if (*d == '\\' || *d == term)
+ l++;
+ } while (*d++);
+ r = malloc(l + 1);
+ n = r + t1l;
memcpy(r,title,t1l);
- memcpy(r+t1l,dir,dl);
+ do {
+ if (*dir == '\\' || *dir == term)
+ *n++ = '\\';
+ } while ((*n++ = *dir++));
if(tl - t1l - 2 > 0)
- memcpy(r+t1l+dl,p+2,tl - t1l - 2);
- r[l] = '\0';
+ strcpy(n-1,p+2);
return r;
} else
return title;