cmd: Avoid reading char by char from console.

This commit is contained in:
Frédéric Delanoy 2011-09-28 14:41:20 +02:00 committed by Alexandre Julliard
parent b4430319f1
commit a7e1c22a48
1 changed files with 13 additions and 3 deletions

View File

@ -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;