From 454fa4bea0a9601ea91dd209fe86968f1e8895f5 Mon Sep 17 00:00:00 2001 From: Mike McCormack Date: Wed, 9 Nov 2005 10:58:24 +0000 Subject: [PATCH] Make sure we only CoUninitialize after successfully initializing. Fix the address of the returned IShellLinkDataList interface. --- dlls/msi/msi.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c index 550cc02f0eb..f1facf6d213 100644 --- a/dlls/msi/msi.c +++ b/dlls/msi/msi.c @@ -1818,14 +1818,12 @@ UINT WINAPI MsiGetShortcutTargetW( LPCWSTR szShortcutTarget, IShellLinkDataList *dl = NULL; IPersistFile *pf = NULL; LPEXP_DARWIN_LINK darwin = NULL; - HRESULT r; + HRESULT r, init; TRACE("%s %p %p %p\n", debugstr_w(szShortcutTarget), szProductCode, szFeatureId, szComponentCode ); - r = CoInitialize(NULL); - if( FAILED( r ) ) - return ERROR_FUNCTION_FAILED; + init = CoInitialize(NULL); r = CoCreateInstance( &CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IPersistFile, (LPVOID*) &pf ); @@ -1836,7 +1834,7 @@ UINT WINAPI MsiGetShortcutTargetW( LPCWSTR szShortcutTarget, if( SUCCEEDED( r ) ) { r = IPersistFile_QueryInterface( pf, &IID_IShellLinkDataList, - (LPVOID*) dl ); + (LPVOID*) &dl ); if( SUCCEEDED( r ) ) { IShellLinkDataList_CopyDataBlock( dl, EXP_DARWIN_ID_SIG, @@ -1847,7 +1845,8 @@ UINT WINAPI MsiGetShortcutTargetW( LPCWSTR szShortcutTarget, IPersistFile_Release( pf ); } - CoUninitialize(); + if (SUCCEEDED(init)) + CoUninitialize(); TRACE("darwin = %p\n", darwin);