[PATCH 10/14] xmllite: Improve GetValue() for namespace definition nodes

Nikolay Sivov nsivov at codeweavers.com
Fri Dec 9 07:38:30 CST 2016


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 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;
-- 
2.10.2




More information about the wine-patches mailing list