[PATCH 1/5] xmllite/reader: Return prefixes from namespace stack
Nikolay Sivov
nsivov at codeweavers.com
Wed Mar 8 22:14:06 CST 2017
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
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 ba7a56e74a..2e828f370f 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 1d3267843c..1defecf685 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;
--
2.11.0
More information about the wine-patches
mailing list