Piotr Caban : msxml3: Added stub implementation of ISAXLocator.
Alexandre Julliard
julliard at winehq.org
Thu Jul 17 06:38:22 CDT 2008
Module: wine
Branch: master
Commit: d3e9ca7d0a058b67353dbc5123eb7ecc84a68cb0
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d3e9ca7d0a058b67353dbc5123eb7ecc84a68cb0
Author: Piotr Caban <piotr.caban at 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)
More information about the wine-cvs
mailing list