[PATCH 4/5] xmllite/reader: Return qualified names for attributes
Nikolay Sivov
nsivov at codeweavers.com
Mon Mar 6 21:50:58 CST 2017
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/xmllite/reader.c | 21 +++++++++++++--------
dlls/xmllite/tests/reader.c | 9 +++++----
2 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index 7aaaebf0aa..63adc9c1f8 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -229,6 +229,7 @@ struct attribute
struct list entry;
strval prefix;
strval localname;
+ strval qname;
strval value;
};
@@ -386,7 +387,8 @@ static void reader_clear_attrs(xmlreader *reader)
/* attribute data holds pointers to buffer data, so buffer shrink is not possible
while we are on a node with attributes */
-static HRESULT reader_add_attr(xmlreader *reader, strval *prefix, strval *localname, strval *value)
+static HRESULT reader_add_attr(xmlreader *reader, strval *prefix, strval *localname, strval *qname,
+ strval *value)
{
struct attribute *attr;
@@ -398,6 +400,7 @@ static HRESULT reader_add_attr(xmlreader *reader, strval *prefix, strval *localn
else
memset(&attr->prefix, 0, sizeof(attr->prefix));
attr->localname = *localname;
+ attr->qname = qname ? *qname : *localname;
attr->value = *value;
list_add_tail(&reader->attrs, &attr->entry);
reader->attr_count++;
@@ -1150,7 +1153,7 @@ static HRESULT reader_parse_versioninfo(xmlreader *reader)
/* skip "'"|'"' */
reader_skipn(reader, 1);
- return reader_add_attr(reader, NULL, &name, &val);
+ return reader_add_attr(reader, NULL, &name, NULL, &val);
}
/* ([A-Za-z0-9._] | '-') */
@@ -1226,7 +1229,7 @@ static HRESULT reader_parse_encdecl(xmlreader *reader)
/* skip "'"|'"' */
reader_skipn(reader, 1);
- return reader_add_attr(reader, NULL, &name, &val);
+ return reader_add_attr(reader, NULL, &name, NULL, &val);
}
/* [32] SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) */
@@ -1268,7 +1271,7 @@ static HRESULT reader_parse_sddecl(xmlreader *reader)
/* skip "'"|'"' */
reader_skipn(reader, 1);
- return reader_add_attr(reader, NULL, &name, &val);
+ return reader_add_attr(reader, NULL, &name, NULL, &val);
}
/* [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' */
@@ -1737,7 +1740,7 @@ static HRESULT reader_parse_externalid(xmlreader *reader)
if (FAILED(hr)) return hr;
reader_init_cstrvalue(publicW, strlenW(publicW), &name);
- hr = reader_add_attr(reader, NULL, &name, &pub);
+ hr = reader_add_attr(reader, NULL, &name, NULL, &pub);
if (FAILED(hr)) return hr;
cnt = reader_skipspaces(reader);
@@ -1748,7 +1751,7 @@ static HRESULT reader_parse_externalid(xmlreader *reader)
if (FAILED(hr)) return S_OK;
reader_init_cstrvalue(systemW, strlenW(systemW), &name);
- hr = reader_add_attr(reader, NULL, &name, &sys);
+ hr = reader_add_attr(reader, NULL, &name, NULL, &sys);
if (FAILED(hr)) return hr;
return S_OK;
@@ -1762,7 +1765,7 @@ static HRESULT reader_parse_externalid(xmlreader *reader)
if (FAILED(hr)) return hr;
reader_init_cstrvalue(systemW, strlenW(systemW), &name);
- return reader_add_attr(reader, NULL, &name, &sys);
+ return reader_add_attr(reader, NULL, &name, NULL, &sys);
}
return S_FALSE;
@@ -2160,7 +2163,7 @@ static HRESULT reader_parse_attribute(xmlreader *reader)
reader_push_ns(reader, nsdef ? &strval_xmlns : &local, &value, nsdef);
TRACE("%s=%s\n", debug_strval(reader, &local), debug_strval(reader, &value));
- return reader_add_attr(reader, &prefix, &local, &value);
+ return reader_add_attr(reader, &prefix, &local, &qname, &value);
}
/* [12 NS] STag ::= '<' QName (S Attribute)* S? '>'
@@ -2829,6 +2832,7 @@ static HRESULT reader_move_to_first_attribute(xmlreader *reader)
reader->attr = LIST_ENTRY(list_head(&reader->attrs), struct attribute, entry);
reader_set_strvalue(reader, StringValue_Prefix, &reader->attr->prefix);
reader_set_strvalue(reader, StringValue_LocalName, &reader->attr->localname);
+ reader_set_strvalue(reader, StringValue_QualifiedName, &reader->attr->qname);
reader_set_strvalue(reader, StringValue_Value, &reader->attr->value);
return S_OK;
@@ -2861,6 +2865,7 @@ static HRESULT WINAPI xmlreader_MoveToNextAttribute(IXmlReader* iface)
This->attr = LIST_ENTRY(next, struct attribute, entry);
reader_set_strvalue(This, StringValue_Prefix, &This->attr->prefix);
reader_set_strvalue(This, StringValue_LocalName, &This->attr->localname);
+ reader_set_strvalue(This, StringValue_QualifiedName, &This->attr->qname);
reader_set_strvalue(This, StringValue_Value, &This->attr->value);
}
diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c
index 8a736bff8e..e551a48b70 100644
--- a/dlls/xmllite/tests/reader.c
+++ b/dlls/xmllite/tests/reader.c
@@ -1275,9 +1275,10 @@ todo_wine {
str = NULL;
hr = IXmlReader_GetQualifiedName(reader, &str, &len);
ok(hr == S_OK, "got 0x%08x\n", hr);
+todo_wine {
ok(len == lstrlenW(dtdnameW), "got %u\n", len);
ok(!lstrcmpW(str, dtdnameW), "got %s\n", wine_dbgstr_w(str));
-
+}
IStream_Release(stream);
IXmlReader_Release(reader);
}
@@ -1355,9 +1356,10 @@ todo_wine {
str = NULL;
hr = IXmlReader_GetQualifiedName(reader, &str, &len);
ok(hr == S_OK, "got 0x%08x\n", hr);
+todo_wine {
ok(len == lstrlenW(dtdnameW), "got %u\n", len);
ok(!lstrcmpW(str, dtdnameW), "got %s\n", wine_dbgstr_w(str));
-
+}
type = XmlNodeType_None;
hr = IXmlReader_Read(reader, &type);
ok(hr == S_OK, "got 0x%8x\n", hr);
@@ -1925,12 +1927,11 @@ static void test_read_attribute(void)
str = NULL;
hr = IXmlReader_GetQualifiedName(reader, &str, &len);
ok(hr == S_OK, "got 0x%08x\n", hr);
- todo_wine {
ok(len == strlen(test->name), "got %u\n", len);
str_exp = a2w(test->name);
ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str));
free_str(str_exp);
- }
+
/* value */
len = 1;
str = NULL;
--
2.11.0
More information about the wine-patches
mailing list