Commit 63e11558 authored by Frédéric Delanoy's avatar Frédéric Delanoy Committed by Alexandre Julliard

cmd: Improve handle type recognition in WCMD_ReadFile.

parent e2fd09c2
...@@ -233,6 +233,11 @@ void WCMD_leave_paged_mode(void) ...@@ -233,6 +233,11 @@ void WCMD_leave_paged_mode(void)
pagedMessage = NULL; pagedMessage = NULL;
} }
static inline BOOL is_console_handle(HANDLE h)
{
return (((DWORD_PTR)h) & 3) == 3;
}
/*************************************************************************** /***************************************************************************
* WCMD_Readfile * WCMD_Readfile
* *
...@@ -240,30 +245,23 @@ void WCMD_leave_paged_mode(void) ...@@ -240,30 +245,23 @@ void WCMD_leave_paged_mode(void)
*/ */
BOOL WCMD_ReadFile(const HANDLE hIn, WCHAR *intoBuf, const DWORD maxChars, LPDWORD charsRead) BOOL WCMD_ReadFile(const HANDLE hIn, WCHAR *intoBuf, const DWORD maxChars, LPDWORD charsRead)
{ {
BOOL res; DWORD numRead;
char *buffer;
/* Try to read from console as Unicode */
res = ReadConsoleW(hIn, intoBuf, maxChars, charsRead, NULL);
/* If reading from console has failed we assume its file
i/o so read in and convert from OEM codepage */
if (!res) {
DWORD numRead; if (is_console_handle(hIn))
char *buffer; /* Try to read from console as Unicode */
return ReadConsoleW(hIn, intoBuf, maxChars, charsRead, NULL);
if (!(buffer = get_file_buffer())) /* We assume it's a file handle and read then convert from assumed OEM codepage */
return FALSE; if (!(buffer = get_file_buffer()))
return FALSE;
/* Read from file (assume OEM codepage) */ if (!ReadFile(hIn, buffer, maxChars, &numRead, NULL))
res = ReadFile(hIn, buffer, maxChars, &numRead, NULL); return FALSE;
/* Convert from OEM */ *charsRead = MultiByteToWideChar(GetConsoleCP(), 0, buffer, numRead, intoBuf, maxChars);
*charsRead = MultiByteToWideChar(GetConsoleCP(), 0, buffer, numRead,
intoBuf, maxChars);
} return TRUE;
return res;
} }
/******************************************************************* /*******************************************************************
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment