[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Treat <value> tags with no type tag inside as if they were strings (as required
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |