Nikolay Sivov : xmllite/reader: Return prefixes from namespace stack.
Alexandre Julliard
julliard at winehq.org
Thu Mar 9 15:51:33 CST 2017
Module: wine
Branch: master
Commit: d3319f60ad7fc418f6ad505ff69b3b337e36dd22
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d3319f60ad7fc418f6ad505ff69b3b337e36dd22
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Mar 9 07:14:06 2017 +0300
xmllite/reader: Return prefixes from namespace stack.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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;
More information about the wine-cvs
mailing list