msxml3: Fix BSTR retval handling for IVBSAXLocator.

This commit is contained in:
Nikolay Sivov 2014-03-05 10:41:11 +04:00 committed by Alexandre Julliard
parent 7ca1ac7365
commit 17d1c0fbc7
2 changed files with 46 additions and 20 deletions

View File

@ -2080,14 +2080,13 @@ static ULONG WINAPI ivbsaxlocator_AddRef(IVBSAXLocator* iface)
{ {
saxlocator *This = impl_from_IVBSAXLocator( iface ); saxlocator *This = impl_from_IVBSAXLocator( iface );
TRACE("%p\n", This ); TRACE("%p\n", This );
return InterlockedIncrement( &This->ref ); return ISAXLocator_AddRef(&This->ISAXLocator_iface);
} }
static ULONG WINAPI ivbsaxlocator_Release( static ULONG WINAPI ivbsaxlocator_Release(IVBSAXLocator* iface)
IVBSAXLocator* iface)
{ {
saxlocator *This = impl_from_IVBSAXLocator( iface ); saxlocator *This = impl_from_IVBSAXLocator( iface );
return ISAXLocator_Release((ISAXLocator*)&This->IVBSAXLocator_iface); return ISAXLocator_Release(&This->ISAXLocator_iface);
} }
/*** IDispatch methods ***/ /*** IDispatch methods ***/
@ -2107,13 +2106,10 @@ static HRESULT WINAPI ivbsaxlocator_GetTypeInfo(
UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo ) UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo )
{ {
saxlocator *This = impl_from_IVBSAXLocator( iface ); saxlocator *This = impl_from_IVBSAXLocator( iface );
HRESULT hr;
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
hr = get_typeinfo(IVBSAXLocator_tid, ppTInfo); return get_typeinfo(IVBSAXLocator_tid, ppTInfo);
return hr;
} }
static HRESULT WINAPI ivbsaxlocator_GetIDsOfNames( static HRESULT WINAPI ivbsaxlocator_GetIDsOfNames(
@ -2179,7 +2175,7 @@ static HRESULT WINAPI ivbsaxlocator_get_columnNumber(
int *pnColumn) int *pnColumn)
{ {
saxlocator *This = impl_from_IVBSAXLocator( iface ); 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( static HRESULT WINAPI ivbsaxlocator_get_lineNumber(
@ -2187,25 +2183,45 @@ static HRESULT WINAPI ivbsaxlocator_get_lineNumber(
int *pnLine) int *pnLine)
{ {
saxlocator *This = impl_from_IVBSAXLocator( iface ); 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( static HRESULT WINAPI ivbsaxlocator_get_publicId(IVBSAXLocator* iface, BSTR *ret)
IVBSAXLocator* iface,
BSTR* publicId)
{ {
saxlocator *This = impl_from_IVBSAXLocator( iface ); saxlocator *This = impl_from_IVBSAXLocator( iface );
return ISAXLocator_getPublicId((ISAXLocator*)&This->IVBSAXLocator_iface, const WCHAR *publicidW;
(const WCHAR**)publicId); 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( static HRESULT WINAPI ivbsaxlocator_get_systemId(IVBSAXLocator* iface, BSTR *ret)
IVBSAXLocator* iface,
BSTR* systemId)
{ {
saxlocator *This = impl_from_IVBSAXLocator( iface ); saxlocator *This = impl_from_IVBSAXLocator( iface );
return ISAXLocator_getSystemId((ISAXLocator*)&This->IVBSAXLocator_iface, const WCHAR *systemidW;
(const WCHAR**)systemId); 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 = static const struct IVBSAXLocatorVtbl VBSAXLocatorVtbl =

View File

@ -1092,6 +1092,7 @@ static HRESULT WINAPI contentHandler_putDocumentLocator(
ISAXLocator *pLocator) ISAXLocator *pLocator)
{ {
struct call_entry call; struct call_entry call;
IUnknown *unk;
HRESULT hr; HRESULT hr;
locator = pLocator; locator = pLocator;
@ -1100,6 +1101,9 @@ static HRESULT WINAPI contentHandler_putDocumentLocator(
call.id = CH_PUTDOCUMENTLOCATOR; call.id = CH_PUTDOCUMENTLOCATOR;
add_call(sequences, CONTENT_HANDLER_INDEX, &call); add_call(sequences, CONTENT_HANDLER_INDEX, &call);
hr = ISAXLocator_QueryInterface(pLocator, &IID_IVBSAXLocator, (void**)&unk);
EXPECT_HR(hr, E_NOINTERFACE);
if (msxml_version >= 6) { if (msxml_version >= 6) {
ISAXAttributes *attr, *attr1; ISAXAttributes *attr, *attr1;
IMXAttributes *mxattr; IMXAttributes *mxattr;
@ -1113,6 +1117,12 @@ static HRESULT WINAPI contentHandler_putDocumentLocator(
EXPECT_REF(pLocator, 3); EXPECT_REF(pLocator, 3);
ok(attr == attr1, "got %p, %p\n", attr, attr1); 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); hr = ISAXAttributes_QueryInterface(attr, &IID_IMXAttributes, (void**)&mxattr);
EXPECT_HR(hr, E_NOINTERFACE); EXPECT_HR(hr, E_NOINTERFACE);