=?UTF-8?Q?Fr=C3=A9d=C3=A9ric=20Delanoy=20?=: cmd: Avoid reading char by char from console.

Alexandre Julliard julliard at winehq.org
Wed Sep 28 14:45:46 CDT 2011


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

Author: Frédéric Delanoy <frederic.delanoy at gmail.com>
Date:   Wed Sep 28 14:41:20 2011 +0200

cmd: Avoid reading char by char from console.

---

 programs/cmd/batch.c |   16 +++++++++++++---
 1 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/programs/cmd/batch.c b/programs/cmd/batch.c
index c5e73c6..5007db3 100644
--- a/programs/cmd/batch.c
+++ b/programs/cmd/batch.c
@@ -181,13 +181,23 @@ WCHAR *WCMD_parameter (WCHAR *s, int n, WCHAR **where, WCHAR **end) {
  * the LF (or CRLF) from the line.
  */
 
-WCHAR *WCMD_fgets (WCHAR *s, int noChars, HANDLE h) {
-
-  DWORD bytes;
+WCHAR *WCMD_fgets (WCHAR *s, int noChars, HANDLE h)
+{
+  DWORD bytes, charsRead;
   BOOL status;
   WCHAR *p;
 
   p = s;
+  if ((status = ReadConsoleW(h, s, noChars, &charsRead, NULL))) {
+    s[charsRead-2] = '\0'; /* Strip \r\n */
+    return p;
+  }
+
+  /* Continue only if we have no console (i.e. a file) handle */
+  if (GetLastError() != ERROR_INVALID_HANDLE)
+    return NULL;
+
+  /* TODO: More intelligent buffering for reading lines from files */
   do {
     status = WCMD_ReadFile (h, s, 1, &bytes, NULL);
     if ((status == 0) || ((bytes == 0) && (s == p))) return NULL;




More information about the wine-cvs mailing list