mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-06 05:40:59 +00:00
wmic: Fix output when redirected to pipe.
This commit is contained in:
parent
846d164092
commit
707d299da6
|
@ -19,6 +19,8 @@
|
||||||
|
|
||||||
#define COBJMACROS
|
#define COBJMACROS
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <io.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
@ -63,29 +65,25 @@ static const WCHAR *find_class( const WCHAR *alias )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int WINAPIV output_string( HANDLE handle, const WCHAR *msg, ... )
|
static int WINAPIV output_string( const WCHAR *msg, ... )
|
||||||
{
|
{
|
||||||
static const WCHAR bomW[] = {0xfeff};
|
int count, bom_count = 0;
|
||||||
static BOOL bom;
|
static BOOL bom;
|
||||||
va_list va_args;
|
va_list va_args;
|
||||||
int len;
|
|
||||||
DWORD count, bom_count = 0;
|
|
||||||
WCHAR buffer[8192];
|
|
||||||
|
|
||||||
va_start( va_args, msg );
|
|
||||||
len = vswprintf( buffer, ARRAY_SIZE(buffer), msg, va_args );
|
|
||||||
va_end( va_args );
|
|
||||||
|
|
||||||
if (!WriteConsoleW( handle, buffer, len, &count, NULL ))
|
|
||||||
{
|
|
||||||
if (!bom)
|
if (!bom)
|
||||||
{
|
{
|
||||||
WriteFile( handle, bomW, sizeof(bomW), &bom_count, FALSE );
|
if (GetFileType((HANDLE)_get_osfhandle( STDOUT_FILENO )) == FILE_TYPE_DISK)
|
||||||
|
{
|
||||||
|
_setmode( STDOUT_FILENO, _O_U16TEXT );
|
||||||
|
bom_count = wprintf( L"\xfeff" );
|
||||||
|
}
|
||||||
bom = TRUE;
|
bom = TRUE;
|
||||||
}
|
}
|
||||||
WriteFile( handle, buffer, len * sizeof(WCHAR), &count, FALSE );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
va_start( va_args, msg );
|
||||||
|
count = vwprintf( msg, va_args );
|
||||||
|
va_end( va_args );
|
||||||
return count + bom_count;
|
return count + bom_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,12 +97,12 @@ static int output_error( int msg )
|
||||||
|
|
||||||
static int output_text( const WCHAR *str, ULONG column_width )
|
static int output_text( const WCHAR *str, ULONG column_width )
|
||||||
{
|
{
|
||||||
return output_string( GetStdHandle(STD_OUTPUT_HANDLE), L"%-*s", column_width, str );
|
return output_string( L"%-*s", column_width, str );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int output_newline( void )
|
static int output_newline( void )
|
||||||
{
|
{
|
||||||
return output_string( GetStdHandle(STD_OUTPUT_HANDLE), L"\r\n" );
|
return output_string( L"\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
static WCHAR * strip_spaces(WCHAR *start)
|
static WCHAR * strip_spaces(WCHAR *start)
|
||||||
|
|
Loading…
Reference in a new issue