Module: wine Branch: master Commit: d3e9ca7d0a058b67353dbc5123eb7ecc84a68cb0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d3e9ca7d0a058b67353dbc5123...
Author: Piotr Caban piotr.caban@gmail.com Date: Thu Jul 17 00:40:32 2008 +0200
msxml3: Added stub implementation of ISAXLocator.
---
dlls/msxml3/saxreader.c | 137 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 137 insertions(+), 0 deletions(-)
diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c index abb2168..cda75b6 100644 --- a/dlls/msxml3/saxreader.c +++ b/dlls/msxml3/saxreader.c @@ -2,6 +2,7 @@ * SAX Reader implementation * * Copyright 2008 Alistair Leslie-Hughes + * Copyright 2008 Piotr Caban * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -54,6 +55,13 @@ typedef struct _saxreader xmlSAXHandler sax; } saxreader;
+typedef struct _saxlocator +{ + const struct ISAXLocatorVtbl *lpSAXLocatorVtbl; + LONG ref; + saxreader *saxreader; +} saxlocator; + static inline saxreader *impl_from_IVBSAXXMLReader( IVBSAXXMLReader *iface ) { return (saxreader *)((char*)iface - FIELD_OFFSET(saxreader, lpVtbl)); @@ -64,6 +72,135 @@ static inline saxreader *impl_from_ISAXXMLReader( ISAXXMLReader *iface ) return (saxreader *)((char*)iface - FIELD_OFFSET(saxreader, lpSAXXMLReaderVtbl)); }
+static inline saxlocator *impl_from_ISAXLocator( ISAXLocator *iface ) +{ + return (saxlocator *)((char*)iface - FIELD_OFFSET(saxlocator, lpSAXLocatorVtbl)); +} + +/*** ISAXLocator interface ***/ +/*** IUnknown methods ***/ +static HRESULT WINAPI isaxlocator_QueryInterface(ISAXLocator* iface, REFIID riid, void **ppvObject) +{ + saxlocator *This = impl_from_ISAXLocator( iface ); + + TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject ); + + *ppvObject = NULL; + + if ( IsEqualGUID( riid, &IID_IUnknown ) || + IsEqualGUID( riid, &IID_ISAXLocator )) + { + *ppvObject = iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + + ISAXLocator_AddRef( iface ); + + return S_OK; +} + +static ULONG WINAPI isaxlocator_AddRef(ISAXLocator* iface) +{ + saxlocator *This = impl_from_ISAXLocator( iface ); + TRACE("%p\n", This ); + return InterlockedIncrement( &This->ref ); +} + +static ULONG WINAPI isaxlocator_Release( + ISAXLocator* iface) +{ + saxlocator *This = impl_from_ISAXLocator( iface ); + LONG ref; + + TRACE("%p\n", This ); + + ref = InterlockedDecrement( &This->ref ); + if ( ref == 0 ) + { + ISAXXMLReader_Release((ISAXXMLReader*)&This->saxreader->lpSAXXMLReaderVtbl); + HeapFree( GetProcessHeap(), 0, This ); + } + + return ref; +} + +/*** ISAXLocator methods ***/ +static HRESULT WINAPI isaxlocator_getColumnNumber( + ISAXLocator* iface, + int *pnColumn) +{ + saxlocator *This = impl_from_ISAXLocator( iface ); + + FIXME("(%p)->(%p) stub\n", This, pnColumn); + return E_NOTIMPL; +} + +static HRESULT WINAPI isaxlocator_getLineNumber( + ISAXLocator* iface, + int *pnLine) +{ + saxlocator *This = impl_from_ISAXLocator( iface ); + + FIXME("(%p)->(%p) stub\n", This, pnLine); + return E_NOTIMPL; +} + +static HRESULT WINAPI isaxlocator_getPublicId( + ISAXLocator* iface, + const WCHAR ** ppwchPublicId) +{ + saxlocator *This = impl_from_ISAXLocator( iface ); + + FIXME("(%p)->(%p) stub\n", This, ppwchPublicId); + return E_NOTIMPL; +} + +static HRESULT WINAPI isaxlocator_getSystemId( + ISAXLocator* iface, + const WCHAR ** ppwchSystemId) +{ + saxlocator *This = impl_from_ISAXLocator( iface ); + + FIXME("(%p)->(%p) stub\n", This, ppwchSystemId); + return E_NOTIMPL; +} + +static const struct ISAXLocatorVtbl isaxlocator_vtbl = +{ + isaxlocator_QueryInterface, + isaxlocator_AddRef, + isaxlocator_Release, + isaxlocator_getColumnNumber, + isaxlocator_getLineNumber, + isaxlocator_getPublicId, + isaxlocator_getSystemId +}; + +static HRESULT SAXLocator_create(saxreader *reader, saxlocator **ppsaxlocator) +{ + saxlocator *locator; + + locator = HeapAlloc( GetProcessHeap(), 0, sizeof (*locator) ); + if( !locator ) + return E_OUTOFMEMORY; + + locator->lpSAXLocatorVtbl = &isaxlocator_vtbl; + locator->ref = 1; + + locator->saxreader = reader; + ISAXXMLReader_AddRef((ISAXXMLReader*)&reader->lpSAXXMLReaderVtbl); + + *ppsaxlocator = locator; + + TRACE("returning %p\n", *ppsaxlocator); + + return S_OK; +} + /*** IVBSAXXMLReader interface ***/ /*** IUnknown methods ***/ static HRESULT WINAPI saxxmlreader_QueryInterface(IVBSAXXMLReader* iface, REFIID riid, void **ppvObject)