[PATCH 7/7] xmllite/reader: Improve returned position for whitespace text nodes

Nikolay Sivov nsivov at codeweavers.com
Thu Mar 9 23:56:14 CST 2017


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/xmllite/reader.c       | 5 +++++
 dlls/xmllite/tests/reader.c | 1 -
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index b223994720..b5088e83d0 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -2383,6 +2383,7 @@ static HRESULT reader_parse_cdata(xmlreader *reader)
 /* [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*) */
 static HRESULT reader_parse_chardata(xmlreader *reader)
 {
+    struct reader_position position;
     WCHAR *ptr;
     UINT start;
 
@@ -2404,6 +2405,7 @@ static HRESULT reader_parse_chardata(xmlreader *reader)
         reader_set_strvalue(reader, StringValue_Value, NULL);
     }
 
+    position = reader->position;
     while (*ptr)
     {
         static const WCHAR ampW[] = {'&',0};
@@ -2417,6 +2419,7 @@ static HRESULT reader_parse_chardata(xmlreader *reader)
         {
             strval value;
 
+            reader->empty_element.position = position;
             reader_init_strvalue(start, reader_get_cur(reader)-start, &value);
             reader_set_strvalue(reader, StringValue_Value, &value);
             reader->resume[XmlReadResume_Body] = 0;
@@ -3314,6 +3317,7 @@ static HRESULT WINAPI xmlreader_GetLineNumber(IXmlReader* iface, UINT *line_numb
     case XmlNodeType_Attribute:
         *line_number = This->attr->position.line_number;
         break;
+    case XmlNodeType_Whitespace:
     case XmlNodeType_XmlDeclaration:
         *line_number = This->empty_element.position.line_number;
         break;
@@ -3349,6 +3353,7 @@ static HRESULT WINAPI xmlreader_GetLinePosition(IXmlReader* iface, UINT *line_po
     case XmlNodeType_Attribute:
         *line_position = This->attr->position.line_position;
         break;
+    case XmlNodeType_Whitespace:
     case XmlNodeType_XmlDeclaration:
         *line_position = This->empty_element.position.line_position;
         break;
diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c
index fdd2750bc6..e66b9e4240 100644
--- a/dlls/xmllite/tests/reader.c
+++ b/dlls/xmllite/tests/reader.c
@@ -2531,7 +2531,6 @@ static void test_reader_position(void)
     hr = IXmlReader_Read(reader, &type);
     ok(hr == S_OK, "got %08x\n", hr);
     ok(type == XmlNodeType_Whitespace, "got type %d\n", type);
-todo_wine
     TEST_READER_POSITION2(reader, 1, 35, 2, 6);
 
     hr = IXmlReader_Read(reader, &type);
-- 
2.11.0




More information about the wine-patches mailing list