Mike McCormack : msi: Use MSI_QueryGetRecord in ACTION_AppSearchDr.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Nov 28 06:01:15 CST 2006
Module: wine
Branch: master
Commit: a0d0453501d8ebba5e6b8a7caba374accd8dcc1d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a0d0453501d8ebba5e6b8a7caba374accd8dcc1d
Author: Mike McCormack <mike at 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;
More information about the wine-cvs
mailing list