Module: wine Branch: master Commit: 20c575e81fdf2038a37eae2ac9bdb809a2542de8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=20c575e81fdf2038a37eae2ac9...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Fri Dec 9 16:38:30 2016 +0300
xmllite: Improve GetValue() for namespace definition nodes.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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;