diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2012-11-30 11:06:53 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2012-12-06 20:30:31 +0100 |
commit | 95586f6733d3fcbc756265818ef7e52b207542fe (patch) | |
tree | 6bc3b0de47e1001dab546f31cae765bf20b8998b /libmsi/msiquery.c | |
parent | c8b9a23e3d89efbc3f15f0c675a4bad421bfbe15 (diff) | |
download | msitools-95586f6733d3fcbc756265818ef7e52b207542fe.tar.gz msitools-95586f6733d3fcbc756265818ef7e52b207542fe.tar.xz msitools-95586f6733d3fcbc756265818ef7e52b207542fe.zip |
use actual types in the API
Diffstat (limited to 'libmsi/msiquery.c')
-rw-r--r-- | libmsi/msiquery.c | 164 |
1 files changed, 61 insertions, 103 deletions
diff --git a/libmsi/msiquery.c b/libmsi/msiquery.c index 47635f3..3b23c0e 100644 --- a/libmsi/msiquery.c +++ b/libmsi/msiquery.c @@ -84,15 +84,13 @@ unsigned VIEW_find_column( LibmsiView *table, const WCHAR *name, const WCHAR *ta return ERROR_INVALID_PARAMETER; } -unsigned MsiDatabaseOpenQuery(LibmsiObject *hdb, - const char *szQuery, LibmsiObject **phView) +unsigned MsiDatabaseOpenQuery(LibmsiDatabase *db, + const char *szQuery, LibmsiQuery **pQuery) { unsigned r; WCHAR *szwQuery; - LibmsiDatabase *db; - LibmsiQuery *query = NULL; - TRACE("%d %s %p\n", hdb, debugstr_a(szQuery), phView); + TRACE("%d %s %p\n", db, debugstr_a(szQuery), pQuery); if( szQuery ) { @@ -103,15 +101,11 @@ unsigned MsiDatabaseOpenQuery(LibmsiObject *hdb, else szwQuery = NULL; - TRACE("%s %p\n", debugstr_w(szQuery), phView); - - db = msihandle2msiinfo( hdb, LIBMSI_OBJECT_TYPE_DATABASE ); if( !db ) return ERROR_INVALID_HANDLE; + msiobj_addref( &db->hdr); - r = MSI_DatabaseOpenQueryW( db, szwQuery, &query ); - if( r == ERROR_SUCCESS ) - *phView = &query->hdr; + r = MSI_DatabaseOpenQueryW( db, szwQuery, pQuery ); msiobj_release( &db->hdr ); msi_free( szwQuery ); @@ -130,8 +124,7 @@ unsigned MSI_DatabaseOpenQueryW(LibmsiDatabase *db, return ERROR_INVALID_PARAMETER; /* pre allocate a handle to hold a pointer to the view */ - query = alloc_msiobject( LIBMSI_OBJECT_TYPE_QUERY, sizeof (LibmsiQuery), - MSI_CloseQuery ); + query = alloc_msiobject( sizeof (LibmsiQuery), MSI_CloseQuery ); if( !query ) return ERROR_FUNCTION_FAILED; @@ -201,7 +194,7 @@ unsigned MSI_IterateRecords( LibmsiQuery *view, unsigned *count, break; } - MSI_QueryClose( view ); + MsiQueryClose( view ); if( count ) *count = n; @@ -242,7 +235,7 @@ LibmsiRecord *MSI_QueryGetRecord( LibmsiDatabase *db, const WCHAR *fmt, ... ) { MSI_QueryExecute( view, NULL ); MSI_QueryFetch( view, &rec ); - MSI_QueryClose( view ); + MsiQueryClose( view ); msiobj_release( &view->hdr ); } return rec; @@ -264,7 +257,7 @@ unsigned msi_view_get_row(LibmsiDatabase *db, LibmsiView *view, unsigned row, Li if (row >= row_count) return ERROR_NO_MORE_ITEMS; - *rec = MSI_CreateRecord(col_count); + *rec = MsiCreateRecord(col_count); if (!*rec) return ERROR_FUNCTION_FAILED; @@ -317,9 +310,9 @@ unsigned msi_view_get_row(LibmsiDatabase *db, LibmsiView *view, unsigned row, Li else { if ((type & MSI_DATASIZEMASK) == 2) - MSI_RecordSetInteger(*rec, i, ival - (1<<15)); + MsiRecordSetInteger(*rec, i, ival - (1<<15)); else - MSI_RecordSetInteger(*rec, i, ival - (1<<31)); + MsiRecordSetInteger(*rec, i, ival - (1<<31)); } } @@ -347,55 +340,42 @@ unsigned MSI_QueryFetch(LibmsiQuery *query, LibmsiRecord **prec) return r; } -unsigned MsiQueryFetch(LibmsiObject *hView, LibmsiObject **record) +unsigned MsiQueryFetch(LibmsiQuery *query, LibmsiRecord **record) { - LibmsiQuery *query; - LibmsiRecord *rec = NULL; unsigned ret; - TRACE("%d %p\n", hView, record); + TRACE("%d %p\n", query, record); if( !record ) return ERROR_INVALID_PARAMETER; *record = 0; - query = msihandle2msiinfo( hView, LIBMSI_OBJECT_TYPE_QUERY ); if( !query ) return ERROR_INVALID_HANDLE; - ret = MSI_QueryFetch( query, &rec ); - if( ret == ERROR_SUCCESS ) - *record = &rec->hdr; + msiobj_addref( &query->hdr); + ret = MSI_QueryFetch( query, record ); msiobj_release( &query->hdr ); return ret; } -unsigned MSI_QueryClose(LibmsiQuery *query) +unsigned MsiQueryClose(LibmsiQuery *query) { LibmsiView *view; + unsigned ret; TRACE("%p\n", query ); + if( !query ) + return ERROR_INVALID_HANDLE; + + msiobj_addref( &query->hdr ); view = query->view; if( !view ) return ERROR_FUNCTION_FAILED; if( !view->ops->close ) return ERROR_FUNCTION_FAILED; - return view->ops->close( view ); -} - -unsigned MsiQueryClose(LibmsiObject *hView) -{ - LibmsiQuery *query; - unsigned ret; - - TRACE("%d\n", hView ); - - query = msihandle2msiinfo( hView, LIBMSI_OBJECT_TYPE_QUERY ); - if( !query ) - return ERROR_INVALID_HANDLE; - - ret = MSI_QueryClose( query ); + ret = view->ops->close( view ); msiobj_release( &query->hdr ); return ret; } @@ -416,31 +396,21 @@ unsigned MSI_QueryExecute(LibmsiQuery *query, LibmsiRecord *rec ) return view->ops->execute( view, rec ); } -unsigned MsiQueryExecute(LibmsiObject *hView, LibmsiObject *hRec) +unsigned MsiQueryExecute(LibmsiQuery *query, LibmsiRecord *rec) { - LibmsiQuery *query; - LibmsiRecord *rec = NULL; unsigned ret; - TRACE("%d %d\n", hView, hRec); + TRACE("%d %d\n", query, rec); - query = msihandle2msiinfo( hView, LIBMSI_OBJECT_TYPE_QUERY ); if( !query ) return ERROR_INVALID_HANDLE; + msiobj_addref( &query->hdr ); - if( hRec ) - { - rec = msihandle2msiinfo( hRec, LIBMSI_OBJECT_TYPE_RECORD ); - if( !rec ) - { - ret = ERROR_INVALID_HANDLE; - goto out; - } - } + if( rec ) + msiobj_addref( &rec->hdr ); ret = MSI_QueryExecute( query, rec ); -out: msiobj_release( &query->hdr ); if( rec ) msiobj_release( &rec->hdr ); @@ -505,7 +475,7 @@ unsigned MSI_QueryGetColumnInfo( LibmsiQuery *query, LibmsiColInfo info, LibmsiR if( !count ) return ERROR_INVALID_PARAMETER; - rec = MSI_CreateRecord( count ); + rec = MsiCreateRecord( count ); if( !rec ) return ERROR_FUNCTION_FAILED; @@ -524,28 +494,23 @@ unsigned MSI_QueryGetColumnInfo( LibmsiQuery *query, LibmsiColInfo info, LibmsiR return ERROR_SUCCESS; } -unsigned MsiQueryGetColumnInfo(LibmsiObject *hView, LibmsiColInfo info, LibmsiObject **hRec) +unsigned MsiQueryGetColumnInfo(LibmsiQuery *query, LibmsiColInfo info, LibmsiRecord **prec) { - LibmsiQuery *query = NULL; - LibmsiRecord *rec = NULL; unsigned r; - TRACE("%d %d %p\n", hView, info, hRec); + TRACE("%d %d %p\n", query, info, prec); - if( !hRec ) + if( !prec ) return ERROR_INVALID_PARAMETER; if( info != LIBMSI_COL_INFO_NAMES && info != LIBMSI_COL_INFO_TYPES ) return ERROR_INVALID_PARAMETER; - query = msihandle2msiinfo( hView, LIBMSI_OBJECT_TYPE_QUERY ); if( !query ) return ERROR_INVALID_HANDLE; - r = MSI_QueryGetColumnInfo( query, info, &rec ); - if ( r == ERROR_SUCCESS ) - *hRec = &rec->hdr; - + msiobj_addref ( &query->hdr ); + r = MSI_QueryGetColumnInfo( query, info, prec ); msiobj_release( &query->hdr ); return r; @@ -573,20 +538,21 @@ unsigned MSI_QueryModify( LibmsiQuery *query, LibmsiModify mode, LibmsiRecord *r return r; } -unsigned MsiQueryModify( LibmsiObject *hView, LibmsiModify eModifyMode, - LibmsiObject *hRecord) +unsigned MsiQueryModify( LibmsiQuery *query, LibmsiModify eModifyMode, + LibmsiRecord *rec) { - LibmsiQuery *query = NULL; - LibmsiRecord *rec = NULL; unsigned r = ERROR_FUNCTION_FAILED; - TRACE("%d %x %d\n", hView, eModifyMode, hRecord); + TRACE("%d %x %d\n", query, eModifyMode, rec); - query = msihandle2msiinfo( hView, LIBMSI_OBJECT_TYPE_QUERY ); if( !query ) return ERROR_INVALID_HANDLE; - rec = msihandle2msiinfo( hRecord, LIBMSI_OBJECT_TYPE_RECORD ); + msiobj_addref( &query->hdr); + + if (rec) + msiobj_addref( &rec->hdr); + r = MSI_QueryModify( query, eModifyMode, rec ); msiobj_release( &query->hdr ); @@ -596,22 +562,21 @@ unsigned MsiQueryModify( LibmsiObject *hView, LibmsiModify eModifyMode, return r; } -LibmsiDBError MsiQueryGetError( LibmsiObject *handle, char *buffer, unsigned *buflen ) +LibmsiDBError MsiQueryGetError( LibmsiQuery *query, char *buffer, unsigned *buflen ) { - LibmsiQuery *query; const WCHAR *column; LibmsiDBError r; unsigned len; - TRACE("%u %p %p\n", handle, buffer, buflen); + TRACE("%u %p %p\n", query, buffer, buflen); if (!buflen) return LIBMSI_DB_ERROR_INVALIDARG; - query = msihandle2msiinfo( handle, LIBMSI_OBJECT_TYPE_QUERY ); if (!query) return LIBMSI_DB_ERROR_INVALIDARG; + msiobj_addref( &query->hdr); if ((r = query->view->error)) column = query->view->error_column; else column = szEmpty; @@ -668,13 +633,12 @@ end: return ret; } -unsigned MsiDatabaseApplyTransform( LibmsiObject *hdb, +unsigned MsiDatabaseApplyTransform( LibmsiDatabase *db, const char *szTransformFile, int iErrorCond) { - LibmsiDatabase *db; unsigned r; - db = msihandle2msiinfo( hdb, LIBMSI_OBJECT_TYPE_DATABASE ); + msiobj_addref( &db->hdr ); if( !db ) return ERROR_INVALID_HANDLE; r = MSI_DatabaseApplyTransform( db, szTransformFile, iErrorCond ); @@ -682,14 +646,13 @@ unsigned MsiDatabaseApplyTransform( LibmsiObject *hdb, return r; } -unsigned MsiDatabaseCommit( LibmsiObject *hdb ) +unsigned MsiDatabaseCommit( LibmsiDatabase *db ) { - LibmsiDatabase *db; unsigned r; - TRACE("%d\n", hdb); + TRACE("%d\n", db); - db = msihandle2msiinfo( hdb, LIBMSI_OBJECT_TYPE_DATABASE ); + msiobj_addref( &db->hdr ); if( !db ) return ERROR_INVALID_HANDLE; @@ -730,7 +693,7 @@ static unsigned msi_primary_key_iterator( LibmsiRecord *rec, void *param ) const WCHAR *table; unsigned type; - type = MSI_RecordGetInteger( rec, 4 ); + type = MsiRecordGetInteger( rec, 4 ); if( type & MSITYPE_KEY ) { info->n++; @@ -738,11 +701,11 @@ static unsigned msi_primary_key_iterator( LibmsiRecord *rec, void *param ) { if ( info->n == 1 ) { - table = MSI_RecordGetString( rec, 1 ); + table = MSI_RecordGetStringRaw( rec, 1 ); MSI_RecordSetStringW( info->rec, 0, table); } - name = MSI_RecordGetString( rec, 3 ); + name = MSI_RecordGetStringRaw( rec, 3 ); MSI_RecordSetStringW( info->rec, info->n, name ); } } @@ -778,7 +741,7 @@ unsigned MSI_DatabaseGetPrimaryKeys( LibmsiDatabase *db, TRACE("Found %d primary keys\n", info.n ); /* allocate a record and fill in the names of the tables */ - info.rec = MSI_CreateRecord( info.n ); + info.rec = MsiCreateRecord( info.n ); info.n = 0; r = MSI_IterateRecords( query, 0, msi_primary_key_iterator, &info ); if( r == ERROR_SUCCESS ) @@ -791,15 +754,13 @@ unsigned MSI_DatabaseGetPrimaryKeys( LibmsiDatabase *db, return r; } -unsigned MsiDatabaseGetPrimaryKeys(LibmsiObject *hdb, - const char *table, LibmsiObject **phRec) +unsigned MsiDatabaseGetPrimaryKeys(LibmsiDatabase *db, + const char *table, LibmsiRecord **prec) { - LibmsiRecord *rec = NULL; - LibmsiDatabase *db; WCHAR *szwTable = NULL; unsigned r; - TRACE("%d %s %p\n", hdb, debugstr_a(table), phRec); + TRACE("%d %s %p\n", db, debugstr_a(table), prec); if( table ) { @@ -808,13 +769,11 @@ unsigned MsiDatabaseGetPrimaryKeys(LibmsiObject *hdb, return ERROR_OUTOFMEMORY; } - db = msihandle2msiinfo( hdb, LIBMSI_OBJECT_TYPE_DATABASE ); if( !db ) return ERROR_INVALID_HANDLE; - r = MSI_DatabaseGetPrimaryKeys( db, szwTable, &rec ); - if( r == ERROR_SUCCESS ) - *phRec = &rec->hdr; + msiobj_addref( &db->hdr ); + r = MSI_DatabaseGetPrimaryKeys( db, szwTable, prec ); msiobj_release( &db->hdr ); msi_free( szwTable ); @@ -822,13 +781,12 @@ unsigned MsiDatabaseGetPrimaryKeys(LibmsiObject *hdb, } LibmsiCondition MsiDatabaseIsTablePersistent( - LibmsiObject *hDatabase, const char *szTableName) + LibmsiDatabase *db, const char *szTableName) { WCHAR *szwTableName = NULL; - LibmsiDatabase *db; LibmsiCondition r; - TRACE("%x %s\n", hDatabase, debugstr_a(szTableName)); + TRACE("%x %s\n", db, debugstr_a(szTableName)); if( szTableName ) { @@ -837,7 +795,7 @@ LibmsiCondition MsiDatabaseIsTablePersistent( return LIBMSI_CONDITION_ERROR; } - db = msihandle2msiinfo( hDatabase, LIBMSI_OBJECT_TYPE_DATABASE ); + msiobj_addref( &db->hdr ); if( !db ) return LIBMSI_CONDITION_ERROR; |