"Anatoly Lyutin" vostok@etersoft.ru wrote:
static void output(const char *message) {
- DWORD count;
- WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), message, strlen(message), &count, NULL);
- DWORD count = 0;
- WCHAR *mesW = NULL;
- char *mes = NULL;
- int wlen = 0;
- int len = 0;
There is no need to initialize variables to 0 since you are going to explicitly initialize them later anyway.
- wlen = MultiByteToWideChar( CP_ACP, 0, message, -1, NULL, 0 );
- mesW = HeapAlloc( GetProcessHeap(), 0, wlen * sizeof(WCHAR) );
- mes = HeapAlloc( GetProcessHeap(), 0, wlen * sizeof(char) );
Allocating wlen chars for 'mes' won't work correctly on a multibyte locale.
- MultiByteToWideChar( CP_ACP, 0, message, -1, mesW, wlen );
- len = WideCharToMultiByte( GetConsoleOutputCP(), 0, mesW, wlen, NULL, 0, NULL, NULL );
Just move the call to allocate 'len' bytes for 'mes' here.
- WideCharToMultiByte( GetConsoleOutputCP(), 0, mesW, wlen, mes, len, NULL, NULL );