From efd32528d032de1defbabe9df9bd177fecd32770 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 18 May 2018 14:04:21 +0200 Subject: [PATCH] util: qemu: Introduce helper for formatting command line from new object props MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/libvirt_private.syms | 1 + src/util/virqemu.c | 40 ++++++++++++++++++++++++++++++++++++---- src/util/virqemu.h | 3 +++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 23d5591093..db241c9e94 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2601,6 +2601,7 @@ virQEMUBuildCommandLineJSON; virQEMUBuildCommandLineJSONArrayBitmap; virQEMUBuildCommandLineJSONArrayNumbered; virQEMUBuildDriveCommandlineFromJSON; +virQEMUBuildObjectCommandlineFromJSON; virQEMUBuildObjectCommandlineFromJSONType; virQEMUBuildQemuImgKeySecretOpts; diff --git a/src/util/virqemu.c b/src/util/virqemu.c index fc4727e126..1390b68b86 100644 --- a/src/util/virqemu.c +++ b/src/util/virqemu.c @@ -241,6 +241,29 @@ virQEMUBuildCommandLineJSON(virJSONValuePtr value, } +static int +virQEMUBuildObjectCommandlineFromJSONInternal(virBufferPtr buf, + const char *type, + const char *alias, + virJSONValuePtr props) +{ + if (!type || !alias) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("missing 'type' or 'alias' field of QOM 'object'")); + return -1; + } + + virBufferAsprintf(buf, "%s,id=%s,", type, alias); + + if (props && + virQEMUBuildCommandLineJSON(props, buf, + virQEMUBuildCommandLineJSONArrayBitmap) < 0) + return -1; + + return 0; +} + + char * virQEMUBuildObjectCommandlineFromJSONType(const char *type, const char *alias, @@ -249,10 +272,7 @@ virQEMUBuildObjectCommandlineFromJSONType(const char *type, virBuffer buf = VIR_BUFFER_INITIALIZER; char *ret = NULL; - virBufferAsprintf(&buf, "%s,id=%s,", type, alias); - - if (virQEMUBuildCommandLineJSON(props, &buf, - virQEMUBuildCommandLineJSONArrayBitmap) < 0) + if (virQEMUBuildObjectCommandlineFromJSONInternal(&buf, type, alias, props) < 0) goto cleanup; if (virBufferCheckError(&buf) < 0) @@ -266,6 +286,18 @@ virQEMUBuildObjectCommandlineFromJSONType(const char *type, } +int +virQEMUBuildObjectCommandlineFromJSON(virBufferPtr buf, + virJSONValuePtr objprops) +{ + const char *type = virJSONValueObjectGetString(objprops, "qom-type"); + const char *alias = virJSONValueObjectGetString(objprops, "id"); + virJSONValuePtr props = virJSONValueObjectGetObject(objprops, "props"); + + return virQEMUBuildObjectCommandlineFromJSONInternal(buf, type, alias, props); +} + + char * virQEMUBuildDriveCommandlineFromJSON(virJSONValuePtr srcdef) { diff --git a/src/util/virqemu.h b/src/util/virqemu.h index 0ef8e8d31d..0a4f4468f2 100644 --- a/src/util/virqemu.h +++ b/src/util/virqemu.h @@ -47,6 +47,9 @@ char *virQEMUBuildObjectCommandlineFromJSONType(const char *type, const char *alias, virJSONValuePtr props); +int virQEMUBuildObjectCommandlineFromJSON(virBufferPtr buf, + virJSONValuePtr objprops); + char *virQEMUBuildDriveCommandlineFromJSON(virJSONValuePtr src); void virQEMUBuildBufferEscapeComma(virBufferPtr buf, const char *str); -- 2.47.2