Module: wine Branch: master Commit: ef05072e27e3cd3e2eb1a8bee92eb0ea73233126 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ef05072e27e3cd3e2eb1a8bee9...
Author: Huw Davies huw@codeweavers.com Date: Wed Feb 9 13:10:32 2011 +0000
oleaut32: Rewrite ITypeInfo_GetDocumentation proxy/stub to return only the information that is requested.
---
dlls/oleaut32/usrmarshal.c | 66 ++++++++++++++++++++++---------------------- 1 files changed, 33 insertions(+), 33 deletions(-)
diff --git a/dlls/oleaut32/usrmarshal.c b/dlls/oleaut32/usrmarshal.c index 002c2b7..f83b908 100644 --- a/dlls/oleaut32/usrmarshal.c +++ b/dlls/oleaut32/usrmarshal.c @@ -1651,49 +1651,49 @@ HRESULT __RPC_STUB ITypeInfo_Invoke_Stub( return E_FAIL; }
-HRESULT CALLBACK ITypeInfo_GetDocumentation_Proxy( - ITypeInfo* This, - MEMBERID memid, - BSTR* pBstrName, - BSTR* pBstrDocString, - DWORD* pdwHelpContext, - BSTR* pBstrHelpFile) +HRESULT CALLBACK ITypeInfo_GetDocumentation_Proxy(ITypeInfo *This, MEMBERID memid, + BSTR *name, BSTR *doc_string, + DWORD *help_context, BSTR *help_file) { - DWORD help_context; - BSTR name, doc_string, help_file; + DWORD dummy_help_context, flags = 0; + BSTR dummy_name, dummy_doc_string, dummy_help_file; HRESULT hr; - TRACE("(%p, %08x, %p, %p, %p, %p)\n", This, memid, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile); + TRACE("(%p, %08x, %p, %p, %p, %p)\n", This, memid, name, doc_string, help_context, help_file);
- /* FIXME: presumably refPtrFlags is supposed to be a bitmask of which ptrs we actually want? */ - hr = ITypeInfo_RemoteGetDocumentation_Proxy(This, memid, 0, &name, &doc_string, &help_context, &help_file); - if(SUCCEEDED(hr)) - { - if(pBstrName) *pBstrName = name; - else SysFreeString(name); + if(!name) name = &dummy_name; + else flags = 1;
- if(pBstrDocString) *pBstrDocString = doc_string; - else SysFreeString(doc_string); + if(!doc_string) doc_string = &dummy_doc_string; + else flags |= 2;
- if(pBstrHelpFile) *pBstrHelpFile = help_file; - else SysFreeString(help_file); + if(!help_context) help_context = &dummy_help_context; + else flags |= 4; + + if(!help_file) help_file = &dummy_help_file; + else flags |= 8; + + hr = ITypeInfo_RemoteGetDocumentation_Proxy(This, memid, flags, name, doc_string, help_context, help_file); + + /* We don't need to free the dummy BSTRs since the stub ensures that these will be NULLs. */
- if(pdwHelpContext) *pdwHelpContext = help_context; - } return hr; }
-HRESULT __RPC_STUB ITypeInfo_GetDocumentation_Stub( - ITypeInfo* This, - MEMBERID memid, - DWORD refPtrFlags, - BSTR* pBstrName, - BSTR* pBstrDocString, - DWORD* pdwHelpContext, - BSTR* pBstrHelpFile) +HRESULT __RPC_STUB ITypeInfo_GetDocumentation_Stub(ITypeInfo *This, MEMBERID memid, + DWORD flags, BSTR *name, BSTR *doc_string, + DWORD *help_context, BSTR *help_file) { - TRACE("(%p, %08x, %08x, %p, %p, %p, %p)\n", This, memid, refPtrFlags, pBstrName, pBstrDocString, - pdwHelpContext, pBstrHelpFile); - return ITypeInfo_GetDocumentation(This, memid, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile); + TRACE("(%p, %08x, %08x, %p, %p, %p, %p)\n", This, memid, flags, name, doc_string, help_context, help_file); + + *name = *doc_string = *help_file = NULL; + *help_context = 0; + + if(!(flags & 1)) name = NULL; + if(!(flags & 2)) doc_string = NULL; + if(!(flags & 4)) help_context = NULL; + if(!(flags & 8)) help_file = NULL; + + return ITypeInfo_GetDocumentation(This, memid, name, doc_string, help_context, help_file); }
HRESULT CALLBACK ITypeInfo_GetDllEntry_Proxy(