Module: wine Branch: master Commit: 17d1c0fbc7e8423d71f1a4e47899e13f393d2759 URL: http://source.winehq.org/git/wine.git/?a=commit;h=17d1c0fbc7e8423d71f1a4e478...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Mar 5 10:41:11 2014 +0400
msxml3: Fix BSTR retval handling for IVBSAXLocator.
---
dlls/msxml3/saxreader.c | 56 ++++++++++++++++++++++++++--------------- dlls/msxml3/tests/saxreader.c | 10 ++++++++ 2 files changed, 46 insertions(+), 20 deletions(-)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index b59ce48..3ba1c0c 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -2080,14 +2080,13 @@ static ULONG WINAPI ivbsaxlocator_AddRef(IVBSAXLocator* iface) { saxlocator *This = impl_from_IVBSAXLocator( iface ); TRACE("%p\n", This ); - return InterlockedIncrement( &This->ref ); + return ISAXLocator_AddRef(&This->ISAXLocator_iface); }
-static ULONG WINAPI ivbsaxlocator_Release( - IVBSAXLocator* iface) +static ULONG WINAPI ivbsaxlocator_Release(IVBSAXLocator* iface) { saxlocator *This = impl_from_IVBSAXLocator( iface ); - return ISAXLocator_Release((ISAXLocator*)&This->IVBSAXLocator_iface); + return ISAXLocator_Release(&This->ISAXLocator_iface); }
/*** IDispatch methods ***/ @@ -2107,13 +2106,10 @@ static HRESULT WINAPI ivbsaxlocator_GetTypeInfo( UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo ) { saxlocator *This = impl_from_IVBSAXLocator( iface ); - HRESULT hr;
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
- hr = get_typeinfo(IVBSAXLocator_tid, ppTInfo); - - return hr; + return get_typeinfo(IVBSAXLocator_tid, ppTInfo); }
static HRESULT WINAPI ivbsaxlocator_GetIDsOfNames( @@ -2179,7 +2175,7 @@ static HRESULT WINAPI ivbsaxlocator_get_columnNumber( int *pnColumn) { saxlocator *This = impl_from_IVBSAXLocator( iface ); - return ISAXLocator_getColumnNumber((ISAXLocator*)&This->IVBSAXLocator_iface, pnColumn); + return ISAXLocator_getColumnNumber(&This->ISAXLocator_iface, pnColumn); }
static HRESULT WINAPI ivbsaxlocator_get_lineNumber( @@ -2187,25 +2183,45 @@ static HRESULT WINAPI ivbsaxlocator_get_lineNumber( int *pnLine) { saxlocator *This = impl_from_IVBSAXLocator( iface ); - return ISAXLocator_getLineNumber((ISAXLocator*)&This->IVBSAXLocator_iface, pnLine); + return ISAXLocator_getLineNumber(&This->ISAXLocator_iface, pnLine); }
-static HRESULT WINAPI ivbsaxlocator_get_publicId( - IVBSAXLocator* iface, - BSTR* publicId) +static HRESULT WINAPI ivbsaxlocator_get_publicId(IVBSAXLocator* iface, BSTR *ret) { saxlocator *This = impl_from_IVBSAXLocator( iface ); - return ISAXLocator_getPublicId((ISAXLocator*)&This->IVBSAXLocator_iface, - (const WCHAR**)publicId); + const WCHAR *publicidW; + HRESULT hr; + + TRACE("(%p)->(%p)\n", This, ret); + + if (!ret) + return E_POINTER; + + *ret = NULL; + hr = ISAXLocator_getPublicId(&This->ISAXLocator_iface, &publicidW); + if (FAILED(hr)) + return hr; + + return return_bstr(publicidW, ret); }
-static HRESULT WINAPI ivbsaxlocator_get_systemId( - IVBSAXLocator* iface, - BSTR* systemId) +static HRESULT WINAPI ivbsaxlocator_get_systemId(IVBSAXLocator* iface, BSTR *ret) { saxlocator *This = impl_from_IVBSAXLocator( iface ); - return ISAXLocator_getSystemId((ISAXLocator*)&This->IVBSAXLocator_iface, - (const WCHAR**)systemId); + const WCHAR *systemidW; + HRESULT hr; + + TRACE("(%p)->(%p)\n", This, ret); + + if (!ret) + return E_POINTER; + + *ret = NULL; + hr = ISAXLocator_getSystemId(&This->ISAXLocator_iface, &systemidW); + if (FAILED(hr)) + return hr; + + return return_bstr(systemidW, ret); }
static const struct IVBSAXLocatorVtbl VBSAXLocatorVtbl = diff --git a/dlls/msxml3/tests/saxreader.c b/dlls/msxml3/tests/saxreader.c index ae003ee..5891b55 100644 --- a/dlls/msxml3/tests/saxreader.c +++ b/dlls/msxml3/tests/saxreader.c @@ -1092,6 +1092,7 @@ static HRESULT WINAPI contentHandler_putDocumentLocator( ISAXLocator *pLocator) { struct call_entry call; + IUnknown *unk; HRESULT hr;
locator = pLocator; @@ -1100,6 +1101,9 @@ static HRESULT WINAPI contentHandler_putDocumentLocator( call.id = CH_PUTDOCUMENTLOCATOR; add_call(sequences, CONTENT_HANDLER_INDEX, &call);
+ hr = ISAXLocator_QueryInterface(pLocator, &IID_IVBSAXLocator, (void**)&unk); + EXPECT_HR(hr, E_NOINTERFACE); + if (msxml_version >= 6) { ISAXAttributes *attr, *attr1; IMXAttributes *mxattr; @@ -1113,6 +1117,12 @@ static HRESULT WINAPI contentHandler_putDocumentLocator( EXPECT_REF(pLocator, 3); ok(attr == attr1, "got %p, %p\n", attr, attr1);
+ hr = ISAXAttributes_QueryInterface(attr, &IID_IVBSAXAttributes, (void**)&unk); + EXPECT_HR(hr, E_NOINTERFACE); + + hr = ISAXLocator_QueryInterface(pLocator, &IID_IVBSAXAttributes, (void**)&unk); + EXPECT_HR(hr, E_NOINTERFACE); + hr = ISAXAttributes_QueryInterface(attr, &IID_IMXAttributes, (void**)&mxattr); EXPECT_HR(hr, E_NOINTERFACE);