Francois Gouget : cmd: Fix asking for a Yes / No / All confirmation.

Alexandre Julliard julliard at winehq.org
Mon Jan 23 13:01:15 CST 2012


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

Author: Francois Gouget <fgouget at free.fr>
Date:   Mon Jan 23 17:37:18 2012 +0100

cmd: Fix asking for a Yes / No / All confirmation.

---

 programs/cmd/builtins.c |   24 +++++++++++++++---------
 1 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 272bac0..ca486b4 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -108,8 +108,7 @@ static BOOL verify_mode = FALSE;
 /**************************************************************************
  * WCMD_ask_confirm
  *
- * Issue a message and ask 'Are you sure (Y/N)', waiting on a valid
- * answer.
+ * Issue a message and ask for confirmation, waiting on a valid answer.
  *
  * Returns True if Y (or A) answer is selected
  *         If optionAll contains a pointer, ALL is allowed, and if answered
@@ -117,7 +116,7 @@ static BOOL verify_mode = FALSE;
  *
  */
 static BOOL WCMD_ask_confirm (const WCHAR *message, BOOL showSureText,
-                              const BOOL *optionAll) {
+                              BOOL *optionAll) {
 
     WCHAR  msgbuffer[MAXSTRING];
     WCHAR  Ybuffer[MAXSTRING];
@@ -132,8 +131,10 @@ static BOOL WCMD_ask_confirm (const WCHAR *message, BOOL showSureText,
     LoadStringW(hinst, WCMD_NO,  Nbuffer, sizeof(Nbuffer)/sizeof(WCHAR));
     LoadStringW(hinst, WCMD_ALL, Abuffer, sizeof(Abuffer)/sizeof(WCHAR));
 
-    /* Loop waiting on a Y or N */
-    while (answer[0] != Ybuffer[0] && answer[0] != Nbuffer[0]) {
+    /* Loop waiting on a valid answer */
+    if (optionAll)
+        *optionAll = FALSE;
+    while (1) {
       static const WCHAR startBkt[] = {' ','(','\0'};
       static const WCHAR endBkt[]   = {')','?','\0'};
 
@@ -152,11 +153,16 @@ static BOOL WCMD_ask_confirm (const WCHAR *message, BOOL showSureText,
       WCMD_output_asis (endBkt);
       WCMD_ReadFile(GetStdHandle(STD_INPUT_HANDLE), answer, sizeof(answer)/sizeof(WCHAR), &count);
       answer[0] = toupperW(answer[0]);
+      if (answer[0] == Ybuffer[0])
+        return TRUE;
+      if (answer[0] == Nbuffer[0])
+        return FALSE;
+      if (optionAll && answer[0] == Abuffer[0])
+      {
+        *optionAll = TRUE;
+        return TRUE;
+      }
     }
-
-    /* Return the answer */
-    return ((answer[0] == Ybuffer[0]) ||
-            (optionAll && (answer[0] == Abuffer[0])));
 }
 
 /****************************************************************************




More information about the wine-cvs mailing list