[PATCH 4/6] msi: Make MsiDatabaseOpenView() RPC-compatible.
Zebediah Figura
z.figura12 at gmail.com
Wed Apr 18 18:40:04 CDT 2018
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/msi/database.c | 5 ++---
dlls/msi/msiquery.c | 27 +++++++++++----------------
dlls/msi/tests/custom.c | 14 +++++++++++++-
dlls/msi/winemsi.idl | 2 +-
4 files changed, 27 insertions(+), 21 deletions(-)
diff --git a/dlls/msi/database.c b/dlls/msi/database.c
index c1309a5..c1cf493 100644
--- a/dlls/msi/database.c
+++ b/dlls/msi/database.c
@@ -1923,8 +1923,7 @@ HRESULT __cdecl remote_DatabaseGetSummaryInformation(MSIHANDLE db, UINT updateco
return HRESULT_FROM_WIN32(r);
}
-HRESULT __cdecl remote_DatabaseOpenView(MSIHANDLE db, LPCWSTR query, MSIHANDLE *view)
+UINT __cdecl remote_DatabaseOpenView(MSIHANDLE db, LPCWSTR query, MSIHANDLE *view)
{
- UINT r = MsiDatabaseOpenViewW(db, query, view);
- return HRESULT_FROM_WIN32(r);
+ return MsiDatabaseOpenViewW(db, query, view);
}
diff --git a/dlls/msi/msiquery.c b/dlls/msi/msiquery.c
index fb99c96..9518c59 100644
--- a/dlls/msi/msiquery.c
+++ b/dlls/msi/msiquery.c
@@ -116,9 +116,6 @@ UINT MSI_DatabaseOpenViewW(MSIDATABASE *db,
TRACE("%s %p\n", debugstr_w(szQuery), pView);
- if( !szQuery)
- return ERROR_INVALID_PARAMETER;
-
/* pre allocate a handle to hold a pointer to the view */
query = alloc_msiobject( MSIHANDLETYPE_VIEW, sizeof (MSIQUERY),
MSI_CloseView );
@@ -247,26 +244,24 @@ UINT WINAPI MsiDatabaseOpenViewW(MSIHANDLE hdb,
TRACE("%s %p\n", debugstr_w(szQuery), phView);
+ if (!phView)
+ return ERROR_INVALID_PARAMETER;
+
+ if (!szQuery)
+ return ERROR_BAD_QUERY_SYNTAX;
+
db = msihandle2msiinfo( hdb, MSIHANDLETYPE_DATABASE );
if( !db )
{
- MSIHANDLE remote;
- HRESULT hr;
+ MSIHANDLE remote, remote_view;
if (!(remote = msi_get_remote(hdb)))
return ERROR_INVALID_HANDLE;
- hr = remote_DatabaseOpenView(remote, szQuery, phView);
-
- if (FAILED(hr))
- {
- if (HRESULT_FACILITY(hr) == FACILITY_WIN32)
- return HRESULT_CODE(hr);
-
- return ERROR_FUNCTION_FAILED;
- }
-
- return ERROR_SUCCESS;
+ ret = remote_DatabaseOpenView(remote, szQuery, &remote_view);
+ if (!ret)
+ *phView = alloc_msi_remote_handle(remote_view);
+ return ret;
}
ret = MSI_DatabaseOpenViewW( db, szQuery, &query );
diff --git a/dlls/msi/tests/custom.c b/dlls/msi/tests/custom.c
index 0756994..e7a56ae 100644
--- a/dlls/msi/tests/custom.c
+++ b/dlls/msi/tests/custom.c
@@ -243,7 +243,7 @@ static void test_props(MSIHANDLE hinst)
static void test_db(MSIHANDLE hinst)
{
- MSIHANDLE hdb;
+ MSIHANDLE hdb, view;
UINT r;
hdb = MsiGetActiveDatabase(hinst);
@@ -252,6 +252,18 @@ static void test_db(MSIHANDLE hinst)
r = MsiDatabaseIsTablePersistentA(hdb, "Test");
ok(hinst, r == MSICONDITION_TRUE, "got %u\n", r);
+ r = MsiDatabaseOpenViewA(hdb, NULL, &view);
+ ok(hinst, r == ERROR_BAD_QUERY_SYNTAX, "got %u\n", r);
+
+ r = MsiDatabaseOpenViewA(hdb, "SELECT * FROM `Test`", NULL);
+ ok(hinst, r == ERROR_INVALID_PARAMETER, "got %u\n", r);
+
+ r = MsiDatabaseOpenViewA(hdb, "SELECT * FROM `Test`", &view);
+ ok(hinst, !r, "got %u\n", r);
+
+ r = MsiCloseHandle(view);
+ ok(hinst, !r, "got %u\n", r);
+
r = MsiCloseHandle(hdb);
ok(hinst, !r, "got %u\n", r);
}
diff --git a/dlls/msi/winemsi.idl b/dlls/msi/winemsi.idl
index 86f03e3..54e6eb8 100644
--- a/dlls/msi/winemsi.idl
+++ b/dlls/msi/winemsi.idl
@@ -59,7 +59,7 @@ interface IWineMsiRemote
MSICONDITION remote_DatabaseIsTablePersistent( [in] MSIHANDLE db, [in] LPCWSTR table );
HRESULT remote_DatabaseGetPrimaryKeys( [in] MSIHANDLE db, [in] LPCWSTR table, [out] MSIHANDLE *keys );
HRESULT remote_DatabaseGetSummaryInformation( [in] MSIHANDLE db, [in] UINT updatecount, [out] MSIHANDLE *suminfo );
- HRESULT remote_DatabaseOpenView( [in] MSIHANDLE db, [in] LPCWSTR query, [out] MSIHANDLE *view );
+ UINT remote_DatabaseOpenView( [in] MSIHANDLE db, [in, string] LPCWSTR query, [out] MSIHANDLE *view );
MSIHANDLE remote_GetActiveDatabase( [in] MSIHANDLE hinst );
UINT remote_GetProperty( [in] MSIHANDLE hinst, [in, string] LPCWSTR property, [out, string] LPWSTR *value, [out] DWORD *size );
--
2.7.4
More information about the wine-devel
mailing list