Always use appropriate qemuDomain{,Def}Format wrapper since it may do some additional magic based on the flags. --- src/qemu/qemu_domain.c | 32 +++++++++++++++++++++++++++----- src/qemu/qemu_domain.h | 5 +++++ src/qemu/qemu_driver.c | 9 +++++---- src/qemu/qemu_migration.c | 22 +++++++++++++--------- src/qemu/qemu_process.c | 8 ++++---- 5 files changed, 54 insertions(+), 22 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 4dda2e0..b105644 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1223,11 +1223,13 @@ void qemuDomainObjExitRemoteWithDriver(struct qemud_driver *driver, } -char *qemuDomainDefFormatXML(struct qemud_driver *driver, - virDomainDefPtr def, - unsigned int flags) +int +qemuDomainDefFormatBuf(struct qemud_driver *driver, + virDomainDefPtr def, + unsigned int flags, + virBuffer *buf) { - char *ret = NULL; + int ret = -1; virCPUDefPtr cpu = NULL; virCPUDefPtr def_cpu = def->cpu; @@ -1247,7 +1249,7 @@ char *qemuDomainDefFormatXML(struct qemud_driver *driver, def->cpu = cpu; } - ret = virDomainDefFormat(def, flags); + ret = virDomainDefFormatInternal(def, flags, buf); cleanup: def->cpu = def_cpu; @@ -1255,6 +1257,26 @@ cleanup: return ret; } +char *qemuDomainDefFormatXML(struct qemud_driver *driver, + virDomainDefPtr def, + unsigned int flags) +{ + virBuffer buf = VIR_BUFFER_INITIALIZER; + + if (qemuDomainDefFormatBuf(driver, def, flags, &buf) < 0) { + virBufferFreeAndReset(&buf); + return NULL; + } + + if (virBufferError(&buf)) { + virReportOOMError(); + virBufferFreeAndReset(&buf); + return NULL; + } + + return virBufferContentAndReset(&buf); +} + char *qemuDomainFormatXML(struct qemud_driver *driver, virDomainObjPtr vm, unsigned int flags) diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index ce52569..0be99b1 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -249,6 +249,11 @@ void qemuDomainObjExitRemoteWithDriver(struct qemud_driver *driver, virDomainObjPtr obj) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); +int qemuDomainDefFormatBuf(struct qemud_driver *driver, + virDomainDefPtr vm, + unsigned int flags, + virBuffer *buf); + char *qemuDomainDefFormatXML(struct qemud_driver *driver, virDomainDefPtr vm, unsigned int flags); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index c100a1a..a207e33 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4551,7 +4551,7 @@ static char *qemuDomainXMLFromNative(virConnectPtr conn, goto cleanup; } - xml = virDomainDefFormat(def, VIR_DOMAIN_XML_INACTIVE); + xml = qemuDomainDefFormatXML(driver, def, VIR_DOMAIN_XML_INACTIVE); cleanup: virDomainDefFree(def); @@ -10972,9 +10972,10 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, snap->def->current = true; if (snap->def->dom) { char *xml; - if (!(xml = virDomainDefFormat(snap->def->dom, - (VIR_DOMAIN_XML_INACTIVE | - VIR_DOMAIN_XML_SECURE)))) + if (!(xml = qemuDomainDefFormatXML(driver, + snap->def->dom, + VIR_DOMAIN_XML_INACTIVE | + VIR_DOMAIN_XML_SECURE))) goto cleanup; config = virDomainDefParseString(driver->caps, xml, QEMU_EXPECTED_VIRT_TYPES, diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 3a420be..d03b1c6 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -390,7 +390,8 @@ static void qemuMigrationCookieGraphicsXMLFormat(virBufferPtr buf, static int -qemuMigrationCookieXMLFormat(virBufferPtr buf, +qemuMigrationCookieXMLFormat(struct qemud_driver *driver, + virBufferPtr buf, qemuMigrationCookiePtr mig) { char uuidstr[VIR_UUID_STRING_BUFLEN]; @@ -428,10 +429,11 @@ qemuMigrationCookieXMLFormat(virBufferPtr buf, if ((mig->flags & QEMU_MIGRATION_COOKIE_PERSISTENT) && mig->persistent) { virBufferAdjustIndent(buf, 2); - if (virDomainDefFormatInternal(mig->persistent, - VIR_DOMAIN_XML_INACTIVE | - VIR_DOMAIN_XML_SECURE, - buf) < 0) + if (qemuDomainDefFormatBuf(driver, + mig->persistent, + VIR_DOMAIN_XML_INACTIVE | + VIR_DOMAIN_XML_SECURE, + buf) < 0) return -1; virBufferAdjustIndent(buf, -2); } @@ -441,11 +443,12 @@ qemuMigrationCookieXMLFormat(virBufferPtr buf, } -static char *qemuMigrationCookieXMLFormatStr(qemuMigrationCookiePtr mig) +static char *qemuMigrationCookieXMLFormatStr(struct qemud_driver *driver, + qemuMigrationCookiePtr mig) { virBuffer buf = VIR_BUFFER_INITIALIZER; - if (qemuMigrationCookieXMLFormat(&buf, mig) < 0) { + if (qemuMigrationCookieXMLFormat(driver, &buf, mig) < 0) { virBufferFreeAndReset(&buf); return NULL; } @@ -717,7 +720,7 @@ qemuMigrationBakeCookie(qemuMigrationCookiePtr mig, qemuMigrationCookieAddPersistent(mig, dom) < 0) return -1; - if (!(*cookieout = qemuMigrationCookieXMLFormatStr(mig))) + if (!(*cookieout = qemuMigrationCookieXMLFormatStr(driver, mig))) return -1; *cookieoutlen = strlen(*cookieout) + 1; @@ -1235,7 +1238,8 @@ qemuMigrationPrepareAny(struct qemud_driver *driver, char *xml; int hookret; - if (!(xml = virDomainDefFormat(def, VIR_DOMAIN_XML_SECURE))) + if (!(xml = qemuDomainDefFormatXML(driver, def, + VIR_DOMAIN_XML_SECURE))) goto cleanup; hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, def->name, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index f1401e1..b8e0f5f 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3322,7 +3322,7 @@ int qemuProcessStart(virConnectPtr conn, /* Run an early hook to set-up missing devices */ if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { - char *xml = virDomainDefFormat(vm->def, 0); + char *xml = qemuDomainDefFormatXML(driver, vm->def, 0); int hookret; hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name, @@ -3516,7 +3516,7 @@ int qemuProcessStart(virConnectPtr conn, /* now that we know it is about to start call the hook if present */ if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { - char *xml = virDomainDefFormat(vm->def, 0); + char *xml = qemuDomainDefFormatXML(driver, vm->def, 0); int hookret; hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name, @@ -3956,7 +3956,7 @@ void qemuProcessStop(struct qemud_driver *driver, /* now that we know it's stopped call the hook if present */ if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { - char *xml = virDomainDefFormat(vm->def, 0); + char *xml = qemuDomainDefFormatXML(driver, vm->def, 0); /* we can't stop the operation even if the script raised an error */ virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name, @@ -4049,7 +4049,7 @@ retry: /* The "release" hook cleans up additional resources */ if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { - char *xml = virDomainDefFormat(vm->def, 0); + char *xml = qemuDomainDefFormatXML(driver, vm->def, 0); /* we can't stop the operation even if the script raised an error */ virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name, -- 1.7.8.6 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list