Module: wine Branch: master Commit: a0d0453501d8ebba5e6b8a7caba374accd8dcc1d URL: http://source.winehq.org/git/wine.git/?a=commit;h=a0d0453501d8ebba5e6b8a7cab...
Author: Mike McCormack mike@codeweavers.com Date: Tue Nov 28 17:46:05 2006 +0900
msi: Use MSI_QueryGetRecord in ACTION_AppSearchDr.
---
dlls/msi/appsearch.c | 123 +++++++++++++++++++++---------------------------- 1 files changed, 53 insertions(+), 70 deletions(-)
diff --git a/dlls/msi/appsearch.c b/dlls/msi/appsearch.c index 8f1e388..5c83fcc 100644 --- a/dlls/msi/appsearch.c +++ b/dlls/msi/appsearch.c @@ -775,87 +775,70 @@ static UINT ACTION_SearchDirectory(MSIPA static UINT ACTION_AppSearchSigName(MSIPACKAGE *package, LPCWSTR sigName, MSISIGNATURE *sig, LPWSTR *appValue);
-static UINT ACTION_AppSearchDr(MSIPACKAGE *package, LPWSTR *appValue, - MSISIGNATURE *sig) +static UINT ACTION_AppSearchDr(MSIPACKAGE *package, LPWSTR *appValue, MSISIGNATURE *sig) { - MSIQUERY *view; + static const WCHAR query[] = { + 's','e','l','e','c','t',' ','*',' ', + 'f','r','o','m',' ', + 'D','r','L','o','c','a','t','o','r',' ', + 'w','h','e','r','e',' ', + 'S','i','g','n','a','t','u','r','e','_',' ','=',' ', ''','%','s',''',0}; + LPWSTR parentName = NULL, path = NULL, parent = NULL; + WCHAR expanded[MAX_PATH]; + MSIRECORD *row; + int depth; UINT rc; - static const WCHAR ExecSeqQuery[] = { - 's','e','l','e','c','t',' ','*',' ', - 'f','r','o','m',' ', - 'D','r','L','o','c','a','t','o','r',' ', - 'w','h','e','r','e',' ','S','i','g','n','a','t','u','r','e','_',' ','=',' ', - ''','%','s',''',0};
- TRACE("(package %p, sig %p)\n", package, sig); - rc = MSI_OpenQuery(package->db, &view, ExecSeqQuery, sig->Name); - if (rc == ERROR_SUCCESS) - { - MSIRECORD *row = 0; - WCHAR expanded[MAX_PATH]; - LPWSTR parentName = NULL, path = NULL, parent = NULL; - int depth; + TRACE("%s\n", debugstr_w(sig->Name));
- rc = MSI_ViewExecute(view, 0); - if (rc != ERROR_SUCCESS) - { - TRACE("MSI_ViewExecute returned %d\n", rc); - goto end; - } - rc = MSI_ViewFetch(view,&row); - if (rc != ERROR_SUCCESS) - { - TRACE("MSI_ViewFetch returned %d\n", rc); - rc = ERROR_SUCCESS; - goto end; - } + *appValue = NULL;
- /* check whether parent is set */ - parentName = msi_dup_record_field(row,2); - if (parentName) - { - MSISIGNATURE parentSig; + row = MSI_QueryGetRecord( package->db, query, sig->Name ); + if (!row) + { + TRACE("failed to query DrLocator for %s\n", debugstr_w(sig->Name)); + return ERROR_SUCCESS; + }
- rc = ACTION_AppSearchSigName(package, parentName, &parentSig, - &parent); - ACTION_FreeSignature(&parentSig); - msi_free(parentName); - } - /* now look for path */ - path = msi_dup_record_field(row,3); - if (MSI_RecordIsNull(row,4)) - depth = 0; - else - depth = MSI_RecordGetInteger(row,4); - ACTION_ExpandAnyPath(package, path, expanded, - sizeof(expanded) / sizeof(expanded[0])); - msi_free(path); - if (parent) - { - path = msi_alloc((strlenW(parent) + strlenW(expanded) + 1) * sizeof(WCHAR)); - if (!path) - goto end; - strcpyW(path, parent); - strcatW(path, expanded); - } - else - path = expanded; - rc = ACTION_SearchDirectory(package, sig, path, depth, appValue); + /* check whether parent is set */ + parentName = msi_dup_record_field(row,2); + if (parentName) + { + MSISIGNATURE parentSig;
-end: - if (path != expanded) - msi_free(path); - msi_free(parent); - if (row) - msiobj_release(&row->hdr); - MSI_ViewClose(view); - msiobj_release(&view->hdr); + rc = ACTION_AppSearchSigName(package, parentName, &parentSig, &parent); + ACTION_FreeSignature(&parentSig); + msi_free(parentName); } + /* now look for path */ + path = msi_dup_record_field(row,3); + if (MSI_RecordIsNull(row,4)) + depth = 0; else + depth = MSI_RecordGetInteger(row,4); + ACTION_ExpandAnyPath(package, path, expanded, MAX_PATH); + msi_free(path); + if (parent) { - TRACE("MSI_OpenQuery returned %d\n", rc); - rc = ERROR_SUCCESS; + path = msi_alloc((strlenW(parent) + strlenW(expanded) + 1) * sizeof(WCHAR)); + if (!path) + { + rc = ERROR_OUTOFMEMORY; + goto end; + } + strcpyW(path, parent); + strcatW(path, expanded); } + else + path = expanded; + + rc = ACTION_SearchDirectory(package, sig, path, depth, appValue); + +end: + if (path != expanded) + msi_free(path); + msi_free(parent); + msiobj_release(&row->hdr);
TRACE("returning %d\n", rc); return rc;