From: Hans Leidekker hans@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56952 --- dlls/msi/appsearch.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dlls/msi/appsearch.c b/dlls/msi/appsearch.c index 070f31c5227..5813549bdb5 100644 --- a/dlls/msi/appsearch.c +++ b/dlls/msi/appsearch.c @@ -953,7 +953,9 @@ static UINT load_drlocator( MSIRECORD *row, void *param )
locator->Parent = msi_dup_record_field( row, 2 ); locator->Path = msi_dup_record_field( row, 3 ); - locator->Depth = MSI_RecordGetInteger( row,4 ); + locator->Depth = MSI_RecordGetInteger( row, 4 ); + if (locator->Depth == MSI_NULL_INTEGER) locator->Depth = 0; + list_add_tail( &package->drlocators, &locator->entry ); return ERROR_SUCCESS; }
From: Hans Leidekker hans@codeweavers.com
--- 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; }