From 1ed6bc2e025fb9de4d2f7f19f8573f310ec529af Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Thu, 2 May 2013 12:03:23 +0200 Subject: [PATCH] msi: Properly map script function return values to MSI errors. --- dlls/msi/script.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/dlls/msi/script.c b/dlls/msi/script.c index 8d48a9411ae..0fec7163342 100644 --- a/dlls/msi/script.c +++ b/dlls/msi/script.c @@ -273,6 +273,20 @@ static HRESULT create_activescriptsite(MsiActiveScriptSite **obj) return S_OK; } +static UINT map_return_value(LONG val) +{ + switch (val) + { + case 0: + case IDOK: + case IDIGNORE: return ERROR_SUCCESS; + case IDCANCEL: return ERROR_INSTALL_USEREXIT; + case IDRETRY: return ERROR_INSTALL_SUSPEND; + case IDABORT: + default: return ERROR_INSTALL_FAILURE; + } +} + /* * Call a script. */ @@ -354,13 +368,10 @@ DWORD call_script(MSIHANDLE hPackage, INT type, LPCWSTR script, LPCWSTR function hr = IDispatch_Invoke(pDispatch, dispid, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dispparamsNoArgs, &var, NULL, NULL); if (FAILED(hr)) goto done; - /* Check return value, if it's not IDOK we failed */ hr = VariantChangeType(&var, &var, 0, VT_I4); if (FAILED(hr)) goto done; - if (V_I4(&var) == IDOK) - ret = ERROR_SUCCESS; - else ret = ERROR_INSTALL_FAILURE; + ret = map_return_value(V_I4(&var)); VariantClear(&var); } else { -- 2.11.4.GIT