73 lines
2.1 KiB
Diff
73 lines
2.1 KiB
Diff
|
# HG changeset patch
|
||
|
# User Ewan Mellor <ewan@xensource.com>
|
||
|
# 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@xensource.com>
|
||
|
|
||
|
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;
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
|