Jason Edmeades : cmd.exe: Wildcards in directory names for CD.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 8 07:17:06 CST 2007


Module: wine
Branch: master
Commit: 5c8c694e5e7bb0ea1a6de5e74f20cd208759c7a5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5c8c694e5e7bb0ea1a6de5e74f20cd208759c7a5

Author: Jason Edmeades <us at 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);




More information about the wine-cvs mailing list