Module: wine Branch: master Commit: 96c480b880fe9c696791a074286d47fded32eeee URL: http://source.winehq.org/git/wine.git/?a=commit;h=96c480b880fe9c696791a07428...
Author: James Hawkins truiken@gmail.com Date: Thu Dec 10 17:02:39 2009 -0800
msi: Refactor the Installer.InstallProduct method into InstallerImpl_InstallProduct.
---
dlls/msi/automation.c | 59 ++++++++++++++++++++++++++++++++---------------- 1 files changed, 39 insertions(+), 20 deletions(-)
diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c index 1e25ec9..031b11e 100644 --- a/dlls/msi/automation.c +++ b/dlls/msi/automation.c @@ -1763,6 +1763,42 @@ static HRESULT InstallerImpl_EnableLog(WORD wFlags, return S_OK; }
+static HRESULT InstallerImpl_InstallProduct(WORD wFlags, + DISPPARAMS* pDispParams, + VARIANT* pVarResult, + EXCEPINFO* pExcepInfo, + UINT* puArgErr) +{ + UINT ret; + HRESULT hr; + VARIANTARG varg0, varg1; + + if (!(wFlags & DISPATCH_METHOD)) + return DISP_E_MEMBERNOTFOUND; + + VariantInit(&varg0); + hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr); + if (FAILED(hr)) + return hr; + + VariantInit(&varg1); + hr = DispGetParam(pDispParams, 1, VT_BSTR, &varg1, puArgErr); + if (FAILED(hr)) + goto done; + + ret = MsiInstallProductW(V_BSTR(&varg0), V_BSTR(&varg1)); + if (ret != ERROR_SUCCESS) + { + hr = DISP_E_EXCEPTION; + goto done; + } + +done: + VariantClear(&varg0); + VariantClear(&varg1); + return hr; +} + static HRESULT InstallerImpl_LastErrorRecord(WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, @@ -1892,26 +1928,9 @@ static HRESULT WINAPI InstallerImpl_Invoke( pVarResult, pExcepInfo, puArgErr);
case DISPID_INSTALLER_INSTALLPRODUCT: - if (wFlags & DISPATCH_METHOD) - { - hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr); - if (FAILED(hr)) return hr; - hr = DispGetParam(pDispParams, 1, VT_BSTR, &varg1, puArgErr); - if (FAILED(hr)) - { - VariantClear(&varg0); - return hr; - } - if ((ret = MsiInstallProductW(V_BSTR(&varg0), V_BSTR(&varg1))) != ERROR_SUCCESS) - { - VariantClear(&varg1); - VariantClear(&varg0); - ERR("MsiInstallProduct returned %d\n", ret); - return DISP_E_EXCEPTION; - } - } - else return DISP_E_MEMBERNOTFOUND; - break; + return InstallerImpl_InstallProduct(wFlags, pDispParams, + pVarResult, pExcepInfo, + puArgErr);
case DISPID_INSTALLER_VERSION: if (wFlags & DISPATCH_PROPERTYGET) {