I've identified some places (mostly by looking for virBufferUse()) that can use virXMLFormatElement() instead of open coded version of it. I'm sure there are many more places that could use the same treatment. Let's cure them some other time. Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> --- Based on Dan's series he posted earlier today: https://listman.redhat.com/archives/libvir-list/2021-June/msg00060.html src/conf/domain_conf.c | 74 +++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 47 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 7b9de2e92d..139cdfc0a7 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -25177,6 +25177,7 @@ virDomainSmartcardDefFormat(virBuffer *buf, { const char *mode = virDomainSmartcardTypeToString(def->type); g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); + g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; size_t i; if (!mode) { @@ -25209,19 +25210,13 @@ virDomainSmartcardDefFormat(virBuffer *buf, } virDomainDeviceInfoFormat(&childBuf, &def->info, flags); - virBufferAsprintf(buf, "<smartcard mode='%s'", mode); + virBufferAsprintf(&attrBuf, " mode='%s'", mode); if (def->type == VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH && - virDomainChrAttrsDefFormat(buf, def->data.passthru, false) < 0) { + virDomainChrAttrsDefFormat(&attrBuf, def->data.passthru, false) < 0) { return -1; } - if (virBufferUse(&childBuf)) { - virBufferAddLit(buf, ">\n"); - virBufferAddBuffer(buf, &childBuf); - virBufferAddLit(buf, "</smartcard>\n"); - } else { - virBufferAddLit(buf, "/>\n"); - } + virXMLFormatElement(buf, "smartcard", &attrBuf, &childBuf); return 0; } @@ -25300,6 +25295,7 @@ virDomainSoundDefFormat(virBuffer *buf, { const char *model = virDomainSoundModelTypeToString(def->model); g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); + g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; size_t i; if (!model) { @@ -25316,14 +25312,9 @@ virDomainSoundDefFormat(virBuffer *buf, virDomainDeviceInfoFormat(&childBuf, &def->info, flags); - virBufferAsprintf(buf, "<sound model='%s'", model); - if (virBufferUse(&childBuf)) { - virBufferAddLit(buf, ">\n"); - virBufferAddBuffer(buf, &childBuf); - virBufferAddLit(buf, "</sound>\n"); - } else { - virBufferAddLit(buf, "/>\n"); - } + virBufferAsprintf(&attrBuf, " model='%s'", model); + + virXMLFormatElement(buf, "sound", &attrBuf, &childBuf); return 0; } @@ -25453,6 +25444,7 @@ virDomainAudioDefFormat(virBuffer *buf, virDomainAudioDef *def) { g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); + g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; g_auto(virBuffer) inputBuf = VIR_BUFFER_INITIALIZER; g_auto(virBuffer) outputBuf = VIR_BUFFER_INITIALIZER; const char *type = virDomainAudioTypeTypeToString(def->type); @@ -25463,10 +25455,10 @@ virDomainAudioDefFormat(virBuffer *buf, return -1; } - virBufferAsprintf(buf, "<audio id='%d' type='%s'", def->id, type); + virBufferAsprintf(&attrBuf, " id='%d' type='%s'", def->id, type); if (def->timerPeriod) - virBufferAsprintf(buf, " timerPeriod='%u'", def->timerPeriod); + virBufferAsprintf(&attrBuf, " timerPeriod='%u'", def->timerPeriod); switch (def->type) { case VIR_DOMAIN_AUDIO_TYPE_NONE: @@ -25489,20 +25481,20 @@ virDomainAudioDefFormat(virBuffer *buf, case VIR_DOMAIN_AUDIO_TYPE_OSS: if (def->backend.oss.tryMMap) - virBufferAsprintf(buf, " tryMMap='%s'", + virBufferAsprintf(&attrBuf, " tryMMap='%s'", virTristateBoolTypeToString(def->backend.oss.tryMMap)); if (def->backend.oss.exclusive) - virBufferAsprintf(buf, " exclusive='%s'", + virBufferAsprintf(&attrBuf, " exclusive='%s'", virTristateBoolTypeToString(def->backend.oss.exclusive)); if (def->backend.oss.dspPolicySet) - virBufferAsprintf(buf, " dspPolicy='%d'", def->backend.oss.dspPolicy); + virBufferAsprintf(&attrBuf, " dspPolicy='%d'", def->backend.oss.dspPolicy); virDomainAudioOSSFormat(&def->backend.oss.input, &inputBuf); virDomainAudioOSSFormat(&def->backend.oss.output, &outputBuf); break; case VIR_DOMAIN_AUDIO_TYPE_PULSEAUDIO: - virBufferEscapeString(buf, " serverName='%s'", + virBufferEscapeString(&attrBuf, " serverName='%s'", def->backend.pulseaudio.serverName); virDomainAudioPulseAudioFormat(&def->backend.pulseaudio.input, &inputBuf); @@ -25511,7 +25503,7 @@ virDomainAudioDefFormat(virBuffer *buf, case VIR_DOMAIN_AUDIO_TYPE_SDL: if (def->backend.sdl.driver) - virBufferAsprintf(buf, " driver='%s'", + virBufferAsprintf(&attrBuf, " driver='%s'", virDomainAudioSDLDriverTypeToString( def->backend.sdl.driver)); @@ -25523,7 +25515,7 @@ virDomainAudioDefFormat(virBuffer *buf, break; case VIR_DOMAIN_AUDIO_TYPE_FILE: - virBufferEscapeString(buf, " path='%s'", def->backend.file.path); + virBufferEscapeString(&attrBuf, " path='%s'", def->backend.file.path); break; case VIR_DOMAIN_AUDIO_TYPE_LAST: @@ -25535,13 +25527,7 @@ virDomainAudioDefFormat(virBuffer *buf, virDomainAudioCommonFormat(&def->input, &childBuf, &inputBuf, "input"); virDomainAudioCommonFormat(&def->output, &childBuf, &outputBuf, "output"); - if (virBufferUse(&childBuf)) { - virBufferAddLit(buf, ">\n"); - virBufferAddBuffer(buf, &childBuf); - virBufferAddLit(buf, "</audio>\n"); - } else { - virBufferAddLit(buf, "/>\n"); - } + virXMLFormatElement(buf, "audio", &attrBuf, &childBuf); return 0; } @@ -27002,6 +26988,7 @@ virDomainCachetuneDefFormat(virBuffer *buf, unsigned int flags) { g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf); + g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; size_t i = 0; g_autofree char *vcpus = NULL; @@ -27024,19 +27011,17 @@ virDomainCachetuneDefFormat(virBuffer *buf, if (!vcpus) return -1; - virBufferAsprintf(buf, "<cachetune vcpus='%s'", vcpus); + virBufferAsprintf(&attrBuf, " vcpus='%s'", vcpus); if (!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) { const char *alloc_id = virResctrlAllocGetID(resctrl->alloc); if (!alloc_id) return -1; - virBufferAsprintf(buf, " id='%s'", alloc_id); + virBufferAsprintf(&attrBuf, " id='%s'", alloc_id); } - virBufferAddLit(buf, ">\n"); - virBufferAddBuffer(buf, &childrenBuf); - virBufferAddLit(buf, "</cachetune>\n"); + virXMLFormatElement(buf, "cachetune", &attrBuf, &childrenBuf); return 0; } @@ -27062,6 +27047,7 @@ virDomainMemorytuneDefFormat(virBuffer *buf, unsigned int flags) { g_auto(virBuffer) childrenBuf = VIR_BUFFER_INIT_CHILD(buf); + g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER; g_autofree char *vcpus = NULL; size_t i = 0; @@ -27084,19 +27070,17 @@ virDomainMemorytuneDefFormat(virBuffer *buf, if (!vcpus) return -1; - virBufferAsprintf(buf, "<memorytune vcpus='%s'", vcpus); + virBufferAsprintf(&attrBuf, " vcpus='%s'", vcpus); if (!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)) { const char *alloc_id = virResctrlAllocGetID(resctrl->alloc); if (!alloc_id) return -1; - virBufferAsprintf(buf, " id='%s'", alloc_id); + virBufferAsprintf(&attrBuf, " id='%s'", alloc_id); } - virBufferAddLit(buf, ">\n"); - virBufferAddBuffer(buf, &childrenBuf); - virBufferAddLit(buf, "</memorytune>\n"); + virXMLFormatElement(buf, "memorytune", &attrBuf, &childrenBuf); return 0; } @@ -27213,11 +27197,7 @@ virDomainCputuneDefFormat(virBuffer *buf, for (i = 0; i < def->nresctrls; i++) virDomainMemorytuneDefFormat(&childrenBuf, def->resctrls[i], flags); - if (virBufferUse(&childrenBuf)) { - virBufferAddLit(buf, "<cputune>\n"); - virBufferAddBuffer(buf, &childrenBuf); - virBufferAddLit(buf, "</cputune>\n"); - } + virXMLFormatElement(buf, "cputune", NULL, &childrenBuf); return 0; } -- 2.31.1