diff -Naur main.orig/input/input.c main/input/input.c --- main.orig/input/input.c 2003-08-10 17:42:22.000000000 +0200 +++ main/input/input.c 2003-08-10 17:44:44.000000000 +0200 @@ -596,14 +596,15 @@ 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 -Naur main.orig/libmenu/menu_filesel.c main/libmenu/menu_filesel.c --- main.orig/libmenu/menu_filesel.c 2003-08-10 17:42:22.000000000 +0200 +++ main/libmenu/menu_filesel.c 2003-08-10 17:46:05.000000000 +0200 @@ -77,12 +77,22 @@ 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;