[PATCH 1/3] oledb32: Added a stub IDataInitialize for DataLinks object

Nikolay Sivov nsivov at codeweavers.com
Wed Feb 1 17:03:18 CST 2017


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/oledb32/dslocator.c      | 87 ++++++++++++++++++++++++++++++++++++++++++-
 dlls/oledb32/tests/database.c | 11 ++++++
 2 files changed, 97 insertions(+), 1 deletion(-)

diff --git a/dlls/oledb32/dslocator.c b/dlls/oledb32/dslocator.c
index 4af4ab4141..0d1a4a3198 100644
--- a/dlls/oledb32/dslocator.c
+++ b/dlls/oledb32/dslocator.c
@@ -39,7 +39,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(oledb);
 
 typedef struct DSLocatorImpl
 {
-    IDataSourceLocator     IDataSourceLocator_iface;
+    IDataSourceLocator IDataSourceLocator_iface;
+    IDataInitialize IDataInitialize_iface;
     LONG ref;
 
     HWND hwnd;
@@ -50,6 +51,10 @@ static inline DSLocatorImpl *impl_from_IDataSourceLocator( IDataSourceLocator *i
     return CONTAINING_RECORD(iface, DSLocatorImpl, IDataSourceLocator_iface);
 }
 
+static inline DSLocatorImpl *impl_from_IDataInitialize(IDataInitialize *iface)
+{
+    return CONTAINING_RECORD(iface, DSLocatorImpl, IDataInitialize_iface);
+}
 
 static HRESULT WINAPI dslocator_QueryInterface(IDataSourceLocator *iface, REFIID riid, void **ppvoid)
 {
@@ -64,6 +69,10 @@ static HRESULT WINAPI dslocator_QueryInterface(IDataSourceLocator *iface, REFIID
     {
       *ppvoid = &This->IDataSourceLocator_iface;
     }
+    else if (IsEqualIID(riid, &IID_IDataInitialize))
+    {
+      *ppvoid = &This->IDataInitialize_iface;
+    }
 
     if(*ppvoid)
     {
@@ -191,6 +200,81 @@ static const IDataSourceLocatorVtbl DSLocatorVtbl =
     dslocator_PromptEdit
 };
 
+static HRESULT WINAPI datainitialize_QueryInterface(IDataInitialize *iface, REFIID riid, void **obj)
+{
+    DSLocatorImpl *This = impl_from_IDataInitialize(iface);
+    return IDataSourceLocator_QueryInterface(&This->IDataSourceLocator_iface, riid, obj);
+}
+
+static ULONG WINAPI datainitialize_AddRef(IDataInitialize *iface)
+{
+    DSLocatorImpl *This = impl_from_IDataInitialize(iface);
+    return IDataSourceLocator_AddRef(&This->IDataSourceLocator_iface);
+}
+
+static ULONG WINAPI datainitialize_Release(IDataInitialize *iface)
+{
+    DSLocatorImpl *This = impl_from_IDataInitialize(iface);
+    return IDataSourceLocator_Release(&This->IDataSourceLocator_iface);
+}
+
+static HRESULT WINAPI datainitialize_GetDataSource(IDataInitialize *iface,
+    IUnknown *outer, DWORD context, LPWSTR initstring, REFIID riid, IUnknown **datasource)
+{
+    FIXME("(%p)->(%p %#x %s %s %p): stub\n", iface, outer, context, debugstr_w(initstring), debugstr_guid(riid),
+        datasource);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI datainitialize_GetInitializationString(IDataInitialize *iface, IUnknown *datasource,
+    boolean include_password, LPWSTR *initstring)
+{
+    FIXME("(%p)->(%d %p): stub\n", iface, include_password, initstring);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI datainitialize_CreateDBInstance(IDataInitialize *iface, REFCLSID prov, IUnknown *outer,
+    DWORD clsctx, LPWSTR reserved, REFIID riid, IUnknown **datasource)
+{
+    FIXME("(%p)->(%s %p %#x %p %s %p): stub\n", iface, debugstr_guid(prov), outer, clsctx, reserved,
+        debugstr_guid(riid), datasource);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI datainitialize_CreateDBInstanceEx(IDataInitialize *iface, REFCLSID prov, IUnknown *outer,
+    DWORD clsctx, LPWSTR reserved, COSERVERINFO *server_info, DWORD cmq, MULTI_QI *results)
+{
+    FIXME("(%p)->(%s %p %#x %p %p %u %p): stub\n", iface, debugstr_guid(prov), outer, clsctx, reserved,
+        server_info, cmq, results);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI datainitialize_LoadStringFromStorage(IDataInitialize *iface, LPWSTR filename, LPWSTR *initstring)
+{
+    FIXME("(%p)->(%s %p): stub\n", iface, debugstr_w(filename), initstring);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI datainitialize_WriteStringToStorage(IDataInitialize *iface, LPWSTR filename, LPWSTR initstring,
+    DWORD disposition)
+{
+    FIXME("(%p)->(%s %s %#x): stub\n", iface, debugstr_w(filename), debugstr_w(initstring), disposition);
+    return E_NOTIMPL;
+}
+
+static const IDataInitializeVtbl ds_datainitialize_vtbl =
+{
+    datainitialize_QueryInterface,
+    datainitialize_AddRef,
+    datainitialize_Release,
+    datainitialize_GetDataSource,
+    datainitialize_GetInitializationString,
+    datainitialize_CreateDBInstance,
+    datainitialize_CreateDBInstanceEx,
+    datainitialize_LoadStringFromStorage,
+    datainitialize_WriteStringToStorage,
+};
+
 HRESULT create_dslocator(IUnknown *outer, void **obj)
 {
     DSLocatorImpl *This;
@@ -205,6 +289,7 @@ HRESULT create_dslocator(IUnknown *outer, void **obj)
     if(!This) return E_OUTOFMEMORY;
 
     This->IDataSourceLocator_iface.lpVtbl = &DSLocatorVtbl;
+    This->IDataInitialize_iface.lpVtbl = &ds_datainitialize_vtbl;
     This->ref = 1;
     This->hwnd = 0;
 
diff --git a/dlls/oledb32/tests/database.c b/dlls/oledb32/tests/database.c
index 44a2561a51..8d07cd36d5 100644
--- a/dlls/oledb32/tests/database.c
+++ b/dlls/oledb32/tests/database.c
@@ -855,6 +855,7 @@ static void test_dslocator(void)
     ok(hr == S_OK, "got %08x\n", hr);
     if(SUCCEEDED(hr))
     {
+        IDataInitialize *datainit, *datainit2;
         COMPATIBLE_LONG hwnd = 0;
 
         if (0) /* Crashes under Window 7 */
@@ -887,6 +888,16 @@ static void test_dslocator(void)
         ok(hr == S_OK, "got %08x\n", hr);
         ok(hwnd == 0, "got %p\n", (HWND)hwnd);
 
+        hr = IDataSourceLocator_QueryInterface(dslocator, &IID_IDataInitialize, (void **)&datainit);
+        ok(hr == S_OK, "got %08x\n", hr);
+
+        hr = IDataSourceLocator_QueryInterface(dslocator, &IID_IDataInitialize, (void **)&datainit2);
+        ok(hr == S_OK, "got %08x\n", hr);
+        ok(datainit == datainit2, "Got %p, previous %p\n", datainit, datainit2);
+
+        IDataInitialize_Release(datainit2);
+        IDataInitialize_Release(datainit);
+
         IDataSourceLocator_Release(dslocator);
     }
 }
-- 
2.11.0




More information about the wine-patches mailing list