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);