msi: Move application of substorage transforms out of msi_parse_patch_summary.
authorHans Leidekker <hans@codeweavers.com>
Tue, 13 Apr 2010 09:16:17 +0000 (11:16 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 13 Apr 2010 09:48:30 +0000 (11:48 +0200)
dlls/msi/action.c

index 5043426564b44f643c224c0905e5a103ed160f26..a4af27c462ecfd5c07bdf859d12580cc96df0903 100644 (file)
@@ -491,8 +491,7 @@ done:
 static UINT msi_parse_patch_summary( MSIPACKAGE *package, MSIDATABASE *patch_db )
 {
     MSISUMMARYINFO *si;
-    LPWSTR str, *substorage;
-    UINT i, r = ERROR_SUCCESS;
+    UINT r = ERROR_SUCCESS;
 
     si = MSI_GetSummaryInformationW( patch_db->storage, 0 );
     if (!si)
@@ -519,26 +518,22 @@ static UINT msi_parse_patch_summary( MSIPACKAGE *package, MSIDATABASE *patch_db
         return ERROR_OUTOFMEMORY;
     }
 
-    /* enumerate the substorage */
-    str = msi_suminfo_dup_string( si, PID_LASTAUTHOR );
-    package->patch->transforms = str;
-
-    substorage = msi_split_string( str, ';' );
-    for ( i = 0; substorage && substorage[i] && r == ERROR_SUCCESS; i++ )
-        r = msi_apply_substorage_transform( package, patch_db, substorage[i] );
+    package->patch->transforms = msi_suminfo_dup_string(si, PID_LASTAUTHOR);
+    if (!package->patch->transforms)
+    {
+        msiobj_release( &si->hdr );
+        return ERROR_OUTOFMEMORY;
+    }
 
-    msi_free( substorage );
     msiobj_release( &si->hdr );
-
-    msi_set_media_source_prop(package);
-
     return r;
 }
 
 static UINT msi_apply_patch_package( MSIPACKAGE *package, LPCWSTR file )
 {
     MSIDATABASE *patch_db = NULL;
-    UINT r;
+    LPWSTR *substorage;
+    UINT i, r;
 
     TRACE("%p %s\n", package, debugstr_w( file ) );
 
@@ -556,6 +551,14 @@ static UINT msi_apply_patch_package( MSIPACKAGE *package, LPCWSTR file )
 
     msi_parse_patch_summary( package, patch_db );
 
+    /* apply substorage transforms */
+    substorage = msi_split_string( package->patch->transforms, ';' );
+    for ( i = 0; substorage && substorage[i] && r == ERROR_SUCCESS; i++ )
+        r = msi_apply_substorage_transform( package, patch_db, substorage[i] );
+
+    msi_free( substorage );
+    msi_set_media_source_prop( package );
+
     /*
      * There might be a CAB file in the patch package,
      * so append it to the list of storage to search for streams.