--- tools/virsh-domain.c | 117 ++++++++++++++------------------------------------- 1 file changed, 31 insertions(+), 86 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 727a42a..0d00440 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -2359,7 +2359,7 @@ cmdDomIfSetLink(vshControl *ctl, const vshCmd *cmd) xmlXPathContextPtr ctxt = NULL; xmlXPathObjectPtr obj = NULL; xmlNodePtr cur = NULL; - xmlBufferPtr xml_buf = NULL; + char *xml_buf = NULL; if (!(dom = vshCommandOptDomain(ctl, cmd, NULL))) return false; @@ -2464,18 +2464,13 @@ hit: goto cleanup; } - xml_buf = xmlBufferCreate(); - if (!xml_buf) { - vshError(ctl, _("Failed to allocate memory")); - goto cleanup; - } - - if (xmlNodeDump(xml_buf, xml, obj->nodesetval->nodeTab[i], 0, 0) < 0) { + if (!(xml_buf = virXMLNodeDump(xml, obj->nodesetval->nodeTab[i]))) { + vshSaveLibvirtError(); vshError(ctl, _("Failed to create XML")); goto cleanup; } - if (virDomainUpdateDeviceFlags(dom, (char *)xmlBufferContent(xml_buf), flags) < 0) { + if (virDomainUpdateDeviceFlags(dom, xml_buf, flags) < 0) { vshError(ctl, _("Failed to update interface link state")); goto cleanup; } else { @@ -2487,10 +2482,8 @@ cleanup: xmlXPathFreeObject(obj); xmlXPathFreeContext(ctxt); xmlFreeDoc(xml); - xmlBufferFree(xml_buf); - - if (dom) - virDomainFree(dom); + VIR_FREE(xml_buf); + virDomainFree(dom); return ret; } @@ -6080,11 +6073,10 @@ cmdCPUCompare(vshControl *ctl, const vshCmd *cmd) bool ret = false; char *buffer; int result; - const char *snippet; + char *snippet = NULL; xmlDocPtr xml = NULL; xmlXPathContextPtr ctxt = NULL; - xmlBufferPtr xml_buf = NULL; xmlNodePtr node; if (vshCommandOptStringReq(ctl, cmd, "file", &from) < 0) @@ -6100,17 +6092,10 @@ cmdCPUCompare(vshControl *ctl, const vshCmd *cmd) if ((node = virXPathNode("/cpu|" "/domain/cpu|" "/capabilities/host/cpu", ctxt))) { - if (!(xml_buf = xmlBufferCreate())) { - vshError(ctl, _("Can't create XML buffer to extract CPU element.")); - goto cleanup; - } - - if (xmlNodeDump(xml_buf, xml, node, 0, 0) < 0) { - vshError(ctl, _("Failed to extract CPU element snippet from domain XML.")); + if (!(snippet = virXMLNodeDump(xml, node))) { + vshSaveLibvirtError(); goto cleanup; } - - snippet = (const char *) xmlBufferContent(xml_buf); } else { vshError(ctl, _("File '%s' does not contain a <cpu> element or is not " "a valid domain or capabilities XML"), from); @@ -6146,7 +6131,7 @@ cmdCPUCompare(vshControl *ctl, const vshCmd *cmd) cleanup: VIR_FREE(buffer); - xmlBufferFree(xml_buf); + VIR_FREE(snippet); xmlXPathFreeContext(ctxt); xmlFreeDoc(xml); @@ -6193,7 +6178,6 @@ cmdCPUBaseline(vshControl *ctl, const vshCmd *cmd) xmlDocPtr xml = NULL; xmlNodePtr *node_list = NULL; xmlXPathContextPtr ctxt = NULL; - xmlBufferPtr xml_buf = NULL; virBuffer buf = VIR_BUFFER_INITIALIZER; size_t i; @@ -6229,18 +6213,11 @@ cmdCPUBaseline(vshControl *ctl, const vshCmd *cmd) list = vshCalloc(ctl, count, sizeof(const char *)); - if (!(xml_buf = xmlBufferCreate())) - goto no_memory; - for (i = 0; i < count; i++) { - xmlBufferEmpty(xml_buf); - - if (xmlNodeDump(xml_buf, xml, node_list[i], 0, 0) < 0) { - vshError(ctl, _("Failed to extract <cpu> element")); + if (!(list[i] = virXMLNodeDump(xml, node_list[i]))) { + vshSaveLibvirtError(); goto cleanup; } - - list[i] = vshStrdup(ctl, (const char *)xmlBufferContent(xml_buf)); } result = virConnectBaselineCPU(ctl->conn, @@ -6254,7 +6231,6 @@ cmdCPUBaseline(vshControl *ctl, const vshCmd *cmd) cleanup: xmlXPathFreeContext(ctxt); xmlFreeDoc(xml); - xmlBufferFree(xml_buf); VIR_FREE(result); if (list != NULL && count > 0) { for (i = 0; i < count; i++) @@ -9630,7 +9606,7 @@ cmdDetachInterface(vshControl *ctl, const vshCmd *cmd) xmlXPathObjectPtr obj=NULL; xmlXPathContextPtr ctxt = NULL; xmlNodePtr cur = NULL, matchNode = NULL; - xmlBufferPtr xml_buf = NULL; + char *detach_xml = NULL; const char *mac =NULL, *type = NULL; char *doc = NULL; char buf[64]; @@ -9723,25 +9699,16 @@ cmdDetachInterface(vshControl *ctl, const vshCmd *cmd) goto cleanup; } - hit: - xml_buf = xmlBufferCreate(); - if (!xml_buf) { - vshError(ctl, "%s", _("Failed to allocate memory")); - goto cleanup; - } - - if (xmlNodeDump(xml_buf, xml, matchNode, 0, 0) < 0) { - vshError(ctl, "%s", _("Failed to create XML")); +hit: + if (!(detach_xml = virXMLNodeDump(xml, matchNode))) { + vshSaveLibvirtError(); goto cleanup; } - if (flags != 0) { - ret = virDomainDetachDeviceFlags(dom, - (char *)xmlBufferContent(xml_buf), - flags); - } else { - ret = virDomainDetachDevice(dom, (char *)xmlBufferContent(xml_buf)); - } + if (flags != 0) + ret = virDomainDetachDeviceFlags(dom, detach_xml, flags); + else + ret = virDomainDetachDevice(dom, detach_xml); if (ret != 0) { vshError(ctl, "%s", _("Failed to detach interface")); @@ -9750,13 +9717,13 @@ cmdDetachInterface(vshControl *ctl, const vshCmd *cmd) functionReturn = true; } - cleanup: +cleanup: VIR_FREE(doc); + VIR_FREE(detach_xml); virDomainFree(dom); xmlXPathFreeObject(obj); xmlXPathFreeContext(ctxt); xmlFreeDoc(xml); - xmlBufferFree(xml_buf); return functionReturn; } @@ -9874,21 +9841,14 @@ vshPrepareDiskXML(xmlNodePtr disk_node, int type) { xmlNodePtr cur = NULL; - xmlBufferPtr xml_buf = NULL; - char *disk_type = NULL; - char *device_type = NULL; + const char *disk_type = NULL; + const char *device_type = NULL; xmlNodePtr new_node = NULL; char *ret = NULL; if (!disk_node) return NULL; - xml_buf = xmlBufferCreate(); - if (!xml_buf) { - vshError(NULL, "%s", _("Failed to allocate memory")); - return NULL; - } - device_type = virXMLPropString(disk_node, "device"); if (STREQ_NULLABLE(device_type, "cdrom") || @@ -9910,7 +9870,7 @@ vshPrepareDiskXML(xmlNodePtr disk_node, if (type == VSH_PREPARE_DISK_XML_EJECT) { vshError(NULL, _("The disk device '%s' doesn't have media"), path); - goto error; + goto cleanup; } if (source) { @@ -9922,10 +9882,10 @@ vshPrepareDiskXML(xmlNodePtr disk_node, xmlAddChild(disk_node, new_node); } else if (type == VSH_PREPARE_DISK_XML_INSERT) { vshError(NULL, _("No source is specified for inserting media")); - goto error; + goto cleanup; } else if (type == VSH_PREPARE_DISK_XML_UPDATE) { vshError(NULL, _("No source is specified for updating media")); - goto error; + goto cleanup; } } @@ -9933,7 +9893,7 @@ vshPrepareDiskXML(xmlNodePtr disk_node, if (type == VSH_PREPARE_DISK_XML_INSERT) { vshError(NULL, _("The disk device '%s' already has media"), path); - goto error; + goto cleanup; } /* Remove the source if it tends to eject/update media. */ @@ -9949,30 +9909,15 @@ vshPrepareDiskXML(xmlNodePtr disk_node, } } - if (xmlNodeDump(xml_buf, NULL, disk_node, 0, 0) < 0) { - vshError(NULL, "%s", _("Failed to create XML")); - goto error; + if (!(ret = virXMLNodeDump(NULL, disk_node))) { + vshSaveLibvirtError(); + goto cleanup; } - goto cleanup; - cleanup: VIR_FREE(device_type); VIR_FREE(disk_type); - if (xml_buf) { - int len = xmlBufferLength(xml_buf); - if (VIR_ALLOC_N(ret, len + 1) < 0) - return NULL; - memcpy(ret, (char *)xmlBufferContent(xml_buf), len); - ret[len] = '\0'; - xmlBufferFree(xml_buf); - } return ret; - -error: - xmlBufferFree(xml_buf); - xml_buf = NULL; - goto cleanup; } -- 1.8.3.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list