diff options
Diffstat (limited to 'libmenu/menu_filesel.c')
-rw-r--r-- | libmenu/menu_filesel.c | 18 |
1 files changed, 14 insertions, 4 deletions
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; |