Nikolay Sivov : xmllite: Improve GetValue() for namespace definition nodes.

Alexandre Julliard julliard at winehq.org
Fri Dec 9 13:37:34 CST 2016


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Dec  9 16:38:30 2016 +0300

xmllite: Improve GetValue() for namespace definition nodes.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/xmllite/reader.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index 24a061c..47649f5 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -3002,6 +3002,18 @@ static HRESULT WINAPI xmlreader_GetPrefix(IXmlReader* iface, LPCWSTR *prefix, UI
     return S_OK;
 }
 
+static BOOL is_namespace_definition(xmlreader *reader)
+{
+    const strval *local = &reader->strvalues[StringValue_LocalName];
+    const strval *prefix = &reader->strvalues[StringValue_Prefix];
+
+    if (reader_get_nodetype(reader) != XmlNodeType_Attribute)
+        return FALSE;
+
+    return ((strval_eq(reader, prefix, &strval_empty) && strval_eq(reader, local, &strval_xmlns)) ||
+            strval_eq(reader, prefix, &strval_xmlns));
+}
+
 static HRESULT WINAPI xmlreader_GetValue(IXmlReader* iface, const WCHAR **value, UINT *len)
 {
     xmlreader *reader = impl_from_IXmlReader(iface);
@@ -3032,6 +3044,18 @@ static HRESULT WINAPI xmlreader_GetValue(IXmlReader* iface, const WCHAR **value,
         val->str = ptr;
     }
 
+    /* For namespace definition attributes return values from namespace list */
+    if (is_namespace_definition(reader)) {
+        const strval *local = &reader->strvalues[StringValue_LocalName];
+        struct ns *ns;
+
+        ns = reader_lookup_ns(reader, local);
+        if (!ns)
+            ns = reader_lookup_nsdef(reader);
+
+        val = &ns->uri;
+    }
+
     *value = val->str;
     if (len) *len = val->len;
     return S_OK;




More information about the wine-cvs mailing list