diff options
-rw-r--r-- | input/input.c | 7 | ||||
-rw-r--r-- | libmenu/menu_filesel.c | 18 |
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; |