Commit 9a4ba8c1 authored by Mike McCormack's avatar Mike McCormack Committed by Alexandre Julliard

msi: Search the patch package for source cabinet files.

parent ecd35a02
...@@ -526,6 +526,13 @@ static UINT msi_apply_patch_package( MSIPACKAGE *package, LPCWSTR file ) ...@@ -526,6 +526,13 @@ static UINT msi_apply_patch_package( MSIPACKAGE *package, LPCWSTR file )
} }
msi_parse_patch_summary( package, patch_db ); msi_parse_patch_summary( package, patch_db );
/*
* There might be a CAB file in the patch package,
* so append it to the list of storage to search for streams.
*/
append_storage_to_db( package->db, patch_db->storage );
msiobj_release( &patch_db->hdr ); msiobj_release( &patch_db->hdr );
return ERROR_SUCCESS; return ERROR_SUCCESS;
......
...@@ -563,6 +563,7 @@ extern UINT read_raw_stream_data( MSIDATABASE*, LPCWSTR stname, ...@@ -563,6 +563,7 @@ extern UINT read_raw_stream_data( MSIDATABASE*, LPCWSTR stname,
extern UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg ); extern UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg );
extern UINT MSI_DatabaseApplyTransformW( MSIDATABASE *db, extern UINT MSI_DatabaseApplyTransformW( MSIDATABASE *db,
LPCWSTR szTransformFile, int iErrorCond ); LPCWSTR szTransformFile, int iErrorCond );
extern void append_storage_to_db( MSIDATABASE *db, IStorage *stg );
/* action internals */ /* action internals */
extern UINT MSI_InstallPackage( MSIPACKAGE *, LPCWSTR, LPCWSTR ); extern UINT MSI_InstallPackage( MSIPACKAGE *, LPCWSTR, LPCWSTR );
......
...@@ -2101,14 +2101,7 @@ UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg ) ...@@ -2101,14 +2101,7 @@ UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg )
} }
if ( ret == ERROR_SUCCESS ) if ( ret == ERROR_SUCCESS )
{ append_storage_to_db( db, stg );
MSITRANSFORM *t;
t = msi_alloc( sizeof *t );
t->stg = stg;
IStorage_AddRef( stg );
list_add_tail( &db->transforms, &t->entry );
}
end: end:
if ( stgenum ) if ( stgenum )
...@@ -2119,6 +2112,16 @@ end: ...@@ -2119,6 +2112,16 @@ end:
return ret; return ret;
} }
void append_storage_to_db( MSIDATABASE *db, IStorage *stg )
{
MSITRANSFORM *t;
t = msi_alloc( sizeof *t );
t->stg = stg;
IStorage_AddRef( stg );
list_add_tail( &db->transforms, &t->entry );
}
void msi_free_transforms( MSIDATABASE *db ) void msi_free_transforms( MSIDATABASE *db )
{ {
while( !list_empty( &db->transforms ) ) while( !list_empty( &db->transforms ) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment