unsigned int flags)
{
const char *model = virDomainMemballoonModelTypeToString(def->model);
- virBuffer childrenBuf = VIR_BUFFER_INITIALIZER;
- int ret = -1;
+ VIR_AUTOCLEAN(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
+ VIR_AUTOCLEAN(virBuffer) childrenBuf = VIR_BUFFER_INITIALIZER;
+ VIR_AUTOCLEAN(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
if (!model) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected memballoon model %d"), def->model);
- goto cleanup;
+ return -1;
}
- virBufferAsprintf(buf, "<memballoon model='%s'", model);
+ virBufferAsprintf(&attrBuf, " model='%s'", model);
if (def->autodeflate != VIR_TRISTATE_SWITCH_ABSENT)
- virBufferAsprintf(buf, " autodeflate='%s'",
+ virBufferAsprintf(&attrBuf, " autodeflate='%s'",
virTristateSwitchTypeToString(def->autodeflate));
virBufferSetChildIndent(&childrenBuf, buf);
virBufferAsprintf(&childrenBuf, "<stats period='%i'/>\n", def->period);
if (virDomainDeviceInfoFormat(&childrenBuf, &def->info, flags) < 0)
- goto cleanup;
-
- if (def->virtio) {
- virBuffer driverBuf = VIR_BUFFER_INITIALIZER;
-
- virDomainVirtioOptionsFormat(&driverBuf, def->virtio);
-
- if (virBufferCheckError(&driverBuf) < 0)
- goto cleanup;
-
- if (virBufferUse(&driverBuf)) {
- virBufferAddLit(&childrenBuf, "<driver");
- virBufferAddBuffer(&childrenBuf, &driverBuf);
- virBufferAddLit(&childrenBuf, "/>\n");
- }
- }
-
- if (virBufferCheckError(&childrenBuf) < 0)
- goto cleanup;
-
- if (!virBufferUse(&childrenBuf)) {
- virBufferAddLit(buf, "/>\n");
- } else {
- virBufferAddLit(buf, ">\n");
- virBufferAddBuffer(buf, &childrenBuf);
- virBufferAddLit(buf, "</memballoon>\n");
- }
+ return -1;
- ret = 0;
+ virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
- cleanup:
- virBufferFreeAndReset(&childrenBuf);
+ if (virXMLFormatElement(&childrenBuf, "driver", &driverAttrBuf, NULL) < 0)
+ return -1;
- return ret;
+ return virXMLFormatElement(buf, "memballoon", &attrBuf, &childrenBuf);
}
static int