Module: wine Branch: master Commit: 1ed6bc2e025fb9de4d2f7f19f8573f310ec529af URL: http://source.winehq.org/git/wine.git/?a=commit;h=1ed6bc2e025fb9de4d2f7f19f8...
Author: Hans Leidekker hans@codeweavers.com Date: Thu May 2 12:03:23 2013 +0200
msi: Properly map script function return values to MSI errors.
---
dlls/msi/script.c | 19 +++++++++++++++---- 1 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/msi/script.c b/dlls/msi/script.c index 8d48a94..0fec716 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 {