From 98f546ed82604a940b2fe915f48056a9b336f675 Mon Sep 17 00:00:00 2001 From: Robert Wilhelm Date: Wed, 17 Aug 2022 09:30:47 +0200 Subject: [PATCH] wshom: Support default style argument in IWshShell3::Run. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53565 --- dlls/wshom.ocx/shell.c | 29 +++++++++++++++-------------- dlls/wshom.ocx/tests/wshom.c | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/dlls/wshom.ocx/shell.c b/dlls/wshom.ocx/shell.c index 034f6583d54..845f931be70 100644 --- a/dlls/wshom.ocx/shell.c +++ b/dlls/wshom.ocx/shell.c @@ -1332,9 +1332,9 @@ static WCHAR *split_command( BSTR cmd, WCHAR **params ) static HRESULT WINAPI WshShell3_Run(IWshShell3 *iface, BSTR cmd, VARIANT *style, VARIANT *wait, int *exit_code) { SHELLEXECUTEINFOW info; - int waitforprocess; + int waitforprocess, show; WCHAR *file, *params; - VARIANT s; + VARIANT v; HRESULT hr; BOOL ret; @@ -1343,25 +1343,26 @@ static HRESULT WINAPI WshShell3_Run(IWshShell3 *iface, BSTR cmd, VARIANT *style, if (!style || !wait || !exit_code) return E_POINTER; - VariantInit(&s); - hr = VariantChangeType(&s, style, 0, VT_I4); - if (FAILED(hr)) - { - ERR("failed to convert style argument, %#lx\n", hr); - return hr; + if (is_optional_argument(style)) + show = SW_SHOWNORMAL; + else { + VariantInit(&v); + hr = VariantChangeType(&v, style, 0, VT_I4); + if (FAILED(hr)) + return hr; + + show = V_I4(&v); } if (is_optional_argument(wait)) waitforprocess = 0; else { - VARIANT w; - - VariantInit(&w); - hr = VariantChangeType(&w, wait, 0, VT_I4); + VariantInit(&v); + hr = VariantChangeType(&v, wait, 0, VT_I4); if (FAILED(hr)) return hr; - waitforprocess = V_I4(&w); + waitforprocess = V_I4(&v); } if (!(file = split_command(cmd, ¶ms))) return E_OUTOFMEMORY; @@ -1371,7 +1372,7 @@ static HRESULT WINAPI WshShell3_Run(IWshShell3 *iface, BSTR cmd, VARIANT *style, info.fMask = waitforprocess ? SEE_MASK_NOASYNC | SEE_MASK_NOCLOSEPROCESS : SEE_MASK_DEFAULT; info.lpFile = file; info.lpParameters = params; - info.nShow = V_I4(&s); + info.nShow = show; ret = ShellExecuteExW(&info); free(file); diff --git a/dlls/wshom.ocx/tests/wshom.c b/dlls/wshom.ocx/tests/wshom.c index fc27373f296..34a02a8d1f9 100644 --- a/dlls/wshom.ocx/tests/wshom.c +++ b/dlls/wshom.ocx/tests/wshom.c @@ -251,7 +251,7 @@ static void test_wshshell(void) retval = 0xdeadbeef; str = SysAllocString(L"cmd.exe /c rd /s /q c:\\nosuchdir"); hr = IWshShell3_Run(sh3, str, &arg, &arg2, &retval); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); todo_wine ok(retval == ERROR_FILE_NOT_FOUND, "Unexpected retval %d.\n", retval); SysFreeString(str);