diff -Naur MPlayer-0.90.orig/input/input.c MPlayer-0.90/input/input.c
--- MPlayer-0.90.orig/input/input.c	2003-04-29 21:57:38.000000000 +0200
+++ MPlayer-0.90/input/input.c	2003-08-03 02:19:18.000000000 +0200
@@ -551,14 +551,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 MPlayer-0.90.orig/libmenu/menu_filesel.c MPlayer-0.90/libmenu/menu_filesel.c
--- MPlayer-0.90.orig/libmenu/menu_filesel.c	2003-04-29 21:57:38.000000000 +0200
+++ MPlayer-0.90/libmenu/menu_filesel.c	2003-08-03 02:17:27.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;
