Module: wine Branch: master Commit: 5c8c694e5e7bb0ea1a6de5e74f20cd208759c7a5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5c8c694e5e7bb0ea1a6de5e74f...
Author: Jason Edmeades us@edmeades.me.uk Date: Thu Mar 8 00:43:09 2007 +0000
cmd.exe: Wildcards in directory names for CD.
---
programs/cmd/builtins.c | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-)
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 @@ void WCMD_setshow_default (char *command) { 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 @@ void WCMD_setshow_default (char *command) { } *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);