cmd: Use helper function to return file io buffer.
This commit is contained in:
parent
7fae5f4f9f
commit
e5565a6d64
|
@ -102,6 +102,19 @@ static char *output_bufA = NULL;
|
||||||
#define MAX_WRITECONSOLE_SIZE 65535
|
#define MAX_WRITECONSOLE_SIZE 65535
|
||||||
static BOOL unicodePipes = FALSE;
|
static BOOL unicodePipes = FALSE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns a buffer for reading from/writing to file
|
||||||
|
* Never freed
|
||||||
|
*/
|
||||||
|
static char *get_file_buffer(void)
|
||||||
|
{
|
||||||
|
if (!output_bufA) {
|
||||||
|
output_bufA = HeapAlloc(GetProcessHeap(), 0, MAX_WRITECONSOLE_SIZE);
|
||||||
|
if (!output_bufA)
|
||||||
|
WINE_FIXME("Out of memory - could not allocate ansi 64K buffer\n");
|
||||||
|
}
|
||||||
|
return output_bufA;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* WCMD_output_asis_len - send output to current standard output
|
* WCMD_output_asis_len - send output to current standard output
|
||||||
|
@ -126,23 +139,18 @@ static void WCMD_output_asis_len(const WCHAR *message, int len, HANDLE device) {
|
||||||
if (!res) {
|
if (!res) {
|
||||||
BOOL usedDefaultChar = FALSE;
|
BOOL usedDefaultChar = FALSE;
|
||||||
DWORD convertedChars;
|
DWORD convertedChars;
|
||||||
|
char *buffer;
|
||||||
|
|
||||||
if (!unicodePipes) {
|
if (!unicodePipes) {
|
||||||
/*
|
|
||||||
* Allocate buffer to use when writing to file. (Not freed, as one off)
|
if (!(buffer = get_file_buffer()))
|
||||||
*/
|
return;
|
||||||
if (!output_bufA) output_bufA = HeapAlloc(GetProcessHeap(), 0,
|
|
||||||
MAX_WRITECONSOLE_SIZE);
|
|
||||||
if (!output_bufA) {
|
|
||||||
WINE_FIXME("Out of memory - could not allocate ansi 64K buffer\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert to OEM, then output */
|
/* Convert to OEM, then output */
|
||||||
convertedChars = WideCharToMultiByte(GetConsoleOutputCP(), 0, message,
|
convertedChars = WideCharToMultiByte(GetConsoleOutputCP(), 0, message,
|
||||||
len, output_bufA, MAX_WRITECONSOLE_SIZE,
|
len, buffer, MAX_WRITECONSOLE_SIZE,
|
||||||
"?", &usedDefaultChar);
|
"?", &usedDefaultChar);
|
||||||
WriteFile(device, output_bufA, convertedChars,
|
WriteFile(device, buffer, convertedChars,
|
||||||
&nOut, FALSE);
|
&nOut, FALSE);
|
||||||
} else {
|
} else {
|
||||||
WriteFile(device, message, len*sizeof(WCHAR),
|
WriteFile(device, message, len*sizeof(WCHAR),
|
||||||
|
@ -223,21 +231,16 @@ BOOL WCMD_ReadFile(const HANDLE hIn, WCHAR *intoBuf, const DWORD maxChars,
|
||||||
if (!res) {
|
if (!res) {
|
||||||
|
|
||||||
DWORD numRead;
|
DWORD numRead;
|
||||||
/*
|
char *buffer;
|
||||||
* Allocate buffer to use when reading from file. Not freed
|
|
||||||
*/
|
if (!(buffer = get_file_buffer()))
|
||||||
if (!output_bufA) output_bufA = HeapAlloc(GetProcessHeap(), 0,
|
return FALSE;
|
||||||
MAX_WRITECONSOLE_SIZE);
|
|
||||||
if (!output_bufA) {
|
|
||||||
WINE_FIXME("Out of memory - could not allocate ansi 64K buffer\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read from file (assume OEM codepage) */
|
/* Read from file (assume OEM codepage) */
|
||||||
res = ReadFile(hIn, output_bufA, maxChars, &numRead, unused);
|
res = ReadFile(hIn, buffer, maxChars, &numRead, unused);
|
||||||
|
|
||||||
/* Convert from OEM */
|
/* Convert from OEM */
|
||||||
*charsRead = MultiByteToWideChar(GetConsoleCP(), 0, output_bufA, numRead,
|
*charsRead = MultiByteToWideChar(GetConsoleCP(), 0, buffer, numRead,
|
||||||
intoBuf, maxChars);
|
intoBuf, maxChars);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue