Nikolay Sivov : xmllite: Implement GetNodeType() for reader.

Alexandre Julliard julliard at winehq.org
Tue Nov 20 13:52:22 CST 2012


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun Nov 18 19:00:24 2012 -0500

xmllite: Implement GetNodeType() for reader.

---

 dlls/xmllite/reader.c       |    8 ++++++--
 dlls/xmllite/tests/reader.c |   12 ++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index 188b419..1970ac8 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -87,6 +87,7 @@ typedef struct _xmlreader
     xmlreaderinput *input;
     IMalloc *imalloc;
     XmlReadState state;
+    XmlNodeType nodetype;
     DtdProcessing dtdmode;
     UINT line, pos;           /* reader position in XML stream */
 } xmlreader;
@@ -469,8 +470,10 @@ static HRESULT WINAPI xmlreader_Read(IXmlReader* iface, XmlNodeType *node_type)
 
 static HRESULT WINAPI xmlreader_GetNodeType(IXmlReader* iface, XmlNodeType *node_type)
 {
-    FIXME("(%p %p): stub\n", iface, node_type);
-    return E_NOTIMPL;
+    xmlreader *This = impl_from_IXmlReader(iface);
+    TRACE("(%p)->(%p)\n", This, node_type);
+    *node_type = This->nodetype;
+    return This->state == XmlReadState_Closed ? S_FALSE : S_OK;
 }
 
 static HRESULT WINAPI xmlreader_MoveToFirstAttribute(IXmlReader* iface)
@@ -725,6 +728,7 @@ HRESULT WINAPI CreateXmlReader(REFIID riid, void **obj, IMalloc *imalloc)
     reader->line  = reader->pos = 0;
     reader->imalloc = imalloc;
     if (imalloc) IMalloc_AddRef(imalloc);
+    reader->nodetype = XmlNodeType_None;
 
     *obj = &reader->IXmlReader_iface;
 
diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c
index f5b7680..7d77fe9 100644
--- a/dlls/xmllite/tests/reader.c
+++ b/dlls/xmllite/tests/reader.c
@@ -351,6 +351,7 @@ static void test_reader_create(void)
     IXmlReader *reader;
     IUnknown *input;
     DtdProcessing dtd;
+    XmlNodeType nodetype;
 
     /* crashes native */
     if (0)
@@ -364,6 +365,11 @@ static void test_reader_create(void)
 
     test_read_state(reader, XmlReadState_Closed, -1, FALSE);
 
+    nodetype = XmlNodeType_Element;
+    hr = IXmlReader_GetNodeType(reader, &nodetype);
+    ok(hr == S_FALSE, "got %08x\n", hr);
+    ok(nodetype == XmlNodeType_None, "got %d\n", nodetype);
+
     dtd = 2;
     hr = IXmlReader_GetProperty(reader, XmlReaderProperty_DtdProcessing, (LONG_PTR*)&dtd);
     ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -403,6 +409,7 @@ static void test_readerinput(void)
     IXmlReader *reader, *reader2;
     IUnknown *obj, *input;
     IStream *stream, *stream2;
+    XmlNodeType nodetype;
     HRESULT hr;
     LONG ref;
 
@@ -444,6 +451,11 @@ static void test_readerinput(void)
 
     test_read_state(reader, XmlReadState_Initial, -1, FALSE);
 
+    nodetype = XmlNodeType_Element;
+    hr = IXmlReader_GetNodeType(reader, &nodetype);
+    ok(hr == S_OK, "got %08x\n", hr);
+    ok(nodetype == XmlNodeType_None, "got %d\n", nodetype);
+
     /* IXmlReader grabs a IXmlReaderInput reference */
     ref = IUnknown_AddRef(reader_input);
     ok(ref == 3, "Expected 3, got %d\n", ref);




More information about the wine-cvs mailing list