Huw Davies : msdaps: Implement IDBProperties_SetProperties proxy and stub.

Alexandre Julliard julliard at winehq.org
Mon Aug 24 10:09:27 CDT 2009


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Mon Aug 24 10:31:59 2009 +0100

msdaps: Implement IDBProperties_SetProperties proxy and stub.

---

 dlls/msdaps/Makefile.in  |    2 +-
 dlls/msdaps/usrmarshal.c |   48 ++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 45 insertions(+), 5 deletions(-)

diff --git a/dlls/msdaps/Makefile.in b/dlls/msdaps/Makefile.in
index d6f71a0..3eba6b2 100644
--- a/dlls/msdaps/Makefile.in
+++ b/dlls/msdaps/Makefile.in
@@ -3,7 +3,7 @@ TOPOBJDIR = ../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = msdaps.dll
-IMPORTS   = oleaut32 rpcrt4 kernel32 ntdll
+IMPORTS   = oleaut32 ole32 rpcrt4 kernel32 ntdll
 EXTRADEFS = -DREGISTER_PROXY_DLL -DPROXY_CLSID_IS="{ 0x06210e88, 0x01f5, 0x11d1, { 0xb5, 0x12, 0x00, 0x80, 0xc7, 0x81, 0xc3, 0x84 } }"
 
 EXTRA_OBJS = dlldata.o
diff --git a/dlls/msdaps/usrmarshal.c b/dlls/msdaps/usrmarshal.c
index 106340b..b690167 100644
--- a/dlls/msdaps/usrmarshal.c
+++ b/dlls/msdaps/usrmarshal.c
@@ -108,16 +108,56 @@ HRESULT __RPC_STUB IDBProperties_GetPropertyInfo_Stub(IDBProperties* This, ULONG
 
 HRESULT CALLBACK IDBProperties_SetProperties_Proxy(IDBProperties* This, ULONG cPropertySets, DBPROPSET rgPropertySets[])
 {
-    FIXME("(%p, %d, %p): stub\n", This, cPropertySets, rgPropertySets);
-    return E_NOTIMPL;
+    ULONG prop_set, prop, total_props = 0;
+    HRESULT hr;
+    IErrorInfo *error;
+    DBPROPSTATUS *status;
+
+    TRACE("(%p, %d, %p)\n", This, cPropertySets, rgPropertySets);
+
+    for(prop_set = 0; prop_set < cPropertySets; prop_set++)
+        total_props += rgPropertySets[prop_set].cProperties;
+
+    if(total_props == 0) return S_OK;
+
+    status = CoTaskMemAlloc(total_props * sizeof(*status));
+    if(!status) return E_OUTOFMEMORY;
+
+    hr = IDBProperties_RemoteSetProperties_Proxy(This, cPropertySets, rgPropertySets,
+                                                 total_props, status, &error);
+    if(error)
+    {
+        SetErrorInfo(0, error);
+        IErrorInfo_Release(error);
+    }
+
+    total_props = 0;
+    for(prop_set = 0; prop_set < cPropertySets; prop_set++)
+        for(prop = 0; prop < rgPropertySets[prop_set].cProperties; prop++)
+            rgPropertySets[prop_set].rgProperties[prop].dwStatus = status[total_props++];
+
+    CoTaskMemFree(status);
+    return hr;
 }
 
 HRESULT __RPC_STUB IDBProperties_SetProperties_Stub(IDBProperties* This, ULONG cPropertySets, DBPROPSET *rgPropertySets,
                                                     ULONG cTotalProps, DBPROPSTATUS *rgPropStatus, IErrorInfo **ppErrorInfoRem)
 {
-    FIXME("(%p, %d, %p, %d, %p, %p): stub\n", This, cPropertySets, rgPropertySets, cTotalProps,
+    ULONG prop_set, prop, total_props = 0;
+    HRESULT hr;
+
+    TRACE("(%p, %d, %p, %d, %p, %p)\n", This, cPropertySets, rgPropertySets, cTotalProps,
           rgPropStatus, ppErrorInfoRem);
-    return E_NOTIMPL;
+
+    *ppErrorInfoRem = NULL;
+    hr = IDBProperties_SetProperties(This, cPropertySets, rgPropertySets);
+    if(FAILED(hr)) GetErrorInfo(0, ppErrorInfoRem);
+
+    for(prop_set = 0; prop_set < cPropertySets; prop_set++)
+        for(prop = 0; prop < rgPropertySets[prop_set].cProperties; prop++)
+            rgPropStatus[total_props++] = rgPropertySets[prop_set].rgProperties[prop].dwStatus;
+
+    return hr;
 }
 
 HRESULT CALLBACK IDBInitialize_Initialize_Proxy(IDBInitialize* This)




More information about the wine-cvs mailing list