Module: wine Branch: refs/heads/master Commit: 9a9195d6e44eeb5048bf1b88e30c09d9f720b580 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=9a9195d6e44eeb5048bf1b88...
Author: Mike McCormack mike@codeweavers.com Date: Wed Jul 19 17:01:07 2006 +0900
msi: Only load the features and files tables once.
---
dlls/msi/action.c | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 2c0644c..66ff965 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -1315,6 +1315,9 @@ static UINT load_all_files(MSIPACKAGE *p '`','F','i','l','e','`',' ', 'O','R','D','E','R',' ','B','Y',' ', '`','S','e','q','u','e','n','c','e','`', 0};
+ if (!list_empty(&package->files)) + return ERROR_SUCCESS; + rc = MSI_DatabaseOpenViewW(package->db, Query, &view); if (rc != ERROR_SUCCESS) return ERROR_SUCCESS; @@ -1327,16 +1330,16 @@ static UINT load_all_files(MSIPACKAGE *p
/* - * I am not doing any of the costing functionality yet. + * I am not doing any of the costing functionality yet. * Mostly looking at doing the Component and Feature loading * * The native MSI does A LOT of modification to tables here. Mostly adding - * a lot of temporary columns to the Feature and Component tables. + * a lot of temporary columns to the Feature and Component tables. * * note: Native msi also tracks the short filename. But I am only going to * track the long ones. Also looking at this directory table * it appears that the directory table does not get the parents - * resolved base on property only based on their entries in the + * resolved base on property only based on their entries in the * directory table. */ static UINT ACTION_CostInitialize(MSIPACKAGE *package) @@ -1353,7 +1356,7 @@ static UINT ACTION_CostInitialize(MSIPAC
if ( 1 == msi_get_property_int( package, szCosting, 0 ) ) return ERROR_SUCCESS; - + MSI_SetPropertyW(package, szCosting, szZero); MSI_SetPropertyW(package, cszRootDrive , c_colon);
@@ -1361,8 +1364,11 @@ static UINT ACTION_CostInitialize(MSIPAC if (rc != ERROR_SUCCESS) return rc;
- rc = MSI_IterateRecords(view, NULL, load_feature, package); - msiobj_release(&view->hdr); + if (list_empty(&package->features)) + { + rc = MSI_IterateRecords(view, NULL, load_feature, package); + msiobj_release(&view->hdr); + }
load_all_files(package);