diff options
Diffstat (limited to 'libmsi/suminfo.c')
-rw-r--r-- | libmsi/suminfo.c | 51 |
1 files changed, 22 insertions, 29 deletions
diff --git a/libmsi/suminfo.c b/libmsi/suminfo.c index d405eff..7d40b0f 100644 --- a/libmsi/suminfo.c +++ b/libmsi/suminfo.c @@ -441,8 +441,7 @@ LibmsiSummaryInfo *MSI_GetSummaryInformation( IStorage *stg, unsigned uiUpdateCo TRACE("%p %d\n", stg, uiUpdateCount ); - si = alloc_msiobject( LIBMSI_OBJECT_TYPE_SUMMARYINFO, - sizeof (LibmsiSummaryInfo), MSI_CloseSummaryInfo ); + si = alloc_msiobject( sizeof (LibmsiSummaryInfo), MSI_CloseSummaryInfo ); if( !si ) return si; @@ -462,26 +461,25 @@ LibmsiSummaryInfo *MSI_GetSummaryInformation( IStorage *stg, unsigned uiUpdateCo return si; } -unsigned MsiGetSummaryInformation( LibmsiObject *hDatabase, - unsigned uiUpdateCount, LibmsiObject **pHandle ) +unsigned MsiGetSummaryInformation( LibmsiDatabase *db, + unsigned uiUpdateCount, LibmsiSummaryInfo **psi ) { LibmsiSummaryInfo *si; - LibmsiDatabase *db; unsigned ret = ERROR_FUNCTION_FAILED; - TRACE("%d %d %p\n", hDatabase, uiUpdateCount, pHandle); + TRACE("%d %d %p\n", db, uiUpdateCount, psi); - if( !pHandle ) + if( !psi ) return ERROR_INVALID_PARAMETER; - db = msihandle2msiinfo( hDatabase, LIBMSI_OBJECT_TYPE_DATABASE ); if( !db ) return ERROR_INVALID_HANDLE; + msiobj_addref( &db->hdr); si = MSI_GetSummaryInformation( db->storage, uiUpdateCount ); if (si) { - *pHandle = &si->hdr; + *psi = si; ret = ERROR_SUCCESS; } @@ -489,16 +487,14 @@ unsigned MsiGetSummaryInformation( LibmsiObject *hDatabase, return ret; } -unsigned MsiSummaryInfoGetPropertyCount(LibmsiObject *hSummaryInfo, unsigned *pCount) +unsigned MsiSummaryInfoGetPropertyCount(LibmsiSummaryInfo *si, unsigned *pCount) { - LibmsiSummaryInfo *si; - - TRACE("%d %p\n", hSummaryInfo, pCount); + TRACE("%d %p\n", si, pCount); - si = msihandle2msiinfo( hSummaryInfo, LIBMSI_OBJECT_TYPE_SUMMARYINFO ); if( !si ) return ERROR_INVALID_HANDLE; + msiobj_addref( &si->hdr ); if( pCount ) *pCount = get_property_count( si->property ); msiobj_release( &si->hdr ); @@ -507,14 +503,13 @@ unsigned MsiSummaryInfoGetPropertyCount(LibmsiObject *hSummaryInfo, unsigned *pC } unsigned MsiSummaryInfoGetProperty( - LibmsiObject *handle, unsigned uiProperty, unsigned *puiDataType, int *piValue, + LibmsiSummaryInfo *si, unsigned uiProperty, unsigned *puiDataType, int *piValue, uint64_t *pftValue, char *szValueBuf, unsigned *pcchValueBuf) { - LibmsiSummaryInfo *si; PROPVARIANT *prop; unsigned ret = ERROR_SUCCESS; - TRACE("%d %d %p %p %p %p %p\n", handle, uiProperty, puiDataType, + TRACE("%d %d %p %p %p %p %p\n", si, uiProperty, puiDataType, piValue, pftValue, szValueBuf, pcchValueBuf); if ( uiProperty >= MSI_MAX_PROPS ) @@ -523,10 +518,10 @@ unsigned MsiSummaryInfoGetProperty( return ERROR_UNKNOWN_PROPERTY; } - si = msihandle2msiinfo( handle, LIBMSI_OBJECT_TYPE_SUMMARYINFO ); if( !si ) return ERROR_INVALID_HANDLE; + msiobj_addref( &si->hdr ); prop = &si->property[uiProperty]; if( puiDataType ) @@ -609,10 +604,9 @@ WCHAR *msi_get_suminfo_product( IStorage *stg ) return prod; } -unsigned MsiSummaryInfoSetProperty( LibmsiObject *handle, unsigned uiProperty, +unsigned MsiSummaryInfoSetProperty( LibmsiSummaryInfo *si, unsigned uiProperty, unsigned uiDataType, int iValue, uint64_t* pftValue, const char *szValue ) { - LibmsiSummaryInfo *si; PROPVARIANT *prop; unsigned len; unsigned ret; @@ -621,6 +615,9 @@ unsigned MsiSummaryInfoSetProperty( LibmsiObject *handle, unsigned uiProperty, TRACE("%p %u %u %i %p %p\n", si, uiProperty, type, iValue, pftValue, szValue ); + if( !si ) + return ERROR_INVALID_HANDLE; + type = get_type( uiProperty ); if( type == VT_EMPTY || type != uiDataType ) return ERROR_DATATYPE_MISMATCH; @@ -631,9 +628,7 @@ unsigned MsiSummaryInfoSetProperty( LibmsiObject *handle, unsigned uiProperty, if( uiDataType == VT_FILETIME && !pftValue ) return ERROR_INVALID_PARAMETER; - si = msihandle2msiinfo( handle, LIBMSI_OBJECT_TYPE_SUMMARYINFO ); - if( !si ) - return ERROR_INVALID_HANDLE; + msiobj_addref( &si->hdr); prop = &si->property[uiProperty]; @@ -805,7 +800,7 @@ unsigned msi_add_suminfo( LibmsiDatabase *db, WCHAR ***records, int num_records, if (r != ERROR_SUCCESS) goto end; - r = MsiSummaryInfoSetProperty( &si->hdr, pid, get_type(pid), int_value, &ft_value, str_value ); + r = MsiSummaryInfoSetProperty( si, pid, get_type(pid), int_value, &ft_value, str_value ); if (r != ERROR_SUCCESS) goto end; @@ -821,19 +816,17 @@ end: return r; } -unsigned MsiSummaryInfoPersist( LibmsiObject *handle ) +unsigned MsiSummaryInfoPersist( LibmsiSummaryInfo *si ) { - LibmsiSummaryInfo *si; unsigned ret; - TRACE("%d\n", handle ); + TRACE("%d\n", si ); - si = msihandle2msiinfo( handle, LIBMSI_OBJECT_TYPE_SUMMARYINFO ); if( !si ) return ERROR_INVALID_HANDLE; + msiobj_addref( &si->hdr); ret = suminfo_persist( si ); - msiobj_release( &si->hdr ); return ret; } |