char * virCPUDefFormat(virCPUDefPtr def, virDomainNumaPtr numa) { virBuffer buf = VIR_BUFFER_INITIALIZER; if (virCPUDefFormatBufFull(&buf, def, numa) < 0) goto cleanup; if (virBufferCheckError(&buf) < 0) goto cleanup; return virBufferContentAndReset(&buf); cleanup: virBufferFreeAndReset(&buf); return NULL; }
char * virCPUDefFormat(virCPUDefPtr def, unsigned int flags) { virBuffer buf = VIR_BUFFER_INITIALIZER; if (virCPUDefFormatBufFull(&buf, def, flags) < 0) goto cleanup; if (virBufferError(&buf)) goto no_memory; return virBufferContentAndReset(&buf); no_memory: virReportOOMError(); cleanup: virBufferFreeAndReset(&buf); return NULL; }
static int qemuMigrationCookieXMLFormat(virQEMUDriverPtr driver, virBufferPtr buf, qemuMigrationCookiePtr mig) { char uuidstr[VIR_UUID_STRING_BUFLEN]; char hostuuidstr[VIR_UUID_STRING_BUFLEN]; size_t i; virUUIDFormat(mig->uuid, uuidstr); virUUIDFormat(mig->localHostuuid, hostuuidstr); virBufferAddLit(buf, "<qemu-migration>\n"); virBufferAdjustIndent(buf, 2); virBufferEscapeString(buf, "<name>%s</name>\n", mig->name); virBufferAsprintf(buf, "<uuid>%s</uuid>\n", uuidstr); virBufferEscapeString(buf, "<hostname>%s</hostname>\n", mig->localHostname); virBufferAsprintf(buf, "<hostuuid>%s</hostuuid>\n", hostuuidstr); for (i = 0; i < QEMU_MIGRATION_COOKIE_FLAG_LAST; i++) { if (mig->flagsMandatory & (1 << i)) virBufferAsprintf(buf, "<feature name='%s'/>\n", qemuMigrationCookieFlagTypeToString(i)); } if ((mig->flags & QEMU_MIGRATION_COOKIE_GRAPHICS) && mig->graphics) qemuMigrationCookieGraphicsXMLFormat(buf, mig->graphics); if ((mig->flags & QEMU_MIGRATION_COOKIE_LOCKSTATE) && mig->lockState) { virBufferAsprintf(buf, "<lockstate driver='%s'>\n", mig->lockDriver); virBufferAdjustIndent(buf, 2); virBufferAsprintf(buf, "<leases>%s</leases>\n", mig->lockState); virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "</lockstate>\n"); } if ((mig->flags & QEMU_MIGRATION_COOKIE_PERSISTENT) && mig->persistent) { if (qemuDomainDefFormatBuf(driver, mig->persistent, VIR_DOMAIN_XML_INACTIVE | VIR_DOMAIN_XML_SECURE | VIR_DOMAIN_XML_MIGRATABLE, buf) < 0) return -1; } if ((mig->flags & QEMU_MIGRATION_COOKIE_NETWORK) && mig->network) qemuMigrationCookieNetworkXMLFormat(buf, mig->network); if ((mig->flags & QEMU_MIGRATION_COOKIE_NBD) && mig->nbd) { virBufferAddLit(buf, "<nbd"); if (mig->nbd->port) virBufferAsprintf(buf, " port='%d'", mig->nbd->port); if (mig->nbd->ndisks) { virBufferAddLit(buf, ">\n"); virBufferAdjustIndent(buf, 2); for (i = 0; i < mig->nbd->ndisks; i++) { virBufferEscapeString(buf, "<disk target='%s'", mig->nbd->disks[i].target); virBufferAsprintf(buf, " capacity='%llu'/>\n", mig->nbd->disks[i].capacity); } virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "</nbd>\n"); } else { virBufferAddLit(buf, "/>\n"); } } if (mig->flags & QEMU_MIGRATION_COOKIE_STATS && mig->jobInfo) qemuMigrationCookieStatisticsXMLFormat(buf, mig->jobInfo); if (mig->flags & QEMU_MIGRATION_COOKIE_CPU && mig->cpu) virCPUDefFormatBufFull(buf, mig->cpu, NULL); if (mig->flags & QEMU_MIGRATION_COOKIE_ALLOW_REBOOT) qemuDomainObjPrivateXMLFormatAllowReboot(buf, mig->allowReboot); virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "</qemu-migration>\n"); return 0; }