[libvirt] [PATCH 0/7] util: buffer: Simplify child buffer init

This applies on top of https://www.redhat.com/archives/libvir-list/2019-November/msg00397.html Peter Krempa (7): util: buffer: Add init macro for automatically setting child XML indent qemu: domain: Convert child buffers to use VIR_BUFFER_INIT_CHILD util: sysinfo: Convert child buffers to use VIR_BUFFER_INIT_CHILD conf: caps: sysinfo: Convert child buffers to use VIR_BUFFER_INIT_CHILD conf: cpu: Convert child buffers to use VIR_BUFFER_INIT_CHILD conf: domain: Convert child buffers to use VIR_BUFFER_INIT_CHILD util: buffer: remove virBufferSetChildIndent src/conf/capabilities.c | 13 ++---- src/conf/cpu_conf.c | 3 +- src/conf/domain_conf.c | 101 +++++++++++----------------------------- src/qemu/qemu_domain.c | 35 ++++---------- src/util/virbuffer.h | 18 +++---- src/util/virsysinfo.c | 4 +- 6 files changed, 52 insertions(+), 122 deletions(-) -- 2.23.0

Add a new macro which initializes a virBuffer on the stack and also sets the indent level to be used for child XML element formatting. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/util/virbuffer.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/util/virbuffer.h b/src/util/virbuffer.h index 8eb9608c71..a2e30c07dc 100644 --- a/src/util/virbuffer.h +++ b/src/util/virbuffer.h @@ -35,6 +35,15 @@ typedef virBuffer *virBufferPtr; #define VIR_BUFFER_INITIALIZER { NULL, 0 } +/** + * VIR_BUFFER_INIT_CHILD: + * @parentbuf: parent buffer for XML element formatting + * + * Intitialize a virBuffer structure and set up the indentation level for + * formatting XML subelements of @parentbuf. + */ +#define VIR_BUFFER_INIT_CHILD(parentbuf) { NULL, (parentbuf)->indent + 2 } + struct _virBuffer { GString *str; int indent; -- 2.23.0

Use the new helper to initialize child XML element buffers. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_domain.c | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 58a82fbd60..16cbc41118 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2298,7 +2298,7 @@ static int qemuStorageSourcePrivateDataFormat(virStorageSourcePtr src, virBufferPtr buf) { - g_auto(virBuffer) tmp = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) tmp = VIR_BUFFER_INIT_CHILD(buf); qemuDomainStorageSourcePrivatePtr srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src); int ret = -1; @@ -2317,8 +2317,6 @@ qemuStorageSourcePrivateDataFormat(virStorageSourcePtr src, if (virStorageSourcePrivateDataFormatRelPath(src, buf) < 0) goto cleanup; - virBufferSetChildIndent(&tmp, buf); - if (srcPriv) { qemuStorageSourcePrivateDataFormatSecinfo(&tmp, srcPriv->secinfo, "auth"); qemuStorageSourcePrivateDataFormatSecinfo(&tmp, srcPriv->encinfo, "encryption"); @@ -2444,11 +2442,9 @@ qemuDomainObjPrivateXMLFormatBlockjobFormatSource(virBufferPtr buf, bool chain) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); unsigned int xmlflags = VIR_DOMAIN_DEF_FORMAT_STATUS; - virBufferSetChildIndent(&childBuf, buf); - virBufferAsprintf(&attrBuf, " type='%s' format='%s'", virStorageTypeToString(src->type), virStorageFileFormatTypeToString(src->format)); @@ -2471,20 +2467,17 @@ qemuDomainObjPrivateXMLFormatBlockjobIterator(void *payload, const void *name G_GNUC_UNUSED, void *opaque) { + struct qemuDomainPrivateBlockJobFormatData *data = opaque; g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) chainsBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(data->buf); + g_auto(virBuffer) chainsBuf = VIR_BUFFER_INIT_CHILD(&childBuf); qemuBlockJobDataPtr job = payload; const char *state = qemuBlockjobStateTypeToString(job->state); const char *newstate = NULL; - struct qemuDomainPrivateBlockJobFormatData *data = opaque; if (job->newstate != -1) newstate = qemuBlockjobStateTypeToString(job->newstate); - virBufferSetChildIndent(&childBuf, data->buf); - virBufferSetChildIndent(&chainsBuf, &childBuf); - virBufferEscapeString(&attrBuf, " name='%s'", job->name); virBufferEscapeString(&attrBuf, " type='%s'", qemuBlockjobTypeToString(job->type)); virBufferEscapeString(&attrBuf, " state='%s'", state); @@ -2567,7 +2560,7 @@ qemuDomainObjPrivateXMLFormatBlockjobs(virBufferPtr buf, { qemuDomainObjPrivatePtr priv = vm->privateData; g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); bool bj = qemuDomainHasBlockjob(vm, false); struct qemuDomainPrivateBlockJobFormatData iterdata = { priv->driver->xmlopt, &childBuf }; @@ -2575,8 +2568,6 @@ qemuDomainObjPrivateXMLFormatBlockjobs(virBufferPtr buf, virBufferAsprintf(&attrBuf, " active='%s'", virTristateBoolTypeToString(virTristateBoolFromBool(bj))); - virBufferSetChildIndent(&childBuf, buf); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) && virHashForEach(priv->blockjobs, qemuDomainObjPrivateXMLFormatBlockjobIterator, @@ -2613,11 +2604,9 @@ qemuDomainObjPrivateXMLFormatNBDMigrationSource(virBufferPtr buf, virDomainXMLOptionPtr xmlopt) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); int ret = -1; - virBufferSetChildIndent(&childBuf, buf); - virBufferAsprintf(&attrBuf, " type='%s' format='%s'", virStorageTypeToString(src->type), virStorageFileFormatTypeToString(src->format)); @@ -2640,19 +2629,17 @@ qemuDomainObjPrivateXMLFormatNBDMigration(virBufferPtr buf, virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv = vm->privateData; - g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; size_t i; virDomainDiskDefPtr disk; qemuDomainDiskPrivatePtr diskPriv; int ret = -1; for (i = 0; i < vm->def->ndisks; i++) { + g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); disk = vm->def->disks[i]; diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); - virBufferSetChildIndent(&childBuf, buf); - virBufferAsprintf(&attrBuf, " dev='%s' migrating='%s'", disk->dst, diskPriv->migrating ? "yes" : "no"); @@ -2678,7 +2665,7 @@ qemuDomainObjPrivateXMLFormatJob(virBufferPtr buf, qemuDomainObjPrivatePtr priv) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); qemuDomainJob job = priv->job.active; int ret = -1; @@ -2689,8 +2676,6 @@ qemuDomainObjPrivateXMLFormatJob(virBufferPtr buf, priv->job.asyncJob == QEMU_ASYNC_JOB_NONE) return 0; - virBufferSetChildIndent(&childBuf, buf); - virBufferAsprintf(&attrBuf, " type='%s' async='%s'", qemuDomainJobTypeToString(job), qemuDomainAsyncJobTypeToString(priv->job.asyncJob)); -- 2.23.0

Use the new helper to initialize child XML element buffers. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/util/virsysinfo.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/util/virsysinfo.c b/src/util/virsysinfo.c index 9d013067fe..d656b23731 100644 --- a/src/util/virsysinfo.c +++ b/src/util/virsysinfo.c @@ -1482,7 +1482,7 @@ int virSysinfoFormat(virBufferPtr buf, virSysinfoDefPtr def) { virBuffer attrBuf = VIR_BUFFER_INITIALIZER; - virBuffer childrenBuf = VIR_BUFFER_INITIALIZER; + virBuffer childrenBuf = VIR_BUFFER_INIT_CHILD(buf); const char *type = virSysinfoTypeToString(def->type); if (!type) { @@ -1493,8 +1493,6 @@ virSysinfoFormat(virBufferPtr buf, virSysinfoDefPtr def) return -1; } - virBufferSetChildIndent(&childrenBuf, buf); - virSysinfoBIOSFormat(&childrenBuf, def->bios); virSysinfoSystemFormat(&childrenBuf, def->system); virSysinfoBaseBoardFormat(&childrenBuf, def->baseBoard, def->nbaseBoard); -- 2.23.0

Use the new helper to initialize child XML element buffers. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/capabilities.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c index 2657750dbc..a7c246b26a 100644 --- a/src/conf/capabilities.c +++ b/src/conf/capabilities.c @@ -915,7 +915,7 @@ virCapabilitiesFormatResctrlMonitor(virBufferPtr buf, virResctrlInfoMonPtr monitor) { size_t i = 0; - virBuffer childrenBuf = VIR_BUFFER_INITIALIZER; + virBuffer childrenBuf = VIR_BUFFER_INIT_CHILD(buf); /* monitor not supported, no capability */ if (!monitor) @@ -937,7 +937,6 @@ virCapabilitiesFormatResctrlMonitor(virBufferPtr buf, "maxMonitors='%u'>\n", monitor->max_monitor); - virBufferSetChildIndent(&childrenBuf, buf); for (i = 0; i < monitor->nfeatures; i++) { virBufferAsprintf(&childrenBuf, "<feature name='%s'/>\n", @@ -965,7 +964,7 @@ virCapabilitiesFormatCaches(virBufferPtr buf, for (i = 0; i < cache->nbanks; i++) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childrenBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf); virCapsHostCacheBankPtr bank = cache->banks[i]; g_autofree char *cpus_str = virBitmapFormat(bank->cpus); const char *unit = NULL; @@ -985,7 +984,6 @@ virCapabilitiesFormatCaches(virBufferPtr buf, virCacheTypeToString(bank->type), short_size, unit, cpus_str); - virBufferSetChildIndent(&childrenBuf, buf); for (j = 0; j < bank->ncontrols; j++) { const char *min_unit; virResctrlInfoPerCachePtr controls = bank->controls[j]; @@ -1051,7 +1049,7 @@ virCapabilitiesFormatMemoryBandwidth(virBufferPtr buf, for (i = 0; i < memBW->nnodes; i++) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childrenBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf); virCapsHostMemBWNodePtr node = memBW->nodes[i]; virResctrlInfoMemBWPerNodePtr control = &node->control; g_autofree char *cpus_str = virBitmapFormat(node->cpus); @@ -1063,7 +1061,6 @@ virCapabilitiesFormatMemoryBandwidth(virBufferPtr buf, " id='%u' cpus='%s'", node->id, cpus_str); - virBufferSetChildIndent(&childrenBuf, buf); virBufferAsprintf(&childrenBuf, "<control granularity='%u' min ='%u' " "maxAllocs='%u'/>\n", @@ -1214,11 +1211,9 @@ static void virCapabilitiesFormatGuestFeatures(virCapsGuestPtr guest, virBufferPtr buf) { - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); size_t i; - virBufferSetChildIndent(&childBuf, buf); - for (i = 0; i < VIR_CAPS_GUEST_FEATURE_TYPE_LAST; i++) { virCapsGuestFeaturePtr feature = guest->features + i; -- 2.23.0

Use the new helper to initialize child XML element buffers. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/cpu_conf.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c index 2b644638a7..ca048d899a 100644 --- a/src/conf/cpu_conf.c +++ b/src/conf/cpu_conf.c @@ -683,7 +683,7 @@ virCPUDefFormatBufFull(virBufferPtr buf, { int ret = -1; virBuffer attributeBuf = VIR_BUFFER_INITIALIZER; - virBuffer childrenBuf = VIR_BUFFER_INITIALIZER; + virBuffer childrenBuf = VIR_BUFFER_INIT_CHILD(buf); if (!def) return 0; @@ -718,7 +718,6 @@ virCPUDefFormatBufFull(virBufferPtr buf, } /* Format children */ - virBufferSetChildIndent(&childrenBuf, buf); if (def->type == VIR_CPU_TYPE_HOST && def->arch) virBufferAsprintf(&childrenBuf, "<arch>%s</arch>\n", virArchToString(def->arch)); -- 2.23.0

Use the new helper to initialize child XML element buffers. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/conf/domain_conf.c | 101 +++++++++++------------------------------ 1 file changed, 27 insertions(+), 74 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 81ab5eb138..f59f95c5be 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7112,7 +7112,7 @@ virDomainDeviceInfoFormat(virBufferPtr buf, unsigned int flags) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); int ret = -1; if ((flags & VIR_DOMAIN_DEF_FORMAT_ALLOW_BOOT) && info->bootIndex) { @@ -7181,7 +7181,6 @@ virDomainDeviceInfoFormat(virBufferPtr buf, } if (!virZPCIDeviceAddressIsEmpty(&info->addr.pci.zpci)) { - virBufferSetChildIndent(&childBuf, buf); virBufferAsprintf(&childBuf, "<zpci uid='0x%.4x' fid='0x%.8x'/>\n", info->addr.pci.zpci.uid, @@ -24107,15 +24106,13 @@ virDomainDiskSourceFormatPrivateData(virBufferPtr buf, unsigned int flags, virDomainXMLOptionPtr xmlopt) { - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); int ret = -1; if (!(flags & VIR_DOMAIN_DEF_FORMAT_STATUS) || !xmlopt || !xmlopt->privateData.storageFormat) return 0; - virBufferSetChildIndent(&childBuf, buf); - if (xmlopt->privateData.storageFormat(src, &childBuf) < 0) goto cleanup; @@ -24151,9 +24148,7 @@ virDomainDiskSourceFormat(virBufferPtr buf, virDomainXMLOptionPtr xmlopt) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; - - virBufferSetChildIndent(&childBuf, buf); + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); switch ((virStorageType)src->type) { case VIR_STORAGE_TYPE_FILE: @@ -24238,12 +24233,10 @@ virDomainDiskBackingStoreFormat(virBufferPtr buf, unsigned int flags) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); bool inactive = flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE; virStorageSourcePtr backingStore = src->backingStore; - virBufferSetChildIndent(&childBuf, buf); - if (!backingStore) return 0; @@ -24293,9 +24286,7 @@ static int virDomainDiskDefFormatIotune(virBufferPtr buf, virDomainDiskDefPtr disk) { - virBuffer childBuf = VIR_BUFFER_INITIALIZER; - - virBufferSetChildIndent(&childBuf, buf); + virBuffer childBuf = VIR_BUFFER_INIT_CHILD(buf); FORMAT_IOTUNE(total_bytes_sec); FORMAT_IOTUNE(read_bytes_sec); @@ -24404,11 +24395,9 @@ virDomainDiskDefFormatMirror(virBufferPtr buf, virDomainXMLOptionPtr xmlopt) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); const char *formatStr = NULL; - virBufferSetChildIndent(&childBuf, buf); - /* For now, mirroring is currently output-only: we only output it * for live domains, therefore we ignore it on input except for * the internal parse on libvirtd restart. We prefer to output @@ -24455,15 +24444,13 @@ virDomainDiskDefFormatPrivateData(virBufferPtr buf, unsigned int flags, virDomainXMLOptionPtr xmlopt) { - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); if (!(flags & VIR_DOMAIN_DEF_FORMAT_STATUS) || !xmlopt || !xmlopt->privateData.diskFormat) return 0; - virBufferSetChildIndent(&childBuf, buf); - if (xmlopt->privateData.diskFormat(disk, &childBuf) < 0) return -1; @@ -24641,9 +24628,7 @@ virDomainControllerDefFormat(virBufferPtr buf, const char *model = NULL; const char *modelName = NULL; g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; - - virBufferSetChildIndent(&childBuf, buf); + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); if (!type) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -25745,9 +25730,7 @@ virDomainChrSourceDefFormat(virBufferPtr buf, unsigned int flags) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; - - virBufferSetChildIndent(&childBuf, buf); + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); switch ((virDomainChrType)def->type) { case VIR_DOMAIN_CHR_TYPE_NULL: @@ -26023,12 +26006,10 @@ virDomainSmartcardDefFormat(virBufferPtr buf, unsigned int flags) { const char *mode = virDomainSmartcardTypeToString(def->type); - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); size_t i; int ret = -1; - virBufferSetChildIndent(&childBuf, buf); - if (!mode) { virReportError(VIR_ERR_INTERNAL_ERROR, _("unexpected smartcard type %d"), def->type); @@ -26153,12 +26134,10 @@ virDomainSoundDefFormat(virBufferPtr buf, unsigned int flags) { const char *model = virDomainSoundModelTypeToString(def->model); - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); size_t i; int ret = -1; - virBufferSetChildIndent(&childBuf, buf); - if (!model) { virReportError(VIR_ERR_INTERNAL_ERROR, _("unexpected sound model %d"), def->model); @@ -26194,7 +26173,7 @@ virDomainMemballoonDefFormat(virBufferPtr buf, { const char *model = virDomainMemballoonModelTypeToString(def->model); g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childrenBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf); g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER; if (!model) { @@ -26209,8 +26188,6 @@ virDomainMemballoonDefFormat(virBufferPtr buf, virBufferAsprintf(&attrBuf, " autodeflate='%s'", virTristateSwitchTypeToString(def->autodeflate)); - virBufferSetChildIndent(&childrenBuf, buf); - if (def->period) virBufferAsprintf(&childrenBuf, "<stats period='%i'/>\n", def->period); @@ -26250,9 +26227,7 @@ virDomainWatchdogDefFormat(virBufferPtr buf, const char *model = virDomainWatchdogModelTypeToString(def->model); const char *action = virDomainWatchdogActionTypeToString(def->action); g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; - - virBufferSetChildIndent(&childBuf, buf); + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); if (!model) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -26280,13 +26255,12 @@ static int virDomainPanicDefFormat(virBufferPtr buf, virDomainPanicDefPtr def) { g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childrenBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf); if (def->model) virBufferAsprintf(&attrBuf, " model='%s'", virDomainPanicModelTypeToString(def->model)); - virBufferSetChildIndent(&childrenBuf, buf); if (virDomainDeviceInfoFormat(&childrenBuf, &def->info, 0) < 0) return -1; @@ -26619,7 +26593,7 @@ virDomainInputDefFormat(virBufferPtr buf, const char *type = virDomainInputTypeToString(def->type); const char *bus = virDomainInputBusTypeToString(def->bus); g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER; /* don't format keyboard into migratable XML for backward compatibility */ @@ -26654,7 +26628,6 @@ virDomainInputDefFormat(virBufferPtr buf, virBufferAsprintf(&attrBuf, " model='%s'", model); } - virBufferSetChildIndent(&childBuf, buf); virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio); virXMLFormatElement(&childBuf, "driver", &driverAttrBuf, NULL); @@ -27352,9 +27325,7 @@ virDomainHubDefFormat(virBufferPtr buf, { const char *type = virDomainHubTypeToString(def->type); g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; - - virBufferSetChildIndent(&childBuf, buf); + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); if (!type) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -27621,12 +27592,11 @@ virDomainCachetuneDefFormat(virBufferPtr buf, virDomainResctrlDefPtr resctrl, unsigned int flags) { - g_auto(virBuffer) childrenBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf); size_t i = 0; int ret = -1; g_autofree char *vcpus = NULL; - virBufferSetChildIndent(&childrenBuf, buf); if (virResctrlAllocForeachCache(resctrl->alloc, virDomainCachetuneDefFormatHelper, &childrenBuf) < 0) @@ -27687,11 +27657,10 @@ virDomainMemorytuneDefFormat(virBufferPtr buf, virDomainResctrlDefPtr resctrl, unsigned int flags) { - g_auto(virBuffer) childrenBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf); int ret = -1; g_autofree char *vcpus = NULL; - virBufferSetChildIndent(&childrenBuf, buf); if (virResctrlAllocForeachMemory(resctrl->alloc, virDomainMemorytuneDefFormatHelper, &childrenBuf) < 0) @@ -27731,10 +27700,9 @@ virDomainCputuneDefFormat(virBufferPtr buf, unsigned int flags) { size_t i; - g_auto(virBuffer) childrenBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf); int ret = -1; - virBufferSetChildIndent(&childrenBuf, buf); if (def->cputune.sharesSpecified) virBufferAsprintf(&childrenBuf, "<shares>%llu</shares>\n", @@ -27916,13 +27884,11 @@ static int virDomainIOMMUDefFormat(virBufferPtr buf, const virDomainIOMMUDef *iommu) { - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER; int ret = -1; - virBufferSetChildIndent(&childBuf, buf); - if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT) { virBufferAsprintf(&driverAttrBuf, " intremap='%s'", virTristateSwitchTypeToString(iommu->intremap)); @@ -27957,9 +27923,7 @@ static void virDomainMemtuneFormat(virBufferPtr buf, const virDomainMemtune *mem) { - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; - - virBufferSetChildIndent(&childBuf, buf); + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); if (virMemoryLimitIsSet(mem->hard_limit)) { virBufferAsprintf(&childBuf, @@ -27990,9 +27954,7 @@ static void virDomainMemorybackingFormat(virBufferPtr buf, const virDomainMemtune *mem) { - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; - - virBufferSetChildIndent(&childBuf, buf); + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); if (mem->nhugepages) virDomainHugepagesFormat(&childBuf, mem->hugepages, mem->nhugepages); @@ -28020,7 +27982,7 @@ static int virDomainVsockDefFormat(virBufferPtr buf, virDomainVsockDefPtr vsock) { - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; g_auto(virBuffer) cidAttrBuf = VIR_BUFFER_INITIALIZER; int ret = -1; @@ -28030,8 +27992,6 @@ virDomainVsockDefFormat(virBufferPtr buf, virDomainVsockModelTypeToString(vsock->model)); } - virBufferSetChildIndent(&childBuf, buf); - if (vsock->auto_cid != VIR_TRISTATE_BOOL_ABSENT) { virBufferAsprintf(&cidAttrBuf, " auto='%s'", virTristateBoolTypeToString(vsock->auto_cid)); @@ -28056,10 +28016,9 @@ static int virDomainDefFormatBlkiotune(virBufferPtr buf, virDomainDefPtr def) { - g_auto(virBuffer) childrenBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf); ssize_t n; - virBufferSetChildIndent(&childrenBuf, buf); if (def->blkio.weight) virBufferAsprintf(&childrenBuf, "<weight>%u</weight>\n", def->blkio.weight); @@ -28103,14 +28062,12 @@ static int virDomainDefFormatFeatures(virBufferPtr buf, virDomainDefPtr def) { - g_auto(virBuffer) tmpAttrBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) tmpChildBuf = VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); size_t i; - virBufferSetChildIndent(&childBuf, buf); - for (i = 0; i < VIR_DOMAIN_FEATURE_LAST; i++) { + g_auto(virBuffer) tmpAttrBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) tmpChildBuf = VIR_BUFFER_INIT_CHILD(&childBuf); const char *name = virDomainFeatureTypeToString(i); size_t j; @@ -28176,7 +28133,6 @@ virDomainDefFormatFeatures(virBufferPtr buf, unsigned long long short_size = virFormatIntPretty(def->tseg_size, &unit); - virBufferSetChildIndent(&tmpChildBuf, &childBuf); virBufferAsprintf(&tmpChildBuf, "<tseg unit='%s'>%llu</tseg>\n", unit, short_size); } @@ -28297,8 +28253,6 @@ virDomainDefFormatFeatures(virBufferPtr buf, break; case VIR_DOMAIN_FEATURE_CAPABILITIES: - virBufferSetChildIndent(&tmpChildBuf, &childBuf); - for (j = 0; j < VIR_DOMAIN_PROCES_CAPS_FEATURE_LAST; j++) { if (def->caps_features[j] != VIR_TRISTATE_SWITCH_ABSENT) virBufferAsprintf(&tmpChildBuf, "<%s state='%s'/>\n", @@ -28343,7 +28297,6 @@ virDomainDefFormatFeatures(virBufferPtr buf, virDomainHPTResizingTypeToString(def->hpt_resizing)); } if (def->hpt_maxpagesize > 0) { - virBufferSetChildIndent(&tmpChildBuf, &childBuf); virBufferAsprintf(&tmpChildBuf, "<maxpagesize unit='KiB'>%llu</maxpagesize>\n", def->hpt_maxpagesize); -- 2.23.0

Promote usage of separate buffers for separate formatting passes by removing the now unused virBufferSetChildIndent. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/util/virbuffer.h | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/util/virbuffer.h b/src/util/virbuffer.h index a2e30c07dc..38758a9125 100644 --- a/src/util/virbuffer.h +++ b/src/util/virbuffer.h @@ -88,15 +88,6 @@ void virBufferURIEncodeString(virBufferPtr buf, const char *str); void virBufferAdjustIndent(virBufferPtr buf, int indent); void virBufferSetIndent(virBufferPtr, int indent); -/** - * virBufferSetChildIndent - * - * Gets the parent indentation, increments it by 2 and sets it to - * child buffer. - */ -#define virBufferSetChildIndent(childBuf_, parentBuf_) \ - virBufferSetIndent(childBuf_, virBufferGetIndent(parentBuf_) + 2) - size_t virBufferGetIndent(const virBuffer *buf); size_t virBufferGetEffectiveIndent(const virBuffer *buf); -- 2.23.0

On Tue, Nov 12, 2019 at 03:18:13PM +0100, Peter Krempa wrote:
This applies on top of https://www.redhat.com/archives/libvir-list/2019-November/msg00397.html
Peter Krempa (7): util: buffer: Add init macro for automatically setting child XML indent qemu: domain: Convert child buffers to use VIR_BUFFER_INIT_CHILD util: sysinfo: Convert child buffers to use VIR_BUFFER_INIT_CHILD conf: caps: sysinfo: Convert child buffers to use VIR_BUFFER_INIT_CHILD conf: cpu: Convert child buffers to use VIR_BUFFER_INIT_CHILD conf: domain: Convert child buffers to use VIR_BUFFER_INIT_CHILD util: buffer: remove virBufferSetChildIndent
src/conf/capabilities.c | 13 ++---- src/conf/cpu_conf.c | 3 +- src/conf/domain_conf.c | 101 +++++++++++----------------------------- src/qemu/qemu_domain.c | 35 ++++---------- src/util/virbuffer.h | 18 +++---- src/util/virsysinfo.c | 4 +- 6 files changed, 52 insertions(+), 122 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
participants (2)
-
Ján Tomko
-
Peter Krempa