Nikolay Sivov : xmllite: Actually resume comment and PI parsing while on Misc part.

Alexandre Julliard julliard at winehq.org
Mon Mar 11 16:24:51 CDT 2013


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun Mar 10 15:45:38 2013 +0400

xmllite: Actually resume comment and PI parsing while on Misc part.

---

 dlls/xmllite/reader.c |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index 489d346..9216127 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -63,6 +63,7 @@ typedef enum
     XmlReadResumeState_Initial,
     XmlReadResumeState_PITarget,
     XmlReadResumeState_PIBody,
+    XmlReadResumeState_Comment,
     XmlReadResumeState_STag
 } XmlReaderResumeState;
 
@@ -1064,6 +1065,7 @@ static HRESULT reader_parse_comment(xmlreader *reader)
         ptr = start = reader_get_cur(reader);
         reader->nodetype = XmlNodeType_Comment;
         reader->resume[XmlReadResume_Body] = start;
+        reader->resumestate = XmlReadResumeState_Comment;
         reader_set_strvalue(reader, StringValue_LocalName, NULL);
         reader_set_strvalue(reader, StringValue_QualifiedName, NULL);
         reader_set_strvalue(reader, StringValue_Value, NULL);
@@ -1088,6 +1090,7 @@ static HRESULT reader_parse_comment(xmlreader *reader)
                     reader_set_strvalue(reader, StringValue_QualifiedName, &strval_empty);
                     reader_set_strvalue(reader, StringValue_Value, &value);
                     reader->resume[XmlReadResume_Body] = NULL;
+                    reader->resumestate = XmlReadResumeState_Initial;
                     return S_OK;
                 }
                 else
@@ -1354,14 +1357,22 @@ static HRESULT reader_parse_misc(xmlreader *reader)
 {
     HRESULT hr = S_FALSE;
 
-    if (is_reader_pending(reader))
+    if (reader->resumestate != XmlReadResumeState_Initial)
     {
         hr = reader_more(reader);
         if (FAILED(hr)) return hr;
 
         /* finish current node */
-        if (reader->nodetype == XmlNodeType_Comment)
+        switch (reader->resumestate)
+        {
+        case XmlReadResumeState_PITarget:
+        case XmlReadResumeState_PIBody:
+            return reader_parse_pi(reader);
+        case XmlReadResumeState_Comment:
             return reader_parse_comment(reader);
+        default:
+            ERR("unknown resume state %d\n", reader->resumestate);
+        }
     }
 
     while (1)




More information about the wine-cvs mailing list