mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-24 21:45:21 +00:00
build: fix build with older libxml2
On RHEL 5, with libxml2-2.6.26, the build failed with: virsh.c: In function 'vshNodeIsSuperset': virsh.c:11951: warning: implicit declaration of function 'xmlChildElementCount' (or if warnings aren't errors, a link failure later on). * src/util/xml.h (virXMLChildElementCount): New prototype. * src/util/xml.c (virXMLChildElementCount): New function. * src/libvirt_private.syms (xml.h): Export it. * tools/virsh.c (vshNodeIsSuperset): Use it.
This commit is contained in:
parent
e970863746
commit
f59a941757
@ -1400,6 +1400,7 @@ virTimeStringThenRaw;
|
|||||||
|
|
||||||
|
|
||||||
# xml.h
|
# xml.h
|
||||||
|
virXMLChildElementCount;
|
||||||
virXMLParseHelper;
|
virXMLParseHelper;
|
||||||
virXMLPropString;
|
virXMLPropString;
|
||||||
virXMLSaveFile;
|
virXMLSaveFile;
|
||||||
|
@ -833,3 +833,23 @@ virXMLSaveFile(const char *path,
|
|||||||
|
|
||||||
return virFileRewrite(path, S_IRUSR | S_IWUSR, virXMLRewriteFile, &data);
|
return virFileRewrite(path, S_IRUSR | S_IWUSR, virXMLRewriteFile, &data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Returns the number of children of node, or -1 on error. */
|
||||||
|
long
|
||||||
|
virXMLChildElementCount(xmlNodePtr node)
|
||||||
|
{
|
||||||
|
long ret = 0;
|
||||||
|
xmlNodePtr cur = NULL;
|
||||||
|
|
||||||
|
/* xmlChildElementCount returns 0 on error, which isn't helpful;
|
||||||
|
* besides, it is not available in libxml2 2.6. */
|
||||||
|
if (!node || node->type != XML_ELEMENT_NODE)
|
||||||
|
return -1;
|
||||||
|
cur = node->children;
|
||||||
|
while (cur) {
|
||||||
|
if (cur->type == XML_ELEMENT_NODE)
|
||||||
|
ret++;
|
||||||
|
cur = cur->next;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -52,6 +52,7 @@ int virXPathNodeSet(const char *xpath,
|
|||||||
xmlNodePtr **list);
|
xmlNodePtr **list);
|
||||||
char * virXMLPropString(xmlNodePtr node,
|
char * virXMLPropString(xmlNodePtr node,
|
||||||
const char *name);
|
const char *name);
|
||||||
|
long virXMLChildElementCount(xmlNodePtr node);
|
||||||
|
|
||||||
/* Internal function; prefer the macros below. */
|
/* Internal function; prefer the macros below. */
|
||||||
xmlDocPtr virXMLParseHelper(int domcode,
|
xmlDocPtr virXMLParseHelper(int domcode,
|
||||||
|
@ -11919,7 +11919,7 @@ vshNodeIsSuperset(xmlNodePtr n1, xmlNodePtr n2)
|
|||||||
bool found;
|
bool found;
|
||||||
bool visited;
|
bool visited;
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
unsigned long n1_child_size, n2_child_size, n1_iter;
|
long n1_child_size, n2_child_size, n1_iter;
|
||||||
virBitmapPtr bitmap;
|
virBitmapPtr bitmap;
|
||||||
|
|
||||||
if (!n1 && !n2)
|
if (!n1 && !n2)
|
||||||
@ -11948,9 +11948,10 @@ vshNodeIsSuperset(xmlNodePtr n1, xmlNodePtr n2)
|
|||||||
attr = attr->next;
|
attr = attr->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
n1_child_size = xmlChildElementCount(n1);
|
n1_child_size = virXMLChildElementCount(n1);
|
||||||
n2_child_size = xmlChildElementCount(n2);
|
n2_child_size = virXMLChildElementCount(n2);
|
||||||
if (n1_child_size < n2_child_size)
|
if (n1_child_size < 0 || n2_child_size < 0 ||
|
||||||
|
n1_child_size < n2_child_size)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (n1_child_size == 0 && n2_child_size == 0)
|
if (n1_child_size == 0 && n2_child_size == 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user