[PATCH 1/7] msi/custom.c: unify thread handling of different custom action types (resend)

Hans Leidekker hans at codeweavers.com
Tue Oct 11 07:29:45 CDT 2011


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.

+    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