From 20c575e81fdf2038a37eae2ac9bdb809a2542de8 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Fri, 9 Dec 2016 16:38:30 +0300 Subject: [PATCH] xmllite: Improve GetValue() for namespace definition nodes. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/xmllite/reader.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c index 24a061c6e0e..47649f5a8f7 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.11.4.GIT