# HG changeset patch
# User Ewan Mellor <ewan@xxxxxxxxxxxxx>
# Date 1168000232 0
# Node ID bb8ae710d829d5a7805c5588d8ded2ea393686cf
# Parent 36e00d04278d4fbdb0b034355a0e683372211752
Treat <value> tags with no type tag inside as if they were strings (as required
by the XML-RPC spec).
Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
---
tools/libxen/src/xen_common.c | 42 +++++++++++++++++++++++++++++++++---------
1 files changed, 33 insertions(+), 9 deletions(-)
diff -r 36e00d04278d -r bb8ae710d829 tools/libxen/src/xen_common.c
--- a/tools/libxen/src/xen_common.c Fri Jan 05 12:29:26 2007 +0000
+++ b/tools/libxen/src/xen_common.c Fri Jan 05 12:30:32 2007 +0000
@@ -373,11 +373,18 @@ static void server_error_2(xen_session *
}
-static bool is_container_node(xmlNode *n, char *type)
+static bool is_node(xmlNode *n, char *type)
{
return
n->type == XML_ELEMENT_NODE &&
- 0 == strcmp((char *)n->name, type) &&
+ 0 == strcmp((char *)n->name, type);
+}
+
+
+static bool is_container_node(xmlNode *n, char *type)
+{
+ return
+ is_node(n, type) &&
n->children != NULL &&
n->children == n->last &&
n->children->type == XML_ELEMENT_NODE;
@@ -390,13 +397,30 @@ static bool is_container_node(xmlNode *n
*/
static xmlChar *string_from_value(xmlNode *n, char *type)
{
- return
- is_container_node(n, "value") &&
- 0 == strcmp((char *)n->children->name, type) ?
- (n->children->children == NULL ?
- xmlStrdup(BAD_CAST("")) :
- xmlNodeGetContent(n->children->children)) :
- NULL;
+ /*
+ <value><type>XYZ</type></value> is normal, but the XML-RPC spec also
+ allows <value>XYZ</value> where XYZ is to be interpreted as a string.
+ */
+
+ if (is_container_node(n, "value") &&
+ 0 == strcmp((char *)n->children->name, type))
+ {
+ return
+ n->children->children == NULL ?
+ xmlStrdup(BAD_CAST("")) :
+ xmlNodeGetContent(n->children->children);
+ }
+ else if (0 == strcmp(type, "string") && is_node(n, "value"))
+ {
+ return
+ n->children == NULL ?
+ xmlStrdup(BAD_CAST("")) :
+ xmlNodeGetContent(n->children);
+ }
+ else
+ {
+ return NULL;
+ }
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|