cmd.exe: Wildcards in directory names for CD.
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 665e13d..8186695 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -1051,6 +1051,8 @@
   BOOL status;
   char string[1024];
   char *pos;
+  WIN32_FIND_DATA fd;
+  HANDLE hff;
 
   WINE_TRACE("Request change to directory '%s'\n", command);
   if (strlen(command) == 0) {
@@ -1068,6 +1070,37 @@
     }
     *pos = 0x00;
 
+    /* Search for approprate directory */
+    WINE_TRACE("Looking for directory '%s'\n", string);
+    hff = FindFirstFile (string, &fd);
+    while (hff != INVALID_HANDLE_VALUE) {
+      if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+        char fpath[MAX_PATH];
+        char drive[10];
+        char dir[MAX_PATH];
+        char fname[MAX_PATH];
+        char ext[MAX_PATH];
+
+        /* Convert path into actual directory spec */
+        GetFullPathName (string, sizeof(fpath), fpath, NULL);
+        WCMD_splitpath(fpath, drive, dir, fname, ext);
+
+        /* Rebuild path */
+        sprintf(string, "%s%s%s", drive, dir, fd.cFileName);
+
+        FindClose(hff);
+        hff = INVALID_HANDLE_VALUE;
+        break;
+      }
+
+      /* Step on to next match */
+      if (FindNextFile(hff, &fd) == 0) {
+        FindClose(hff);
+        hff = INVALID_HANDLE_VALUE;
+        break;
+      }
+    }
+
     /* Change to that directory */
     WINE_TRACE("Really changing to directory '%s'\n", string);
     status = SetCurrentDirectory (string);