Hans Leidekker : wmic: Pad output with spaces.
Alexandre Julliard
julliard at winehq.org
Mon Oct 8 15:44:07 CDT 2018
Module: wine
Branch: master
Commit: c0f00105b5c148cba07d6f00e557a08cabbf82e0
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c0f00105b5c148cba07d6f00e557a08cabbf82e0
Author: Hans Leidekker <hans at codeweavers.com>
Date: Mon Oct 8 15:53:12 2018 +0200
wmic: Pad output with spaces.
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
programs/wmic/main.c | 49 ++++++++++++++++++++++++++++++++-----------------
1 file changed, 32 insertions(+), 17 deletions(-)
diff --git a/programs/wmic/main.c b/programs/wmic/main.c
index 85b76de..5d50045 100644
--- a/programs/wmic/main.c
+++ b/programs/wmic/main.c
@@ -147,14 +147,14 @@ static int output_error( int msg )
return output_string( GetStdHandle(STD_ERROR_HANDLE), fmtW, buffer );
}
-static int output_header( const WCHAR *prop )
+static int output_header( const WCHAR *prop, ULONG column_width )
{
- static const WCHAR bomW[] = {0xfeff}, fmtW[] = {'%','s','\r','\n',0};
+ static const WCHAR bomW[] = {0xfeff}, fmtW[] = {'%','-','*','s','\r','\n',0};
int len;
DWORD count;
WCHAR buffer[8192];
- len = snprintfW( buffer, ARRAY_SIZE(buffer), fmtW, prop );
+ len = snprintfW( buffer, ARRAY_SIZE(buffer), fmtW, column_width, prop );
if (!WriteConsoleW( GetStdHandle(STD_OUTPUT_HANDLE), buffer, len, &count, NULL )) /* redirected */
{
@@ -166,10 +166,10 @@ static int output_header( const WCHAR *prop )
return count;
}
-static int output_line( const WCHAR *str )
+static int output_line( const WCHAR *str, ULONG column_width )
{
- static const WCHAR fmtW[] = {'%','s','\r','\n',0};
- return output_string( GetStdHandle(STD_OUTPUT_HANDLE), fmtW, str );
+ static const WCHAR fmtW[] = {'%','-','*','s','\r','\n',0};
+ return output_string( GetStdHandle(STD_OUTPUT_HANDLE), fmtW, column_width, str );
}
static int query_prop( const WCHAR *class, const WCHAR *propname )
@@ -186,6 +186,9 @@ static int query_prop( const WCHAR *class, const WCHAR *propname )
WCHAR *prop = NULL;
BOOL first = TRUE;
int len, ret = -1;
+ IWbemClassObject *obj;
+ ULONG count, width = 0;
+ VARIANT v;
WINE_TRACE("%s, %s\n", debugstr_w(class), debugstr_w(propname));
@@ -210,29 +213,41 @@ static int query_prop( const WCHAR *class, const WCHAR *propname )
hr = IWbemServices_ExecQuery( services, wql, query, flags, NULL, &result );
if (hr != S_OK) goto done;
- for (;;)
+ for (;;) /* get column width */
{
- IWbemClassObject *obj;
- ULONG count;
- VARIANT v;
+ IEnumWbemClassObject_Next( result, WBEM_INFINITE, 1, &obj, &count );
+ if (!count) break;
+ if (!prop && !(prop = find_prop( obj, propname )))
+ {
+ output_error( STRING_INVALID_QUERY );
+ goto done;
+ }
+ if (IWbemClassObject_Get( obj, prop, 0, &v, NULL, NULL ) == WBEM_S_NO_ERROR)
+ {
+ VariantChangeType( &v, &v, 0, VT_BSTR );
+ width = max( strlenW( V_BSTR( &v ) ), width );
+ VariantClear( &v );
+ }
+ IWbemClassObject_Release( obj );
+ }
+ width += 2;
+
+ IEnumWbemClassObject_Reset( result );
+ for (;;)
+ {
IEnumWbemClassObject_Next( result, WBEM_INFINITE, 1, &obj, &count );
if (!count) break;
if (first)
{
- if (!(prop = find_prop( obj, propname )))
- {
- output_error( STRING_INVALID_QUERY );
- goto done;
- }
- output_header( prop );
+ output_header( prop, width );
first = FALSE;
}
if (IWbemClassObject_Get( obj, prop, 0, &v, NULL, NULL ) == WBEM_S_NO_ERROR)
{
VariantChangeType( &v, &v, 0, VT_BSTR );
- output_line( V_BSTR( &v ) );
+ output_line( V_BSTR( &v ), width );
VariantClear( &v );
}
IWbemClassObject_Release( obj );
More information about the wine-cvs
mailing list