[3/7] msi: Don't create a temporary copy of the package. (try 2)

Joris Huizer joris_huizer at yahoo.com
Tue Aug 23 07:13:10 CDT 2011


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



More information about the wine-patches mailing list