[1/4] cmd: Use ReadConsoleW directly for console reads

Frédéric Delanoy frederic.delanoy at gmail.com
Mon Sep 26 17:42:40 CDT 2011


Previous WCMD_ReadFile calls were simply redirecting directly with unchanged params to ReadConsoleW
---
 programs/cmd/builtins.c |   33 ++++++++++++++++++---------------
 programs/cmd/wcmdmain.c |    4 ++--
 2 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 33437d1..e1f6447 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -115,8 +115,8 @@ static BOOL WCMD_ask_confirm (const WCHAR *message, BOOL showSureText,
           WCMD_output_asis (Abuffer);
       }
       WCMD_output_asis (endBkt);
-      WCMD_ReadFile (GetStdHandle(STD_INPUT_HANDLE), answer,
-                     sizeof(answer)/sizeof(WCHAR), &count, NULL);
+      ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), answer,
+                   sizeof(answer)/sizeof(WCHAR), &count, NULL);
       answer[0] = toupperW(answer[0]);
     }
 
@@ -306,7 +306,10 @@ void WCMD_choice (const WCHAR * command) {
     while (TRUE) {
 
         /* FIXME: Add support for option /T */
-        WCMD_ReadFile(GetStdHandle(STD_INPUT_HANDLE), answer, 1, &count, NULL);
+        if (have_console)
+            ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), answer, 1, &count, NULL);
+        else
+            WCMD_ReadFile(GetStdHandle(STD_INPUT_HANDLE), answer, 1, &count, NULL);
 
         if (!opt_s)
             answer[0] = toupperW(answer[0]);
@@ -1697,8 +1700,8 @@ void WCMD_pause (void) {
   WCHAR string[32];
 
   WCMD_output (anykey);
-  WCMD_ReadFile (GetStdHandle(STD_INPUT_HANDLE), string,
-                 sizeof(string)/sizeof(WCHAR), &count, NULL);
+  ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), string,
+               sizeof(string)/sizeof(WCHAR), &count, NULL);
 }
 
 /****************************************************************************
@@ -2146,8 +2149,8 @@ void WCMD_setshow_date (void) {
       WCMD_output (WCMD_LoadMessage(WCMD_CURRENTDATE), curdate);
       if (strstrW (quals, parmT) == NULL) {
         WCMD_output (WCMD_LoadMessage(WCMD_NEWDATE));
-        WCMD_ReadFile (GetStdHandle(STD_INPUT_HANDLE),
-                       buffer, sizeof(buffer)/sizeof(WCHAR), &count, NULL);
+        ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE),
+                     buffer, sizeof(buffer)/sizeof(WCHAR), &count, NULL);
         if (count > 2) {
           WCMD_output (WCMD_LoadMessage(WCMD_NYI));
         }
@@ -2265,8 +2268,8 @@ void WCMD_setshow_env (WCHAR *s) {
     if (strlenW(p) != 0) WCMD_output(p);
 
     /* Read the reply */
-    WCMD_ReadFile (GetStdHandle(STD_INPUT_HANDLE), string,
-                   sizeof(string)/sizeof(WCHAR), &count, NULL);
+    ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), string,
+                 sizeof(string)/sizeof(WCHAR), &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! */
@@ -2376,8 +2379,8 @@ void WCMD_setshow_time (void) {
       WCMD_output (WCMD_LoadMessage(WCMD_CURRENTTIME), curtime);
       if (strstrW (quals, parmT) == NULL) {
         WCMD_output (WCMD_LoadMessage(WCMD_NEWTIME));
-        WCMD_ReadFile (GetStdHandle(STD_INPUT_HANDLE), buffer,
-                       sizeof(buffer)/sizeof(WCHAR), &count, NULL);
+        ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), buffer,
+                     sizeof(buffer)/sizeof(WCHAR), &count, NULL);
         if (count > 2) {
           WCMD_output (WCMD_LoadMessage(WCMD_NYI));
         }
@@ -2559,8 +2562,8 @@ void WCMD_more (WCHAR *command) {
         wsprintfW(moreStrPage, moreFmt2, moreStr, 100);
         WCMD_leave_paged_mode();
         WCMD_output_asis(moreStrPage);
-        WCMD_ReadFile (GetStdHandle(STD_INPUT_HANDLE), buffer,
-                       sizeof(buffer)/sizeof(WCHAR), &count, NULL);
+        ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), buffer,
+                     sizeof(buffer)/sizeof(WCHAR), &count, NULL);
         WCMD_enter_paged_mode(moreStrPage);
       }
 
@@ -2683,8 +2686,8 @@ int WCMD_volume(BOOL set_label, const WCHAR *path)
     	curdir[0], label, HIWORD(serial), LOWORD(serial));
   if (set_label) {
     WCMD_output (WCMD_LoadMessage(WCMD_VOLUMEPROMPT));
-    WCMD_ReadFile (GetStdHandle(STD_INPUT_HANDLE), string,
-                   sizeof(string)/sizeof(WCHAR), &count, NULL);
+    ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), string,
+                 sizeof(string)/sizeof(WCHAR), &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! */
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 8e222a3..b1d67bc 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -293,8 +293,8 @@ static void WCMD_output_asis_handle (DWORD std_handle, const WCHAR *message) {
         if (++line_count >= max_height - 1) {
           line_count = 0;
           WCMD_output_asis_len(pagedMessage, strlenW(pagedMessage), handle);
-          WCMD_ReadFile (GetStdHandle(STD_INPUT_HANDLE), string,
-                         sizeof(string)/sizeof(WCHAR), &count, NULL);
+          ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), string,
+                       sizeof(string)/sizeof(WCHAR), &count, NULL);
         }
       }
     } while (((message = ptr) != NULL) && (*ptr));
-- 
1.7.6.3




More information about the wine-patches mailing list