[1/3] cmd: Avoid reading char by char from console (try 2)
Frédéric Delanoy
frederic.delanoy at gmail.com
Tue Sep 27 18:01:51 CDT 2011
---
programs/cmd/batch.c | 16 ++++++++++++----
1 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/programs/cmd/batch.c b/programs/cmd/batch.c
index c5e73c6..2285caf 100644
--- a/programs/cmd/batch.c
+++ b/programs/cmd/batch.c
@@ -181,13 +181,21 @@ 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;
- BOOL status;
+WCHAR *WCMD_fgets (WCHAR *s, int noChars, HANDLE h)
+{
+ DWORD bytes, charsRead, dummy;
+ BOOL status, is_console_handle;
WCHAR *p;
p = s;
+ is_console_handle = !!GetConsoleMode(h, &dummy);
+ if (is_console_handle) {
+ status = ReadConsoleW(h, s, noChars, &charsRead, NULL);
+ if (!status) return NULL;
+ s[charsRead-2] = '\0'; /* Strip \r\n */
+ return p;
+ }
+ /* 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;
--
1.7.6.3
More information about the wine-patches
mailing list