Module: wine Branch: master Commit: 9d1ddfaa47a80c7a1387c490ea4b2966ca89a32a URL: http://source.winehq.org/git/wine.git/?a=commit;h=9d1ddfaa47a80c7a1387c490ea...
Author: Huw Davies huw@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)