Piotr Caban : msxml3: Added stub implementation of ISAXAttributes.

Alexandre Julliard julliard at winehq.org
Mon Jul 28 08:07:19 CDT 2008


Module: wine
Branch: master
Commit: 5816c3808e72e528355d1c501681763442680140
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5816c3808e72e528355d1c501681763442680140

Author: Piotr Caban <piotr.caban at gmail.com>
Date:   Sun Jul 27 19:55:05 2008 +0200

msxml3: Added stub implementation of ISAXAttributes.

---

 dlls/msxml3/saxreader.c |  280 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 279 insertions(+), 1 deletions(-)

diff --git a/dlls/msxml3/saxreader.c b/dlls/msxml3/saxreader.c
index ce27496..8ec1e46 100644
--- a/dlls/msxml3/saxreader.c
+++ b/dlls/msxml3/saxreader.c
@@ -69,6 +69,12 @@ typedef struct _saxlocator
     int column;
 } saxlocator;
 
+typedef struct _saxattributes
+{
+    const struct ISAXAttributesVtbl *lpSAXAttributesVtbl;
+    LONG ref;
+} saxattributes;
+
 static inline saxreader *impl_from_IVBSAXXMLReader( IVBSAXXMLReader *iface )
 {
     return (saxreader *)((char*)iface - FIELD_OFFSET(saxreader, lpVtbl));
@@ -84,6 +90,11 @@ static inline saxlocator *impl_from_ISAXLocator( ISAXLocator *iface )
     return (saxlocator *)((char*)iface - FIELD_OFFSET(saxlocator, lpSAXLocatorVtbl));
 }
 
+static inline saxattributes *impl_from_ISAXAttributes( ISAXAttributes *iface )
+{
+    return (saxattributes *)((char*)iface - FIELD_OFFSET(saxattributes, lpSAXAttributesVtbl));
+}
+
 
 static void format_error_message_from_id(saxlocator *This, HRESULT hr)
 {
@@ -134,6 +145,268 @@ static void update_position(saxlocator *This, xmlChar *end)
     }
 }
 
+/*** ISAXAttributes interface ***/
+/*** IUnknown methods ***/
+static HRESULT WINAPI isaxattributes_QueryInterface(
+        ISAXAttributes* iface,
+        REFIID riid,
+        void **ppvObject)
+{
+    saxattributes *This = impl_from_ISAXAttributes(iface);
+
+    TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+
+    *ppvObject = NULL;
+
+    if (IsEqualGUID(riid, &IID_IUnknown) ||
+            IsEqualGUID(riid, &IID_ISAXAttributes))
+    {
+        *ppvObject = iface;
+    }
+    else
+    {
+        FIXME("interface %s not implemented\n", debugstr_guid(riid));
+        return E_NOINTERFACE;
+    }
+
+    ISAXAttributes_AddRef(iface);
+
+    return S_OK;
+}
+
+static ULONG WINAPI isaxattributes_AddRef(ISAXAttributes* iface)
+{
+    saxattributes *This = impl_from_ISAXAttributes(iface);
+    TRACE("%p\n", This);
+    return InterlockedIncrement(&This->ref);
+}
+
+static ULONG WINAPI isaxattributes_Release(ISAXAttributes* iface)
+{
+    saxattributes *This = impl_from_ISAXAttributes(iface);
+    LONG ref;
+
+    TRACE("%p\n", This);
+
+    ref = InterlockedDecrement(&This->ref);
+    if (ref==0)
+    {
+        HeapFree(GetProcessHeap(), 0, This);
+    }
+
+    return ref;
+}
+
+/*** ISAXAttributes methods ***/
+static HRESULT WINAPI isaxattributes_getLength(
+        ISAXAttributes* iface,
+        int *length)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p) stub\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getURI(
+        ISAXAttributes* iface,
+        int nIndex,
+        const WCHAR **pUrl,
+        int *pUriSize)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%d) stub\n", This, nIndex);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getLocalName(
+        ISAXAttributes* iface,
+        int nIndex,
+        const WCHAR **pLocalName,
+        int *pLocalNameLength)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%d) stub\n", This, nIndex);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getQName(
+        ISAXAttributes* iface,
+        int nIndex,
+        const WCHAR **pQName,
+        int *pQNameLength)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%d) stub\n", This, nIndex);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getName(
+        ISAXAttributes* iface,
+        int nIndex,
+        const WCHAR **pUri,
+        int *pUriLength,
+        const WCHAR **pLocalName,
+        int *pLocalNameSize,
+        const WCHAR **pQName,
+        int *pQNameLength)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%d) stub\n", This, nIndex);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getIndexFromName(
+        ISAXAttributes* iface,
+        const WCHAR *pUri,
+        int cUriLength,
+        const WCHAR *pLocalName,
+        int cocalNameLength,
+        int *index)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%s, %d, %s, %d) stub\n", This, debugstr_w(pUri), cUriLength,
+            debugstr_w(pLocalName), cocalNameLength);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getIndexFromQName(
+        ISAXAttributes* iface,
+        const WCHAR *pQName,
+        int nQNameLength,
+        int *index)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%s, %d) stub\n", This, debugstr_w(pQName), nQNameLength);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getType(
+        ISAXAttributes* iface,
+        int nIndex,
+        const WCHAR **pType,
+        int *pTypeLength)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%d) stub\n", This, nIndex);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getTypeFromName(
+        ISAXAttributes* iface,
+        const WCHAR *pUri,
+        int nUri,
+        const WCHAR *pLocalName,
+        int nLocalName,
+        const WCHAR **pType,
+        int *nType)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%s, %d, %s, %d) stub\n", This, debugstr_w(pUri), nUri,
+            debugstr_w(pLocalName), nLocalName);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getTypeFromQName(
+        ISAXAttributes* iface,
+        const WCHAR *pQName,
+        int nQName,
+        const WCHAR **pType,
+        int *nType)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%s, %d) stub\n", This, debugstr_w(pQName), nQName);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getValue(
+        ISAXAttributes* iface,
+        int nIndex,
+        const WCHAR **pValue,
+        int *nValue)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%d) stub\n", This, nIndex);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getValueFromName(
+        ISAXAttributes* iface,
+        const WCHAR *pUri,
+        int nUri,
+        const WCHAR *pLocalName,
+        int nLocalName,
+        const WCHAR **pValue,
+        int *nValue)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%s, %d, %s, %d) stub\n", This, debugstr_w(pUri), nUri,
+            debugstr_w(pLocalName), nLocalName);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI isaxattributes_getValueFromQName(
+        ISAXAttributes* iface,
+        const WCHAR *pQName,
+        int nQName,
+        const WCHAR **pValue,
+        int *nValue)
+{
+    saxattributes *This = impl_from_ISAXAttributes( iface );
+
+    FIXME("(%p)->(%s, %d) stub\n", This, debugstr_w(pQName), nQName);
+    return E_NOTIMPL;
+}
+
+static const struct ISAXAttributesVtbl isaxattributes_vtbl =
+{
+    isaxattributes_QueryInterface,
+    isaxattributes_AddRef,
+    isaxattributes_Release,
+    isaxattributes_getLength,
+    isaxattributes_getURI,
+    isaxattributes_getLocalName,
+    isaxattributes_getQName,
+    isaxattributes_getName,
+    isaxattributes_getIndexFromName,
+    isaxattributes_getIndexFromQName,
+    isaxattributes_getType,
+    isaxattributes_getTypeFromName,
+    isaxattributes_getTypeFromQName,
+    isaxattributes_getValue,
+    isaxattributes_getValueFromName,
+    isaxattributes_getValueFromQName
+};
+
+static HRESULT SAXAttributes_create(IUnknown *pUnkOuter, LPVOID *ppObj)
+{
+    saxattributes *attributes;
+
+    attributes = HeapAlloc(GetProcessHeap(), 0, sizeof(*attributes));
+    if(!attributes)
+        return E_OUTOFMEMORY;
+
+    attributes->lpSAXAttributesVtbl = &isaxattributes_vtbl;
+    attributes->ref = 1;
+
+    *ppObj = attributes;
+
+    TRACE("returning %p\n", *ppObj);
+
+    return S_OK;
+}
+
 /*** LibXML callbacks ***/
 static void libxmlStartDocument(void *ctx)
 {
@@ -182,6 +455,7 @@ static void libxmlStartElementNS(
     BSTR NamespaceUri, LocalName, QName;
     saxlocator *This = ctx;
     HRESULT hr;
+    ISAXAttributes *attr;
 
     FIXME("Arguments processing not yet implemented.\n");
 
@@ -193,17 +467,21 @@ static void libxmlStartElementNS(
         LocalName = bstr_from_xmlChar(localname);
         QName = bstr_from_xmlChar(localname);
 
+        SAXAttributes_create(NULL, (void*)&attr);
+
         hr = ISAXContentHandler_startElement(
                 This->saxreader->contentHandler,
                 NamespaceUri, SysStringLen(NamespaceUri),
                 LocalName, SysStringLen(LocalName),
                 QName, SysStringLen(QName),
-                NULL);
+                attr);
 
         SysFreeString(NamespaceUri);
         SysFreeString(LocalName);
         SysFreeString(QName);
 
+        ISAXAttributes_Release(attr);
+
         if(hr != S_OK)
             format_error_message_from_id(This, hr);
     }




More information about the wine-cvs mailing list