Jason Edmeades : cmd.exe: Add SET /P support.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 13 07:56:07 CDT 2007


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

Author: Jason Edmeades <us at edmeades.me.uk>
Date:   Tue Mar 13 00:11:04 2007 +0000

cmd.exe: Add SET /P support.

---

 programs/cmd/builtins.c |   35 +++++++++++++++++++++++++++++++++--
 1 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 8359152..02004ae 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -1278,11 +1278,42 @@ void WCMD_setshow_env (char *s) {
   char *p;
   int status;
 
-  if (strlen(param1) == 0) {
+  if (param1[0] == 0x00 && quals[0] == 0x00) {
     env = GetEnvironmentStrings ();
     WCMD_setshow_sortenv( env, NULL );
+    return;
   }
-  else {
+
+  /* See if /P supplied, and if so echo the prompt, and read in a reply */
+  if (CompareString (LOCALE_USER_DEFAULT,
+                     NORM_IGNORECASE | SORT_STRINGSORT,
+                     s, 2, "/P", -1) == 2) {
+    char string[MAXSTRING];
+    DWORD count;
+
+    s += 2;
+    while (*s && *s==' ') s++;
+
+    /* If no parameter, or no '=' sign, return an error */
+    if (!(*s) || ((p = strchr (s, '=')) == NULL )) {
+      WCMD_output ("Argument missing\n");
+      return;
+    }
+
+    /* Output the prompt */
+    *p++ = '\0';
+    if (strlen(p) != 0) WCMD_output(p);
+
+    /* Read the reply */
+    ReadFile (GetStdHandle(STD_INPUT_HANDLE), string, sizeof(string), &count, NULL);
+    if (count > 1) {
+      string[count-1] = '\0'; /* ReadFile output is not null-terminated! */
+      if (string[count-2] == '\r') string[count-2] = '\0'; /* Under Windoze we get CRLF! */
+      WINE_TRACE("set /p: Setting var '%s' to '%s'\n", s, string);
+      status = SetEnvironmentVariable (s, string);
+    }
+
+  } else {
     p = strchr (s, '=');
     if (p == NULL) {
       env = GetEnvironmentStrings ();




More information about the wine-cvs mailing list