Module: wine Branch: master Commit: 1b256f2c6e333a37f5a5a16f7fddcd3160e1125d URL: http://source.winehq.org/git/wine.git/?a=commit;h=1b256f2c6e333a37f5a5a16f7f...
Author: Mike McCormack mike@codeweavers.com Date: Thu Oct 12 18:55:53 2006 +0900
msi: Improve error checking when applying transform data.
---
dlls/msi/table.c | 35 ++++++++++++++++++++--------------- 1 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/dlls/msi/table.c b/dlls/msi/table.c index 26c0cc1..1ef7d0e 100644 --- a/dlls/msi/table.c +++ b/dlls/msi/table.c @@ -1900,13 +1900,9 @@ static UINT msi_table_load_transform( MS rec = msi_get_transform_record( tv, st, &rawdata[n] ); if (rec) { - UINT row = 0; - - r = msi_table_find_row( tv, rec, &row ); - - if( rawdata[n] & 1) + if ( mask & 1 ) { - TRACE("insert [%d]: \n", row); + TRACE("inserting record\n");
/* * Native msi seems writes nul into the @@ -1921,24 +1917,33 @@ static UINT msi_table_load_transform( MS ERR("_Columns has non-null data...\n"); }
- TABLE_insert_row( &tv->view, rec ); - } - else if( mask & 0xff ) - { - TRACE("modify [%d]: \n", row); - msi_table_modify_row( tv, rec, row, mask ); + r = TABLE_insert_row( &tv->view, rec ); + if (r != ERROR_SUCCESS) + ERR("insert row failed\n"); } else { - TRACE("delete [%d]: \n", row); - msi_delete_row( tv, row ); + UINT row = 0; + + r = msi_table_find_row( tv, rec, &row ); + if (r != ERROR_SUCCESS) + ERR("no matching row to transform\n"); + else if ( mask ) + { + TRACE("modifying row [%d]: \n", row); + msi_table_modify_row( tv, rec, row, mask ); + } + else + { + TRACE("deleting row [%d]: \n", row); + msi_delete_row( tv, row ); + } } if( TRACE_ON(msidb) ) dump_record( rec ); msiobj_release( &rec->hdr ); }
n += sz/2; - }
err: