mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 03:25:20 +00:00
maint: simplify lots of libxml2 clients
Repetitive patterns should be factored. The sign of a good factorization is a change that kills 5x more lines than it adds :) * src/conf/domain_conf.c (virDomainDeviceDefParse) (virDomainSnapshotDefParseString): Use new convenience macros. * src/conf/storage_conf.c (virStoragePoolDefParseSourceString): Likewise. * src/cpu/cpu.c (cpuCompareXML, cpuBaselineXML): Likewise. * src/esx/esx_vi.c (esxVI_Context_Execute): Likewise. * src/qemu/qemu_migration.c (qemuMigrationCookieXMLParseStr): Likewise. * src/security/virt-aa-helper.c (caps_mockup): Likewise. * src/test/test_driver.c (testOpenFromFile): Likewise. * tests/cputest.c (cpuTestLoadXML, cpuTestLoadMultiXML): Likewise. * tools/virsh.c (cmdFreecell, makeCloneXML, cmdVNCDisplay) (cmdTTYConsole, cmdDetachInterface, cmdDetachDisk) (cmdSnapshotCreate, cmdSnapshotCreateAs, cmdSnapshotCurrent) (cmdSnapshotList, cmdSnapshotParent): Likewise.
This commit is contained in:
parent
751304e367
commit
d89dd42d51
@ -5385,17 +5385,10 @@ virDomainDeviceDefPtr virDomainDeviceDefParse(virCapsPtr caps,
|
||||
xmlXPathContextPtr ctxt = NULL;
|
||||
virDomainDeviceDefPtr dev = NULL;
|
||||
|
||||
if (!(xml = virXMLParseString(xmlStr, "device.xml"))) {
|
||||
if (!(xml = virXMLParseStringCtxt(xmlStr, "device.xml", &ctxt))) {
|
||||
goto error;
|
||||
}
|
||||
node = xmlDocGetRootElement(xml);
|
||||
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
if (ctxt == NULL) {
|
||||
virReportOOMError();
|
||||
goto error;
|
||||
}
|
||||
ctxt->node = xmlDocGetRootElement(xml);
|
||||
node = ctxt->node;
|
||||
|
||||
if (VIR_ALLOC(dev) < 0) {
|
||||
virReportOOMError();
|
||||
@ -10968,23 +10961,16 @@ virDomainSnapshotDefPtr virDomainSnapshotDefParseString(const char *xmlStr,
|
||||
char *creation = NULL, *state = NULL;
|
||||
struct timeval tv;
|
||||
|
||||
xml = virXMLParse(NULL, xmlStr, "domainsnapshot.xml");
|
||||
xml = virXMLParseCtxt(NULL, xmlStr, "domainsnapshot.xml", &ctxt);
|
||||
if (!xml) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
if (ctxt == NULL) {
|
||||
virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (VIR_ALLOC(def) < 0) {
|
||||
virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ctxt->node = xmlDocGetRootElement(xml);
|
||||
if (!xmlStrEqual(ctxt->node->name, BAD_CAST "domainsnapshot")) {
|
||||
virDomainReportError(VIR_ERR_XML_ERROR, "%s", _("domainsnapshot"));
|
||||
goto cleanup;
|
||||
|
@ -505,13 +505,7 @@ virStoragePoolDefParseSourceString(const char *srcSpec,
|
||||
xmlXPathContextPtr xpath_ctxt = NULL;
|
||||
virStoragePoolSourcePtr def = NULL, ret = NULL;
|
||||
|
||||
if (!(doc = virXMLParseString(srcSpec, "srcSpec.xml"))) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
xpath_ctxt = xmlXPathNewContext(doc);
|
||||
if (xpath_ctxt == NULL) {
|
||||
virReportOOMError();
|
||||
if (!(doc = virXMLParseStringCtxt(srcSpec, "srcSpec.xml", &xpath_ctxt))) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* cpu.c: internal functions for CPU manipulation
|
||||
*
|
||||
* Copyright (C) 2009--2010 Red Hat, Inc.
|
||||
* Copyright (C) 2009-2011 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@ -76,16 +76,9 @@ cpuCompareXML(virCPUDefPtr host,
|
||||
|
||||
VIR_DEBUG("host=%p, xml=%s", host, NULLSTR(xml));
|
||||
|
||||
if (!(doc = virXMLParseString(xml, "cpu.xml")))
|
||||
if (!(doc = virXMLParseStringCtxt(xml, "cpu.xml", &ctxt)))
|
||||
goto cleanup;
|
||||
|
||||
if ((ctxt = xmlXPathNewContext(doc)) == NULL) {
|
||||
virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ctxt->node = xmlDocGetRootElement(doc);
|
||||
|
||||
cpu = virCPUDefParseXML(ctxt->node, ctxt, VIR_CPU_TYPE_AUTO);
|
||||
if (cpu == NULL)
|
||||
goto cleanup;
|
||||
@ -311,14 +304,9 @@ cpuBaselineXML(const char **xmlCPUs,
|
||||
goto no_memory;
|
||||
|
||||
for (i = 0; i < ncpus; i++) {
|
||||
if (!(doc = virXMLParseString(xmlCPUs[i], "cpu.xml")))
|
||||
if (!(doc = virXMLParseStringCtxt(xmlCPUs[i], "cpu.xml", &ctxt)))
|
||||
goto error;
|
||||
|
||||
if ((ctxt = xmlXPathNewContext(doc)) == NULL)
|
||||
goto no_memory;
|
||||
|
||||
ctxt->node = xmlDocGetRootElement(doc);
|
||||
|
||||
cpus[i] = virCPUDefParseXML(ctxt->node, ctxt, VIR_CPU_TYPE_HOST);
|
||||
if (cpus[i] == NULL)
|
||||
goto error;
|
||||
|
@ -910,21 +910,14 @@ esxVI_Context_Execute(esxVI_Context *ctx, const char *methodName,
|
||||
(*response)->content = virBufferContentAndReset(&buffer);
|
||||
|
||||
if ((*response)->responseCode == 500 || (*response)->responseCode == 200) {
|
||||
(*response)->document = virXMLParseString((*response)->content,
|
||||
"esx.xml");
|
||||
(*response)->document = virXMLParseStringCtxt((*response)->content,
|
||||
"esx.xml",
|
||||
&xpathContext);
|
||||
|
||||
if ((*response)->document == NULL) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
xpathContext = xmlXPathNewContext((*response)->document);
|
||||
|
||||
if (xpathContext == NULL) {
|
||||
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("Could not create XPath context"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
xmlXPathRegisterNs(xpathContext, BAD_CAST "soapenv",
|
||||
BAD_CAST "http://schemas.xmlsoap.org/soap/envelope/");
|
||||
xmlXPathRegisterNs(xpathContext, BAD_CAST "vim", BAD_CAST "urn:vim25");
|
||||
|
@ -602,16 +602,9 @@ qemuMigrationCookieXMLParseStr(qemuMigrationCookiePtr mig,
|
||||
|
||||
VIR_DEBUG("xml=%s", NULLSTR(xml));
|
||||
|
||||
if (!(doc = virXMLParseString(xml, "qemumigration.xml")))
|
||||
if (!(doc = virXMLParseStringCtxt(xml, "qemumigration.xml", &ctxt)))
|
||||
goto cleanup;
|
||||
|
||||
if ((ctxt = xmlXPathNewContext(doc)) == NULL) {
|
||||
virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ctxt->node = xmlDocGetRootElement(doc);
|
||||
|
||||
ret = qemuMigrationCookieXMLParse(mig, ctxt, flags);
|
||||
|
||||
cleanup:
|
||||
|
@ -640,24 +640,16 @@ caps_mockup(vahControl * ctl, const char *xmlStr)
|
||||
int rc = -1;
|
||||
xmlDocPtr xml = NULL;
|
||||
xmlXPathContextPtr ctxt = NULL;
|
||||
xmlNodePtr root;
|
||||
|
||||
if (!(xml = virXMLParseString(xmlStr, "domain.xml"))) {
|
||||
if (!(xml = virXMLParseStringCtxt(xmlStr, "domain.xml", &ctxt))) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
root = xmlDocGetRootElement(xml);
|
||||
if (!xmlStrEqual(root->name, BAD_CAST "domain")) {
|
||||
if (!xmlStrEqual(ctxt->node->name, BAD_CAST "domain")) {
|
||||
vah_error(NULL, 0, _("incorrect root element"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if ((ctxt = xmlXPathNewContext(xml)) == NULL) {
|
||||
vah_error(ctl, 0, _("could not allocate memory"));
|
||||
goto cleanup;
|
||||
}
|
||||
ctxt->node = root;
|
||||
|
||||
/* Quick sanity check for some required elements */
|
||||
if (verify_xpath_context(ctxt) != 0)
|
||||
goto cleanup;
|
||||
|
@ -742,7 +742,6 @@ static int testOpenFromFile(virConnectPtr conn,
|
||||
long l;
|
||||
char *str;
|
||||
xmlDocPtr xml = NULL;
|
||||
xmlNodePtr root = NULL;
|
||||
xmlNodePtr *domains = NULL, *networks = NULL, *ifaces = NULL,
|
||||
*pools = NULL, *devs = NULL;
|
||||
xmlXPathContextPtr ctxt = NULL;
|
||||
@ -771,24 +770,16 @@ static int testOpenFromFile(virConnectPtr conn,
|
||||
if (!(privconn->caps = testBuildCapabilities(conn)))
|
||||
goto error;
|
||||
|
||||
if (!(xml = virXMLParseFile(file))) {
|
||||
if (!(xml = virXMLParseFileCtxt(file, &ctxt))) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
root = xmlDocGetRootElement(xml);
|
||||
if ((root == NULL) || (!xmlStrEqual(root->name, BAD_CAST "node"))) {
|
||||
if (!xmlStrEqual(ctxt->node->name, BAD_CAST "node")) {
|
||||
testError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("Root element is not 'node'"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
if (ctxt == NULL) {
|
||||
testError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("creating xpath context"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
privconn->nextDomID = 1;
|
||||
privconn->numCells = 0;
|
||||
if ((privconn->path = strdup(file)) == NULL) {
|
||||
|
@ -96,11 +96,9 @@ cpuTestLoadXML(const char *arch, const char *name)
|
||||
if (virAsprintf(&xml, "%s/cputestdata/%s-%s.xml", abs_srcdir, arch, name) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(doc = virXMLParseFile(xml)) ||
|
||||
!(ctxt = xmlXPathNewContext(doc)))
|
||||
if (!(doc = virXMLParseFileCtxt(xml, &ctxt)))
|
||||
goto cleanup;
|
||||
|
||||
ctxt->node = xmlDocGetRootElement(doc);
|
||||
cpu = virCPUDefParseXML(ctxt->node, ctxt, VIR_CPU_TYPE_AUTO);
|
||||
|
||||
cleanup:
|
||||
@ -127,12 +125,9 @@ cpuTestLoadMultiXML(const char *arch,
|
||||
if (virAsprintf(&xml, "%s/cputestdata/%s-%s.xml", abs_srcdir, arch, name) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(doc = virXMLParseFile(xml)) ||
|
||||
!(ctxt = xmlXPathNewContext(doc)))
|
||||
if (!(doc = virXMLParseFileCtxt(xml, &ctxt)))
|
||||
goto error;
|
||||
|
||||
ctxt->node = xmlDocGetRootElement(doc);
|
||||
|
||||
n = virXPathNodeSet("/cpuTest/cpu", ctxt, &nodes);
|
||||
if (n <= 0 || !(cpus = calloc(n, sizeof(virCPUDefPtr))))
|
||||
goto error;
|
||||
|
@ -67,6 +67,8 @@ static char *progname;
|
||||
#define VSH_PROMPT_RW "virsh # "
|
||||
#define VSH_PROMPT_RO "virsh > "
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_NONE
|
||||
|
||||
#define GETTIMEOFDAY(T) gettimeofday(T, NULL)
|
||||
#define DIFF_MSEC(T, U) \
|
||||
((((int) ((T)->tv_sec - (U)->tv_sec)) * 1000000.0 + \
|
||||
@ -2901,16 +2903,11 @@ cmdFreecell(vshControl *ctl, const vshCmd *cmd)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
xml = xmlReadDoc((const xmlChar *) cap_xml, "node.xml", NULL,
|
||||
XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||
XML_PARSE_NOWARNING);
|
||||
|
||||
xml = virXMLParseStringCtxt(cap_xml, "node.xml", &ctxt);
|
||||
if (!xml) {
|
||||
vshError(ctl, "%s", _("unable to get node capabilities"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
nodes_cnt = virXPathNodeSet("/capabilities/host/topology/cells/cell",
|
||||
ctxt, &nodes);
|
||||
|
||||
@ -8404,13 +8401,9 @@ makeCloneXML(const char *origxml, const char *newname) {
|
||||
xmlChar *newxml = NULL;
|
||||
int size;
|
||||
|
||||
doc = xmlReadDoc((const xmlChar *) origxml, "domain.xml", NULL,
|
||||
XML_PARSE_NOENT | XML_PARSE_NONET | XML_PARSE_NOWARNING);
|
||||
doc = virXMLParseStringCtxt(origxml, "domain.xml", &ctxt);
|
||||
if (!doc)
|
||||
goto cleanup;
|
||||
ctxt = xmlXPathNewContext(doc);
|
||||
if (!ctxt)
|
||||
goto cleanup;
|
||||
|
||||
obj = xmlXPathEval(BAD_CAST "/volume/name", ctxt);
|
||||
if ((obj == NULL) || (obj->nodesetval == NULL) ||
|
||||
@ -10199,15 +10192,10 @@ cmdVNCDisplay(vshControl *ctl, const vshCmd *cmd)
|
||||
if (!doc)
|
||||
goto cleanup;
|
||||
|
||||
xml = xmlReadDoc((const xmlChar *) doc, "domain.xml", NULL,
|
||||
XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||
XML_PARSE_NOWARNING);
|
||||
xml = virXMLParseStringCtxt(doc, "domain.xml", &ctxt);
|
||||
VIR_FREE(doc);
|
||||
if (!xml)
|
||||
goto cleanup;
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
if (!ctxt)
|
||||
goto cleanup;
|
||||
|
||||
obj = xmlXPathEval(BAD_CAST "string(/domain/devices/graphics[@type='vnc']/@port)", ctxt);
|
||||
if ((obj == NULL) || (obj->type != XPATH_STRING) ||
|
||||
@ -10272,15 +10260,10 @@ cmdTTYConsole(vshControl *ctl, const vshCmd *cmd)
|
||||
if (!doc)
|
||||
goto cleanup;
|
||||
|
||||
xml = xmlReadDoc((const xmlChar *) doc, "domain.xml", NULL,
|
||||
XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||
XML_PARSE_NOWARNING);
|
||||
xml = virXMLParseStringCtxt(doc, "domain.xml", &ctxt);
|
||||
VIR_FREE(doc);
|
||||
if (!xml)
|
||||
goto cleanup;
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
if (!ctxt)
|
||||
goto cleanup;
|
||||
|
||||
obj = xmlXPathEval(BAD_CAST "string(/domain/devices/console/@tty)", ctxt);
|
||||
if ((obj == NULL) || (obj->type != XPATH_STRING) ||
|
||||
@ -10664,19 +10647,12 @@ cmdDetachInterface(vshControl *ctl, const vshCmd *cmd)
|
||||
if (!doc)
|
||||
goto cleanup;
|
||||
|
||||
xml = xmlReadDoc((const xmlChar *) doc, "domain.xml", NULL,
|
||||
XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||
XML_PARSE_NOWARNING);
|
||||
xml = virXMLParseStringCtxt(doc, "domain.xml", &ctxt);
|
||||
VIR_FREE(doc);
|
||||
if (!xml) {
|
||||
vshError(ctl, "%s", _("Failed to get interface information"));
|
||||
goto cleanup;
|
||||
}
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
if (!ctxt) {
|
||||
vshError(ctl, "%s", _("Failed to get interface information"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
snprintf(buf, sizeof(buf), "/domain/devices/interface[@type='%s']", type);
|
||||
obj = xmlXPathEval(BAD_CAST buf, ctxt);
|
||||
@ -11138,19 +11114,12 @@ cmdDetachDisk(vshControl *ctl, const vshCmd *cmd)
|
||||
if (!doc)
|
||||
goto cleanup;
|
||||
|
||||
xml = xmlReadDoc((const xmlChar *) doc, "domain.xml", NULL,
|
||||
XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||
XML_PARSE_NOWARNING);
|
||||
xml = virXMLParseStringCtxt(doc, "domain.xml", &ctxt);
|
||||
VIR_FREE(doc);
|
||||
if (!xml) {
|
||||
vshError(ctl, "%s", _("Failed to get disk information"));
|
||||
goto cleanup;
|
||||
}
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
if (!ctxt) {
|
||||
vshError(ctl, "%s", _("Failed to get disk information"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
obj = xmlXPathEval(BAD_CAST "/domain/devices/disk", ctxt);
|
||||
if ((obj == NULL) || (obj->type != XPATH_NODESET) ||
|
||||
@ -11865,14 +11834,9 @@ cmdSnapshotCreate(vshControl *ctl, const vshCmd *cmd)
|
||||
if (!doc)
|
||||
goto cleanup;
|
||||
|
||||
xml = xmlReadDoc((const xmlChar *) doc, "domainsnapshot.xml", NULL,
|
||||
XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||
XML_PARSE_NOWARNING);
|
||||
xml = virXMLParseStringCtxt(doc, "domainsnapshot.xml", &ctxt);
|
||||
if (!xml)
|
||||
goto cleanup;
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
if (!ctxt)
|
||||
goto cleanup;
|
||||
|
||||
name = virXPathString("string(/domainsnapshot/name)", ctxt);
|
||||
if (!name) {
|
||||
@ -11974,14 +11938,9 @@ cmdSnapshotCreateAs(vshControl *ctl, const vshCmd *cmd)
|
||||
if (!doc)
|
||||
goto cleanup;
|
||||
|
||||
xml = xmlReadDoc((const xmlChar *) doc, "domainsnapshot.xml", NULL,
|
||||
XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||
XML_PARSE_NOWARNING);
|
||||
xml = virXMLParseStringCtxt(doc, "domainsnapshot.xml", &ctxt);
|
||||
if (!xml)
|
||||
goto cleanup;
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
if (!ctxt)
|
||||
goto cleanup;
|
||||
|
||||
parsed_name = virXPathString("string(/domainsnapshot/name)", ctxt);
|
||||
if (!parsed_name) {
|
||||
@ -12056,16 +12015,9 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd)
|
||||
xmlDocPtr xmldoc = NULL;
|
||||
xmlXPathContextPtr ctxt = NULL;
|
||||
|
||||
xmldoc = xmlReadDoc((const xmlChar *) xml, "domainsnapshot.xml",
|
||||
NULL, XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||
XML_PARSE_NOWARNING);
|
||||
xmldoc = virXMLParseStringCtxt(xml, "domainsnapshot.xml", &ctxt);
|
||||
if (!xmldoc)
|
||||
goto cleanup;
|
||||
ctxt = xmlXPathNewContext(xmldoc);
|
||||
if (!ctxt) {
|
||||
xmlFreeDoc(xmldoc);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
name = virXPathString("string(/domainsnapshot/name)", ctxt);
|
||||
xmlXPathFreeContext(ctxt);
|
||||
@ -12165,14 +12117,9 @@ cmdSnapshotList(vshControl *ctl, const vshCmd *cmd)
|
||||
if (!doc)
|
||||
continue;
|
||||
|
||||
xml = xmlReadDoc((const xmlChar *) doc, "domainsnapshot.xml", NULL,
|
||||
XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||
XML_PARSE_NOWARNING);
|
||||
xml = virXMLParseStringCtxt(doc, "domainsnapshot.xml", &ctxt);
|
||||
if (!xml)
|
||||
continue;
|
||||
ctxt = xmlXPathNewContext(xml);
|
||||
if (!ctxt)
|
||||
continue;
|
||||
|
||||
state = virXPathString("string(/domainsnapshot/state)", ctxt);
|
||||
if (state == NULL)
|
||||
@ -12312,14 +12259,9 @@ cmdSnapshotParent(vshControl *ctl, const vshCmd *cmd)
|
||||
if (!xml)
|
||||
goto cleanup;
|
||||
|
||||
xmldoc = xmlReadDoc((const xmlChar *) xml, "domainsnapshot.xml", NULL,
|
||||
XML_PARSE_NOENT | XML_PARSE_NONET |
|
||||
XML_PARSE_NOWARNING);
|
||||
xmldoc = virXMLParseStringCtxt(xml, "domainsnapshot.xml", &ctxt);
|
||||
if (!xmldoc)
|
||||
goto cleanup;
|
||||
ctxt = xmlXPathNewContext(xmldoc);
|
||||
if (!ctxt)
|
||||
goto cleanup;
|
||||
|
||||
parent = virXPathString("string(/domainsnapshot/parent/name)", ctxt);
|
||||
if (!parent)
|
||||
|
Loading…
Reference in New Issue
Block a user