From: Louis Lenders xerox.xerox2000x@gmail.com
--- programs/wmic/main.c | 79 ++++++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 35 deletions(-)
diff --git a/programs/wmic/main.c b/programs/wmic/main.c index da84bf04097..2259281677c 100644 --- a/programs/wmic/main.c +++ b/programs/wmic/main.c @@ -28,6 +28,7 @@ #include "initguid.h" #include "objidl.h" #include "wbemcli.h" +#include "shellapi.h" #include "wmic.h"
#include "wine/debug.h" @@ -334,47 +335,13 @@ done: return ret; }
-int __cdecl wmain(int argc, WCHAR *argv[]) +static int process_args( int argc, WCHAR *argv[] ) { const WCHAR *class, *value; int i; - WCHAR cmd[MAX_STRING];
setlocale( LC_ALL, "" );
- if (argc == 1) - { - STARTUPINFOW si = {0}; - PROCESS_INFORMATION pi = {0}; - - fputws( L"wbem:root\cli>", stdout ); - - while (fgetws(cmd, sizeof(cmd), stdin) != NULL) - { - WCHAR wmic[MAX_STRING] = L"wmic.exe "; - - cmd[wcslen(cmd)-1] = 0; /* remove trailing '\n' */ - - WINE_FIXME("command: %s\n", debugstr_w(cmd)); - if (!wcsicmp( strip_spaces(cmd), L"exit" ) || !wcsicmp( strip_spaces(cmd), L"quit" )) - return 0; - - if (!cmd[0]) - output_error( STRING_USAGE ); - else - { - CreateProcessW( 0, wcscat( wmic, cmd ), 0, 0, 0, 0, 0, 0, &si, &pi ); - WaitForSingleObject( pi.hProcess, INFINITE ); - CloseHandle( pi.hProcess ); - CloseHandle( pi.hThread ); - - output_newline(); - } - fputws( L"wbem:root\cli>", stdout ); - } - return 0; - } - for (i = 1; i < argc && argv[i][0] == '/'; i++) WINE_FIXME( "command line switch %s not supported\n", debugstr_w(argv[i]) );
@@ -426,3 +393,45 @@ not_supported: output_error( STRING_CMDLINE_NOT_SUPPORTED ); return 1; } + +int __cdecl wmain(int argc, WCHAR *argv[]) +{ + WCHAR cmd[MAX_STRING]; + int ret = 0; + + setlocale( LC_ALL, "" ); + + if (argc == 1) + { + fputws( L"wbem:root\cli>", stdout ); + + while (fgetws(cmd, sizeof(cmd), stdin) != NULL) + { + WCHAR wmic[MAX_STRING] = L"wmic.exe "; + + cmd[wcslen(cmd)-1] = 0; /* remove trailing '\n' */ + + WINE_TRACE("command: %s\n", debugstr_w(cmd)); + if (!wcsicmp( strip_spaces(cmd), L"exit" ) || !wcsicmp( strip_spaces(cmd), L"quit" )) + return 0; + + if (!cmd[0]) + output_error( STRING_USAGE ); + else + { + int _argc; + WCHAR **_argv; + + _argv = CommandLineToArgvW( wcscat( wmic, cmd ), &_argc ); + ret = process_args( _argc, _argv ); + LocalFree(argv); + + output_newline(); + } + fputws( L"wbem:root\cli>", stdout ); + } + return ret; + } + + return process_args( argc, argv ); +}