summaryrefslogtreecommitdiffstats
path: root/libmsi
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2012-12-02 15:41:30 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2012-12-06 20:30:32 +0100
commitd504a4ebb37a9a2f1ea607880e7e4ff052b63d23 (patch)
treef9aaf66e8eddf98898d5e9c5b98741628f8d2628 /libmsi
parenta56f65ccb2160e529cc1b3134eff98ecbed37641 (diff)
downloadmsitools-d504a4ebb37a9a2f1ea607880e7e4ff052b63d23.tar.gz
msitools-d504a4ebb37a9a2f1ea607880e7e4ff052b63d23.tar.xz
msitools-d504a4ebb37a9a2f1ea607880e7e4ff052b63d23.zip
point SummaryInfo to database
Do not store a storage pointer, so that we can separate the input and output storages.
Diffstat (limited to 'libmsi')
-rw-r--r--libmsi/msipriv.h2
-rw-r--r--libmsi/suminfo.c18
2 files changed, 10 insertions, 10 deletions
diff --git a/libmsi/msipriv.h b/libmsi/msipriv.h
index a70ed8c..8cfe28c 100644
--- a/libmsi/msipriv.h
+++ b/libmsi/msipriv.h
@@ -266,7 +266,7 @@ struct LibmsiView
typedef struct LibmsiSummaryInfo
{
LibmsiObject hdr;
- IStorage *storage;
+ LibmsiDatabase *database;
unsigned update_count;
PROPVARIANT property[MSI_MAX_PROPS];
} LibmsiSummaryInfo;
diff --git a/libmsi/suminfo.c b/libmsi/suminfo.c
index 59b6e18..bbf42ee 100644
--- a/libmsi/suminfo.c
+++ b/libmsi/suminfo.c
@@ -101,7 +101,7 @@ static void _libmsi_summary_info_destroy( LibmsiObject *arg )
for( i = 0; i < MSI_MAX_PROPS; i++ )
free_prop( &si->property[i] );
- IStorage_Release( si->storage );
+ msiobj_release( &si->database->hdr );
}
static unsigned get_type( unsigned uiProperty )
@@ -433,26 +433,26 @@ static unsigned save_summary_info( const LibmsiSummaryInfo * si, IStream *stm )
return LIBMSI_RESULT_SUCCESS;
}
-LibmsiSummaryInfo *_libmsi_get_summary_information( IStorage *stg, unsigned uiUpdateCount )
+LibmsiSummaryInfo *_libmsi_get_summary_information( LibmsiDatabase *db, unsigned uiUpdateCount )
{
IStream *stm = NULL;
LibmsiSummaryInfo *si;
unsigned grfMode;
HRESULT r;
- TRACE("%p %d\n", stg, uiUpdateCount );
+ TRACE("%p %d\n", db, uiUpdateCount );
si = alloc_msiobject( sizeof (LibmsiSummaryInfo), _libmsi_summary_info_destroy );
if( !si )
return si;
si->update_count = uiUpdateCount;
- IStorage_AddRef( stg );
- si->storage = stg;
+ msiobj_addref( &db->hdr );
+ si->database = db;
/* read the stream... if we fail, we'll start with an empty property set */
grfMode = STGM_READ | STGM_SHARE_EXCLUSIVE;
- r = IStorage_OpenStream( si->storage, szSumInfo, 0, grfMode, 0, &stm );
+ r = IStorage_OpenStream( db->storage, szSumInfo, 0, grfMode, 0, &stm );
if( SUCCEEDED(r) )
{
load_summary_info( si, stm );
@@ -477,7 +477,7 @@ LibmsiResult libmsi_database_get_summary_info( LibmsiDatabase *db,
return LIBMSI_RESULT_INVALID_HANDLE;
msiobj_addref( &db->hdr);
- si = _libmsi_get_summary_information( db->storage, uiUpdateCount );
+ si = _libmsi_get_summary_information( db, uiUpdateCount );
if (si)
{
*psi = si;
@@ -703,7 +703,7 @@ static unsigned suminfo_persist( LibmsiSummaryInfo *si )
HRESULT r;
grfMode = STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE;
- r = IStorage_CreateStream( si->storage, szSumInfo, grfMode, 0, 0, &stm );
+ r = IStorage_CreateStream( si->database->storage, szSumInfo, grfMode, 0, 0, &stm );
if( SUCCEEDED(r) )
{
ret = save_summary_info( si, stm );
@@ -802,7 +802,7 @@ unsigned msi_add_suminfo( LibmsiDatabase *db, WCHAR ***records, int num_records,
unsigned i, j;
LibmsiSummaryInfo *si;
- si = _libmsi_get_summary_information( db->storage, num_records * (num_columns / 2) );
+ si = _libmsi_get_summary_information( db, num_records * (num_columns / 2) );
if (!si)
{
ERR("no summary information!\n");