virXPathString(const char *xpath, xmlXPathContextPtr ctxt)
{
xmlXPathObjectPtr obj;
+ xmlNodePtr relnode;
char *ret;
if ((ctxt == NULL) || (xpath == NULL)) {
_("Invalid parameter to virXPathString()"), 0);
return (NULL);
}
+ relnode = ctxt->node;
obj = xmlXPathEval(BAD_CAST xpath, ctxt);
if ((obj == NULL) || (obj->type != XPATH_STRING) ||
(obj->stringval == NULL) || (obj->stringval[0] == 0)) {
if (ret == NULL) {
virXMLError(NULL, VIR_ERR_NO_MEMORY, _("strdup failed"), 0);
}
+ ctxt->node = relnode;
return (ret);
}
virXPathNumber(const char *xpath, xmlXPathContextPtr ctxt, double *value)
{
xmlXPathObjectPtr obj;
+ xmlNodePtr relnode;
if ((ctxt == NULL) || (xpath == NULL) || (value == NULL)) {
virXMLError(NULL, VIR_ERR_INTERNAL_ERROR,
_("Invalid parameter to virXPathNumber()"), 0);
return (-1);
}
+ relnode = ctxt->node;
obj = xmlXPathEval(BAD_CAST xpath, ctxt);
if ((obj == NULL) || (obj->type != XPATH_NUMBER) ||
(isnan(obj->floatval))) {
xmlXPathFreeObject(obj);
+ ctxt->node = relnode;
return (-1);
}
*value = obj->floatval;
xmlXPathFreeObject(obj);
+ ctxt->node = relnode;
return (0);
}
virXPathLong(const char *xpath, xmlXPathContextPtr ctxt, long *value)
{
xmlXPathObjectPtr obj;
+ xmlNodePtr relnode;
int ret = 0;
if ((ctxt == NULL) || (xpath == NULL) || (value == NULL)) {
_("Invalid parameter to virXPathNumber()"), 0);
return (-1);
}
+ relnode = ctxt->node;
obj = xmlXPathEval(BAD_CAST xpath, ctxt);
if ((obj != NULL) && (obj->type == XPATH_STRING) &&
(obj->stringval != NULL) && (obj->stringval[0] != 0)) {
}
xmlXPathFreeObject(obj);
+ ctxt->node = relnode;
return (ret);
}
virXPathBoolean(const char *xpath, xmlXPathContextPtr ctxt)
{
xmlXPathObjectPtr obj;
+ xmlNodePtr relnode;
int ret;
if ((ctxt == NULL) || (xpath == NULL)) {
_("Invalid parameter to virXPathBoolean()"), 0);
return (-1);
}
+ relnode = ctxt->node;
obj = xmlXPathEval(BAD_CAST xpath, ctxt);
if ((obj == NULL) || (obj->type != XPATH_BOOLEAN) ||
(obj->boolval < 0) || (obj->boolval > 1)) {
ret = obj->boolval;
xmlXPathFreeObject(obj);
+ ctxt->node = relnode;
return (ret);
}
virXPathNode(const char *xpath, xmlXPathContextPtr ctxt)
{
xmlXPathObjectPtr obj;
+ xmlNodePtr relnode;
xmlNodePtr ret;
if ((ctxt == NULL) || (xpath == NULL)) {
_("Invalid parameter to virXPathNode()"), 0);
return (NULL);
}
+ relnode = ctxt->node;
obj = xmlXPathEval(BAD_CAST xpath, ctxt);
if ((obj == NULL) || (obj->type != XPATH_NODESET) ||
(obj->nodesetval == NULL) || (obj->nodesetval->nodeNr <= 0) ||
(obj->nodesetval->nodeTab == NULL)) {
xmlXPathFreeObject(obj);
+ ctxt->node = relnode;
return (NULL);
}
ret = obj->nodesetval->nodeTab[0];
xmlXPathFreeObject(obj);
+ ctxt->node = relnode;
return (ret);
}
xmlNodePtr ** list)
{
xmlXPathObjectPtr obj;
+ xmlNodePtr relnode;
int ret;
if ((ctxt == NULL) || (xpath == NULL)) {
_("Invalid parameter to virXPathNodeSet()"), 0);
return (-1);
}
+ relnode = ctxt->node;
obj = xmlXPathEval(BAD_CAST xpath, ctxt);
if ((obj == NULL) || (obj->type != XPATH_NODESET) ||
(obj->nodesetval == NULL) || (obj->nodesetval->nodeNr <= 0) ||
xmlXPathFreeObject(obj);
if (list != NULL)
*list = NULL;
+ ctxt->node = relnode;
return (-1);
}
}
}
xmlXPathFreeObject(obj);
+ ctxt->node = relnode;
return (ret);
}
goto error;
virBufferVSprintf(buf, "(serial %s)", scratch);
} else {
- res = virXPathBoolean("count(domain/devices/console) > 0", ctxt);
+ res = virXPathBoolean("count(/domain/devices/console) > 0", ctxt);
if (res < 0) {
virXMLError(conn, VIR_ERR_XML_ERROR, NULL, 0);
goto error;