Module: wine Branch: master Commit: d3319f60ad7fc418f6ad505ff69b3b337e36dd22 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d3319f60ad7fc418f6ad505ff6...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Mar 9 07:14:06 2017 +0300
xmllite/reader: Return prefixes from namespace stack.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/xmllite/reader.c | 46 +++++++++++++++++++++++++++++++++++++++++---- dlls/xmllite/tests/reader.c | 1 + 2 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c index ba7a56e..2e828f3 100644 --- a/dlls/xmllite/reader.c +++ b/dlls/xmllite/reader.c @@ -3087,13 +3087,51 @@ static HRESULT WINAPI xmlreader_GetLocalName(IXmlReader* iface, LPCWSTR *name, U return S_OK; }
-static HRESULT WINAPI xmlreader_GetPrefix(IXmlReader* iface, LPCWSTR *prefix, UINT *len) +static HRESULT WINAPI xmlreader_GetPrefix(IXmlReader* iface, const WCHAR **ret, UINT *len) { xmlreader *This = impl_from_IXmlReader(iface); + XmlNodeType nodetype; + UINT length; + + TRACE("(%p)->(%p %p)\n", This, ret, len); + + if (!len) + len = &length; + + *ret = emptyW; + *len = 0; + + switch ((nodetype = reader_get_nodetype(This))) + { + case XmlNodeType_Element: + case XmlNodeType_EndElement: + case XmlNodeType_Attribute: + { + const strval *prefix = &This->strvalues[StringValue_Prefix]; + struct ns *ns; + + if (strval_eq(This, prefix, &strval_xml)) + { + *ret = xmlW; + *len = 3; + } + else if (strval_eq(This, prefix, &strval_xmlns)) + { + *ret = xmlnsW; + *len = 5; + } + else if ((ns = reader_lookup_ns(This, prefix))) + { + *ret = ns->prefix.str; + *len = ns->prefix.len; + } + + break; + } + default: + ; + }
- TRACE("(%p)->(%p %p)\n", This, prefix, len); - *prefix = This->strvalues[StringValue_Prefix].str; - if (len) *len = This->strvalues[StringValue_Prefix].len; return S_OK; }
diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c index 1d32678..1defecf 100644 --- a/dlls/xmllite/tests/reader.c +++ b/dlls/xmllite/tests/reader.c @@ -2024,6 +2024,7 @@ static void test_prefix(void) } prefix_tests[] = { { "<b xmlns="defns" xml:a="a ns"/>", "", "", "xml" }, + { "<c:b xmlns:c="c ns" xml:a="a ns"/>", "c", "xmlns", "xml" }, }; IXmlReader *reader; unsigned int i;