msi: Only load the features and files tables once.

This commit is contained in:
Mike McCormack 2006-07-19 17:01:07 +09:00 committed by Alexandre Julliard
parent 0260b26962
commit 9a9195d6e4

View File

@ -1315,6 +1315,9 @@ static UINT load_all_files(MSIPACKAGE *package)
'`','F','i','l','e','`',' ', 'O','R','D','E','R',' ','B','Y',' ', '`','F','i','l','e','`',' ', 'O','R','D','E','R',' ','B','Y',' ',
'`','S','e','q','u','e','n','c','e','`', 0}; '`','S','e','q','u','e','n','c','e','`', 0};
if (!list_empty(&package->files))
return ERROR_SUCCESS;
rc = MSI_DatabaseOpenViewW(package->db, Query, &view); rc = MSI_DatabaseOpenViewW(package->db, Query, &view);
if (rc != ERROR_SUCCESS) if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS; return ERROR_SUCCESS;
@ -1327,16 +1330,16 @@ static UINT load_all_files(MSIPACKAGE *package)
/* /*
* 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 * Mostly looking at doing the Component and Feature loading
* *
* The native MSI does A LOT of modification to tables here. Mostly adding * 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 * note: Native msi also tracks the short filename. But I am only going to
* track the long ones. Also looking at this directory table * track the long ones. Also looking at this directory table
* it appears that the directory table does not get the parents * 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. * directory table.
*/ */
static UINT ACTION_CostInitialize(MSIPACKAGE *package) static UINT ACTION_CostInitialize(MSIPACKAGE *package)
@ -1353,7 +1356,7 @@ static UINT ACTION_CostInitialize(MSIPACKAGE *package)
if ( 1 == msi_get_property_int( package, szCosting, 0 ) ) if ( 1 == msi_get_property_int( package, szCosting, 0 ) )
return ERROR_SUCCESS; return ERROR_SUCCESS;
MSI_SetPropertyW(package, szCosting, szZero); MSI_SetPropertyW(package, szCosting, szZero);
MSI_SetPropertyW(package, cszRootDrive , c_colon); MSI_SetPropertyW(package, cszRootDrive , c_colon);
@ -1361,8 +1364,11 @@ static UINT ACTION_CostInitialize(MSIPACKAGE *package)
if (rc != ERROR_SUCCESS) if (rc != ERROR_SUCCESS)
return rc; return rc;
rc = MSI_IterateRecords(view, NULL, load_feature, package); if (list_empty(&package->features))
msiobj_release(&view->hdr); {
rc = MSI_IterateRecords(view, NULL, load_feature, package);
msiobj_release(&view->hdr);
}
load_all_files(package); load_all_files(package);