Huw Davies : msdaps: Add support for remoting IRowset_ReleaseRows.

Alexandre Julliard julliard at winehq.org
Thu Feb 4 11:11:04 CST 2010


Module: wine
Branch: master
Commit: e44206d102c624ac80a86b8a6da16a5146049e1f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e44206d102c624ac80a86b8a6da16a5146049e1f

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu Feb  4 11:55:36 2010 +0000

msdaps: Add support for remoting IRowset_ReleaseRows.

---

 dlls/msdaps/row_server.c |   37 +++++++++++++++++++++++++++++++++----
 1 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/dlls/msdaps/row_server.c b/dlls/msdaps/row_server.c
index 1dea799..22088b7 100644
--- a/dlls/msdaps/row_server.c
+++ b/dlls/msdaps/row_server.c
@@ -285,8 +285,19 @@ static HRESULT WINAPI server_ReleaseRows(IWineRowServer* iface, DBCOUNTITEM cRow
                                          DBROWOPTIONS rgRowOptions[], DBREFCOUNT rgRefCounts[], DBROWSTATUS rgRowStatus[])
 {
     server *This = impl_from_IWineRowServer(iface);
-    FIXME("(%p)->(%d, %p, %p, %p, %p): stub\n", This, cRows, rghRows, rgRowOptions, rgRefCounts, rgRowStatus);
-    return E_NOTIMPL;
+    IRowset *rowset;
+    HRESULT hr;
+
+    TRACE("(%p)->(%d, %p, %p, %p, %p)\n", This, cRows, rghRows, rgRowOptions, rgRefCounts, rgRowStatus);
+
+    hr = IUnknown_QueryInterface(This->inner_unk, &IID_IRowset, (void**)&rowset);
+    if(FAILED(hr)) return hr;
+
+    hr = IRowset_ReleaseRows(rowset, cRows, rghRows, rgRowOptions, rgRefCounts, rgRowStatus);
+    IRowset_Release(rowset);
+
+    TRACE("returning %08x\n", hr);
+    return hr;
 }
 
 static HRESULT WINAPI server_RestartPosition(IWineRowServer* iface, HCHAPTER hReserved)
@@ -660,10 +671,28 @@ static HRESULT WINAPI rowset_ReleaseRows(IRowset *iface, DBCOUNTITEM cRows, cons
                                          DBROWOPTIONS rgRowOptions[], DBREFCOUNT rgRefCounts[], DBROWSTATUS rgRowStatus[])
 {
     rowset_proxy *This = impl_from_IRowset(iface);
+    HRESULT hr;
+    DBROWOPTIONS *options = rgRowOptions;
+    DBREFCOUNT *refs = rgRefCounts;
+    DBROWSTATUS *status = rgRowStatus;
 
-    FIXME("(%p)->(%d, %p, %p, %p, %p): stub\n", This, cRows, rghRows, rgRowOptions, rgRefCounts, rgRowStatus);
+    TRACE("(%p)->(%d, %p, %p, %p, %p)\n", This, cRows, rghRows, rgRowOptions, rgRefCounts, rgRowStatus);
 
-    return E_NOTIMPL;
+    if(!options)
+    {
+        options = CoTaskMemAlloc(cRows * sizeof(options[0]));
+        memset(options, 0, cRows * sizeof(options[0]));
+    }
+    if(!refs) refs = CoTaskMemAlloc(cRows * sizeof(refs[0]));
+    if(!status) status = CoTaskMemAlloc(cRows * sizeof(status[0]));
+
+    hr = IWineRowServer_ReleaseRows(This->server, cRows, rghRows, options, refs, status);
+
+    if(status != rgRowStatus) CoTaskMemFree(status);
+    if(refs != rgRefCounts) CoTaskMemFree(refs);
+    if(options != rgRowOptions) CoTaskMemFree(options);
+
+    return hr;
 }
 
 static HRESULT WINAPI rowset_RestartPosition(IRowset* iface, HCHAPTER hReserved)




More information about the wine-cvs mailing list