Module: wine Branch: master Commit: d527cd305b1aa251401c0968344db2c0acb3d64c URL: https://gitlab.winehq.org/wine/wine/-/commit/d527cd305b1aa251401c0968344db2c... Author: Hans Leidekker <hans(a)codeweavers.com> Date: Tue Jul 9 15:02:22 2024 +0200 msi: Load DrLocator table in ITERATE_AppSearch(). --- dlls/msi/appsearch.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dlls/msi/appsearch.c b/dlls/msi/appsearch.c index 5813549bdb5..88450087196 100644 --- a/dlls/msi/appsearch.c +++ b/dlls/msi/appsearch.c @@ -965,6 +965,8 @@ static UINT load_all_drlocators( MSIPACKAGE *package ) MSIQUERY *view; UINT r; + if (!list_empty( &package->drlocators )) return ERROR_SUCCESS; + r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `DrLocator`", &view ); if (r != ERROR_SUCCESS) return ERROR_SUCCESS; @@ -997,12 +999,10 @@ static UINT search_dr( MSIPACKAGE *package, WCHAR **app_value, struct signature WCHAR path[MAX_PATH], expanded[MAX_PATH], *parent = NULL; MSIDRLOCATOR *locator = NULL; DWORD attr; - UINT rc; + UINT rc = ERROR_SUCCESS; TRACE("%s\n", debugstr_w(sig->Name)); - if ((rc = load_all_drlocators( package ))) return rc; - *app_value = NULL; LIST_FOR_EACH_ENTRY( locator, &package->drlocators, MSIDRLOCATOR, entry ) @@ -1055,7 +1055,6 @@ static UINT search_dr( MSIPACKAGE *package, WCHAR **app_value, struct signature rc = search_directory( package, sig, path, locator->Depth, app_value ); done: - free_drlocators( package ); free( parent ); TRACE("returning %u\n", rc); return rc; @@ -1099,6 +1098,8 @@ static UINT ITERATE_AppSearch(MSIRECORD *row, LPVOID param) TRACE("%s %s\n", debugstr_w(propName), debugstr_w(sigName)); + if ((r = load_all_drlocators( package ))) return r; + r = search_sig_name( package, sigName, &sig, &value ); if (value) { @@ -1116,6 +1117,7 @@ static UINT ITERATE_AppSearch(MSIRECORD *row, LPVOID param) MSI_ProcessMessage(package, INSTALLMESSAGE_ACTIONDATA, uirow); msiobj_release( &uirow->hdr ); + free_drlocators( package ); return r; } @@ -1153,6 +1155,8 @@ static UINT ITERATE_CCPSearch(MSIRECORD *row, LPVOID param) TRACE("%s\n", debugstr_w(signature)); + if ((r = load_all_drlocators( package ))) return r; + search_sig_name( package, signature, &sig, &value ); if (value) { @@ -1163,6 +1167,7 @@ static UINT ITERATE_CCPSearch(MSIRECORD *row, LPVOID param) } free_signature(&sig); + free_drlocators( package ); return r; }