Re: [3/7] msi: Don't create a temporary copy of the package. (try 2)
Just an implementation detail I noticed: On 08/23/2011 11:45 AM, Hans Leidekker wrote:
+ +static UINT get_registered_local_package( const WCHAR *product, const WCHAR *package, WCHAR *localfile ) +{ + MSIINSTALLCONTEXT context; + HKEY product_key, props_key; + WCHAR *registered_package = NULL, unsquashed[GUID_SIZE]; + UINT r = ERROR_FUNCTION_FAILED; + + r = msi_locate_product( product,&context ); + if (r != ERROR_SUCCESS) + return r; + + r = MSIREG_OpenProductKey( product, NULL, context,&product_key, FALSE ); + if (r != ERROR_SUCCESS) + return r; + + r = MSIREG_OpenInstallProps( product, context, NULL,&props_key, FALSE ); + if (r != ERROR_SUCCESS) + { + RegCloseKey( product_key ); + return r; + } + registered_package = msi_reg_get_val_str( product_key, INSTALLPROPERTY_PACKAGECODEW ); + if (!registered_package) + goto done; + + unsquash_guid( registered_package, unsquashed ); + if (!strcmpiW( package, unsquashed )) + { + WCHAR *filename = msi_reg_get_val_str( props_key, INSTALLPROPERTY_LOCALPACKAGEW ); + strcpyW( localfile, filename ); + msi_free( filename ); + r = ERROR_SUCCESS; + } +done: + msi_free( registered_package ); + RegCloseKey( props_key ); + RegCloseKey( product_key ); + return r; +} +
I'm confused about the last part of the function. I think if the comparison between 'package' and 'unsquashed' fails, you want to return an error, but the return value 'r' will be ERROR_SUCCESS at that point, and isn't updated. HTH, Joris
participants (1)
-
Joris Huizer