[PATCH 1/7] msi/custom.c: unify thread handling of different custom action types (resend)
Bernhard Loos
bernhardloos at googlemail.com
Tue Oct 11 15:09:09 CDT 2011
On Tue, Oct 11, 2011 at 2:29 PM, Hans Leidekker <hans at codeweavers.com> wrote:
> On Tue, 2011-10-11 at 13:20 +0200, Bernhard Loos wrote:
> +static HRESULT get_action_info( msi_custom_action_info *info, INT *type,
> + BSTR *source, BSTR *target, BSTR *name,
> + IWineMsiRemotePackage **package )
> {
> - IClassFactory *cf = NULL;
> - IWineMsiRemoteCustomAction *rca = NULL;
> - HRESULT r;
> -
> - r = DllGetClassObject( &CLSID_WineMsiRemoteCustomAction,
> - &IID_IClassFactory, (LPVOID *)&cf );
> - if (FAILED(r))
> - {
> - ERR("failed to get IClassFactory interface\n");
> - return ERROR_FUNCTION_FAILED;
> - }
> -
> - r = IClassFactory_CreateInstance( cf, NULL, &IID_IWineMsiRemoteCustomAction, (LPVOID *)&rca );
> - if (FAILED(r))
> - {
> - ERR("failed to get IWineMsiRemoteCustomAction interface\n");
> - return ERROR_FUNCTION_FAILED;
> - }
> -
> - r = IWineMsiRemoteCustomAction_GetActionInfo( rca, guid, type, handle, dll, funcname, package );
> - IWineMsiRemoteCustomAction_Release( rca );
> - if (FAILED(r))
> - {
> - ERR("GetActionInfo failed\n");
> - return ERROR_FUNCTION_FAILED;
> + IWineMsiRemotePackage *rp;
> + HRESULT res;
> + *source = *target = *name = NULL;
> +
> + res = create_msi_remote_package( NULL, (void **) &rp );
> + if (FAILED( res ))
> + return res;
> + res = IWineMsiRemotePackage_SetMsiHandle( rp, alloc_msihandle( &info->package->hdr ) );
>
> You should check for failure from alloc_msihandle.
In my defence, it currently also doesn't get checked, but I will add something.
> + if (FAILED( res ))
> + goto error;
> +
> + *source = SysAllocString( info->source );
> + *target = SysAllocString( info->target );
> + *name = SysAllocString( info->action );
> + if (!*source || !*target || !*name) {
> + res = E_OUTOFMEMORY;
> + goto error;
> }
> -
> +
> + *package = rp;
> + *type = info->type;
> +
> return ERROR_SUCCESS;
>
> This should become S_OK. You are mixing up return types in more places.
More information about the wine-devel
mailing list