Create a stub function to apply a single table transform and call it
where we need to apply transforms.
This commit is contained in:
parent
c4e8f06375
commit
f8fef6ea94
|
@ -460,8 +460,7 @@ static UINT msi_apply_substorage_transform( MSIPACKAGE *package,
|
|||
r = IStorage_OpenStorage( patch_db->storage, name, NULL, STGM_SHARE_EXCLUSIVE, NULL, 0, &stg );
|
||||
if (SUCCEEDED(r))
|
||||
{
|
||||
FIXME("apply substorage transform %s\n", debugstr_w(name));
|
||||
/* ret = table_apply_transform( package->db, stg ); */
|
||||
ret = msi_table_apply_transform( package->db, stg );
|
||||
IStorage_Release( stg );
|
||||
ret = ERROR_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -310,6 +310,9 @@ extern BOOL TABLE_Exists( MSIDATABASE *db, LPWSTR name );
|
|||
extern UINT read_raw_stream_data( MSIDATABASE*, LPCWSTR stname,
|
||||
USHORT **pdata, UINT *psz );
|
||||
|
||||
/* transform functions */
|
||||
extern UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg );
|
||||
|
||||
/* action internals */
|
||||
extern UINT MSI_InstallPackage( MSIPACKAGE *, LPCWSTR, LPCWSTR );
|
||||
extern void ACTION_free_package_structures( MSIPACKAGE* );
|
||||
|
|
|
@ -657,8 +657,7 @@ static UINT MSI_DatabaseApplyTransformW( MSIDATABASE *db,
|
|||
if( TRACE_ON( msi ) )
|
||||
enum_stream_names( stg );
|
||||
|
||||
/* r = table_apply_transform( db, stg ); */
|
||||
FIXME("should apply transform %s\n", debugstr_w(szTransformFile) );
|
||||
r = msi_table_apply_transform( db, stg );
|
||||
|
||||
IStorage_Release( stg );
|
||||
|
||||
|
|
|
@ -1532,3 +1532,59 @@ UINT MSI_CommitTables( MSIDATABASE *db )
|
|||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
static UINT msi_table_load_transform( MSIDATABASE *db, IStorage *stg,
|
||||
string_table *st, LPCWSTR name )
|
||||
{
|
||||
FIXME("%p %p %p %s\n", db, stg, st, debugstr_w(name) );
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* msi_table_apply_transform
|
||||
*
|
||||
* Enumerate the table transforms in a transform storage and apply each one.
|
||||
*/
|
||||
UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg )
|
||||
{
|
||||
IEnumSTATSTG *stgenum = NULL;
|
||||
HRESULT r;
|
||||
STATSTG stat;
|
||||
ULONG n, count;
|
||||
WCHAR name[0x40];
|
||||
string_table *strings;
|
||||
UINT ret = ERROR_FUNCTION_FAILED;
|
||||
|
||||
strings = load_string_table( stg );
|
||||
if( !strings )
|
||||
goto end;
|
||||
|
||||
r = IStorage_EnumElements( stg, 0, NULL, 0, &stgenum );
|
||||
if( FAILED( r ) )
|
||||
goto end;
|
||||
|
||||
n = 0;
|
||||
ret = ERROR_SUCCESS;
|
||||
|
||||
while( r == ERROR_SUCCESS )
|
||||
{
|
||||
count = 0;
|
||||
r = IEnumSTATSTG_Next( stgenum, 1, &stat, &count );
|
||||
if( FAILED( r ) || !count )
|
||||
break;
|
||||
decode_streamname( stat.pwcsName, name );
|
||||
if( ( name[0] == 0x4840 ) && ( name[1] != '_' ) )
|
||||
r = msi_table_load_transform( db, stg, strings, name+1 );
|
||||
else
|
||||
TRACE("non-table stream %s\n", debugstr_w(name) );
|
||||
n++;
|
||||
}
|
||||
|
||||
end:
|
||||
if ( stgenum )
|
||||
IEnumSTATSTG_Release( stgenum );
|
||||
if ( strings )
|
||||
msi_destroy_stringtable( strings );
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue