Use separate buffers for attributes and children elements to make the
code cleaner and to use the virXMLFormatElement() function.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
---
src/conf/domain_conf.c | 235 ++++++++++++++++-------------------------
1 file changed, 92 insertions(+), 143 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index a0e68d6046..8de39e7767 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -26287,13 +26287,14 @@ virDomainGraphicsListenDefFormat(virBuffer *buf,
virDomainGraphicsListenDef *def,
unsigned int flags)
{
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
+
/* If generating migratable XML, skip listen address
* dragged in from config file */
if ((flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) && def->fromConfig)
return;
- virBufferAddLit(buf, "<listen");
- virBufferAsprintf(buf, " type='%s'",
+ virBufferAsprintf(&attrBuf, " type='%s'",
virDomainGraphicsListenTypeToString(def->type));
if (def->address &&
@@ -26302,28 +26303,28 @@ virDomainGraphicsListenDefFormat(virBuffer *buf,
!(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)))) {
/* address may also be set to show current status when type='network',
* but we don't want to print that if INACTIVE data is requested. */
- virBufferAsprintf(buf, " address='%s'", def->address);
+ virBufferAsprintf(&attrBuf, " address='%s'", def->address);
}
if (def->network &&
(def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK)) {
- virBufferEscapeString(buf, " network='%s'", def->network);
+ virBufferEscapeString(&attrBuf, " network='%s'", def->network);
}
if (def->socket &&
def->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET &&
!(def->autoGenerated &&
(flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))) {
- virBufferEscapeString(buf, " socket='%s'", def->socket);
+ virBufferEscapeString(&attrBuf, " socket='%s'", def->socket);
}
if (flags & VIR_DOMAIN_DEF_FORMAT_STATUS) {
- virBufferAsprintf(buf, " fromConfig='%d'", def->fromConfig);
- virBufferAsprintf(buf, " autoGenerated='%s'",
+ virBufferAsprintf(&attrBuf, " fromConfig='%d'", def->fromConfig);
+ virBufferAsprintf(&attrBuf, " autoGenerated='%s'",
def->autoGenerated ? "yes" : "no");
}
- virBufferAddLit(buf, "/>\n");
+ virXMLFormatElement(buf, "listen", &attrBuf, NULL);
}
@@ -26361,28 +26362,27 @@ virDomainGraphicsDefFormatGL(virBuffer *buf,
virTristateBool gl,
char *rendernode)
{
- if (gl == VIR_TRISTATE_BOOL_ABSENT && !rendernode)
- return;
-
- virBufferAddLit(buf, "<gl");
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
if (gl != VIR_TRISTATE_BOOL_ABSENT)
- virBufferAsprintf(buf, " enable='%s'", virTristateBoolTypeToString(gl));
+ virBufferAsprintf(&attrBuf, " enable='%s'", virTristateBoolTypeToString(gl));
if (rendernode)
- virBufferEscapeString(buf, " rendernode='%s'", rendernode);
+ virBufferEscapeString(&attrBuf, " rendernode='%s'", rendernode);
- virBufferAddLit(buf, "/>\n");
+ virXMLFormatElement(buf, "gl", &attrBuf, NULL);
}
static void
virDomainGraphicsDefFormatAudio(virBuffer *buf,
unsigned int audioId)
{
- if (audioId <= 0)
- return;
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
- virBufferAsprintf(buf, "<audio id='%d'/>\n", audioId);
+ if (audioId > 0)
+ virBufferAsprintf(&attrBuf, " id='%d'", audioId);
+
+ virXMLFormatElement(buf, "audio", &attrBuf, NULL);
}
static int
@@ -26390,9 +26390,10 @@ virDomainGraphicsDefFormat(virBuffer *buf,
virDomainGraphicsDef *def,
unsigned int flags)
{
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
+ g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
virDomainGraphicsListenDef *glisten = virDomainGraphicsGetListen(def, 0);
const char *type = virDomainGraphicsTypeToString(def->type);
- bool children = false;
size_t i;
if (!type) {
@@ -26401,7 +26402,7 @@ virDomainGraphicsDefFormat(virBuffer *buf,
return -1;
}
- virBufferAsprintf(buf, "<graphics type='%s'", type);
+ virBufferAsprintf(&attrBuf, " type='%s'", type);
switch (def->type) {
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
@@ -26420,7 +26421,7 @@ virDomainGraphicsDefFormat(virBuffer *buf,
if (glisten->socket &&
!((glisten->autoGenerated || glisten->fromConfig) &&
(flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))) {
- virBufferEscapeString(buf, " socket='%s'", glisten->socket);
+ virBufferEscapeString(&attrBuf, " socket='%s'", glisten->socket);
}
break;
@@ -26428,90 +26429,84 @@ virDomainGraphicsDefFormat(virBuffer *buf,
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
if (def->data.vnc.port &&
(!def->data.vnc.autoport || !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE)))
- virBufferAsprintf(buf, " port='%d'",
+ virBufferAsprintf(&attrBuf, " port='%d'",
def->data.vnc.port);
else if (def->data.vnc.autoport)
- virBufferAddLit(buf, " port='-1'");
+ virBufferAddLit(&attrBuf, " port='-1'");
- virBufferAsprintf(buf, " autoport='%s'",
+ virBufferAsprintf(&attrBuf, " autoport='%s'",
def->data.vnc.autoport ? "yes" : "no");
if (def->data.vnc.websocketGenerated &&
(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))
- virBufferAddLit(buf, " websocket='-1'");
+ virBufferAddLit(&attrBuf, " websocket='-1'");
else if (def->data.vnc.websocket)
- virBufferAsprintf(buf, " websocket='%d'", def->data.vnc.websocket);
+ virBufferAsprintf(&attrBuf, " websocket='%d'", def->data.vnc.websocket);
if (flags & VIR_DOMAIN_DEF_FORMAT_STATUS)
- virBufferAsprintf(buf, " websocketGenerated='%s'",
+ virBufferAsprintf(&attrBuf, " websocketGenerated='%s'",
def->data.vnc.websocketGenerated ? "yes" : "no");
- virDomainGraphicsListenDefFormatAddr(buf, glisten, flags);
+ virDomainGraphicsListenDefFormatAddr(&attrBuf, glisten, flags);
break;
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
break;
}
- virBufferEscapeString(buf, " keymap='%s'",
+ virBufferEscapeString(&attrBuf, " keymap='%s'",
def->data.vnc.keymap);
if (def->data.vnc.sharePolicy)
- virBufferAsprintf(buf, " sharePolicy='%s'",
+ virBufferAsprintf(&attrBuf, " sharePolicy='%s'",
virDomainGraphicsVNCSharePolicyTypeToString(
def->data.vnc.sharePolicy));
if (def->data.vnc.powerControl)
- virBufferAsprintf(buf, " powerControl='%s'",
+ virBufferAsprintf(&attrBuf, " powerControl='%s'",
virTristateBoolTypeToString(def->data.vnc.powerControl));
- virDomainGraphicsAuthDefFormatAttr(buf, &def->data.vnc.auth, flags);
+ virDomainGraphicsAuthDefFormatAttr(&attrBuf, &def->data.vnc.auth, flags);
break;
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
- virBufferEscapeString(buf, " display='%s'",
+ virBufferEscapeString(&attrBuf, " display='%s'",
def->data.sdl.display);
- virBufferEscapeString(buf, " xauth='%s'",
+ virBufferEscapeString(&attrBuf, " xauth='%s'",
def->data.sdl.xauth);
if (def->data.sdl.fullscreen)
- virBufferAddLit(buf, " fullscreen='yes'");
+ virBufferAddLit(&attrBuf, " fullscreen='yes'");
- if (!children && def->data.sdl.gl != VIR_TRISTATE_BOOL_ABSENT) {
- virBufferAddLit(buf, ">\n");
- virBufferAdjustIndent(buf, 2);
- children = true;
- }
-
- virDomainGraphicsDefFormatGL(buf, def->data.sdl.gl, NULL);
+ virDomainGraphicsDefFormatGL(&childBuf, def->data.sdl.gl, NULL);
break;
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
if (def->data.rdp.port)
- virBufferAsprintf(buf, " port='%d'",
+ virBufferAsprintf(&attrBuf, " port='%d'",
def->data.rdp.port);
else if (def->data.rdp.autoport)
- virBufferAddLit(buf, " port='0'");
+ virBufferAddLit(&attrBuf, " port='0'");
if (def->data.rdp.autoport)
- virBufferAddLit(buf, " autoport='yes'");
+ virBufferAddLit(&attrBuf, " autoport='yes'");
if (def->data.rdp.replaceUser)
- virBufferAddLit(buf, " replaceUser='yes'");
+ virBufferAddLit(&attrBuf, " replaceUser='yes'");
if (def->data.rdp.multiUser)
- virBufferAddLit(buf, " multiUser='yes'");
+ virBufferAddLit(&attrBuf, " multiUser='yes'");
- virDomainGraphicsListenDefFormatAddr(buf, glisten, flags);
+ virDomainGraphicsListenDefFormatAddr(&attrBuf, glisten, flags);
break;
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
- virBufferEscapeString(buf, " display='%s'",
+ virBufferEscapeString(&attrBuf, " display='%s'",
def->data.desktop.display);
if (def->data.desktop.fullscreen)
- virBufferAddLit(buf, " fullscreen='yes'");
+ virBufferAddLit(&attrBuf, " fullscreen='yes'");
break;
@@ -26526,22 +26521,22 @@ virDomainGraphicsDefFormat(virBuffer *buf,
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
if (def->data.spice.port)
- virBufferAsprintf(buf, " port='%d'",
+ virBufferAsprintf(&attrBuf, " port='%d'",
def->data.spice.port);
if (def->data.spice.tlsPort)
- virBufferAsprintf(buf, " tlsPort='%d'",
+ virBufferAsprintf(&attrBuf, " tlsPort='%d'",
def->data.spice.tlsPort);
- virBufferAsprintf(buf, " autoport='%s'",
+ virBufferAsprintf(&attrBuf, " autoport='%s'",
def->data.spice.autoport ? "yes" : "no");
- virDomainGraphicsListenDefFormatAddr(buf, glisten, flags);
+ virDomainGraphicsListenDefFormatAddr(&attrBuf, glisten, flags);
break;
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE)
- virBufferAddLit(buf, " autoport='no'");
+ virBufferAddLit(&attrBuf, " autoport='no'");
break;
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
@@ -26553,7 +26548,7 @@ virDomainGraphicsDefFormat(virBuffer *buf,
* parsed as listen type "none". */
if ((flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE) &&
glisten->fromConfig) {
- virBufferAddLit(buf, " autoport='yes'");
+ virBufferAddLit(&attrBuf, " autoport='yes'");
}
break;
@@ -26561,48 +26556,31 @@ virDomainGraphicsDefFormat(virBuffer *buf,
break;
}
- virBufferEscapeString(buf, " keymap='%s'",
+ virBufferEscapeString(&attrBuf, " keymap='%s'",
def->data.spice.keymap);
if (def->data.spice.defaultMode != VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY)
- virBufferAsprintf(buf, " defaultMode='%s'",
+ virBufferAsprintf(&attrBuf, " defaultMode='%s'",
virDomainGraphicsSpiceChannelModeTypeToString(def->data.spice.defaultMode));
- virDomainGraphicsAuthDefFormatAttr(buf, &def->data.spice.auth, flags);
+ virDomainGraphicsAuthDefFormatAttr(&attrBuf, &def->data.spice.auth, flags);
break;
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
- if (!def->data.egl_headless.rendernode)
- break;
-
- if (!children) {
- virBufferAddLit(buf, ">\n");
- virBufferAdjustIndent(buf, 2);
- children = true;
- }
-
- virDomainGraphicsDefFormatGL(buf, VIR_TRISTATE_BOOL_ABSENT,
+ virDomainGraphicsDefFormatGL(&childBuf, VIR_TRISTATE_BOOL_ABSENT,
def->data.egl_headless.rendernode);
break;
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
if (def->data.dbus.p2p)
- virBufferAddLit(buf, " p2p='yes'");
+ virBufferAddLit(&attrBuf, " p2p='yes'");
if (def->data.dbus.address)
- virBufferAsprintf(buf, " address='%s'",
+ virBufferAsprintf(&attrBuf, " address='%s'",
def->data.dbus.address);
- if (!def->data.dbus.gl && def->data.dbus.audioId <= 0)
- break;
+ virDomainGraphicsDefFormatGL(&childBuf, def->data.dbus.gl,
+ def->data.dbus.rendernode);
- if (!children) {
- virBufferAddLit(buf, ">\n");
- virBufferAdjustIndent(buf, 2);
- children = true;
- }
-
- virDomainGraphicsDefFormatGL(buf, def->data.dbus.gl, def->data.dbus.rendernode);
-
- virDomainGraphicsDefFormatAudio(buf, def->data.dbus.audioId);
+ virDomainGraphicsDefFormatAudio(&childBuf, def->data.dbus.audioId);
break;
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
@@ -26635,83 +26613,54 @@ virDomainGraphicsDefFormat(virBuffer *buf,
def->listens[i].type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE)
continue;
}
- if (!children) {
- virBufferAddLit(buf, ">\n");
- virBufferAdjustIndent(buf, 2);
- children = true;
- }
- virDomainGraphicsListenDefFormat(buf, &def->listens[i], flags);
+ virDomainGraphicsListenDefFormat(&childBuf, &def->listens[i], flags);
}
if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
+ g_auto(virBuffer) spiceBuf = VIR_BUFFER_INITIALIZER;
+
for (i = 0; i < VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST; i++) {
int mode = def->data.spice.channels[i];
if (mode == VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY)
continue;
- if (!children) {
- virBufferAddLit(buf, ">\n");
- virBufferAdjustIndent(buf, 2);
- children = true;
- }
-
- virBufferAsprintf(buf, "<channel name='%s' mode='%s'/>\n",
+ virBufferAsprintf(&spiceBuf, " name='%s' mode='%s'",
virDomainGraphicsSpiceChannelNameTypeToString(i),
virDomainGraphicsSpiceChannelModeTypeToString(mode));
+
+ virXMLFormatElement(&childBuf, "channel", &spiceBuf, NULL);
}
- if (!children && (def->data.spice.image || def->data.spice.jpeg ||
- def->data.spice.zlib || def->data.spice.playback ||
- def->data.spice.streaming || def->data.spice.copypaste ||
- def->data.spice.mousemode || def->data.spice.filetransfer ||
- def->data.spice.gl)) {
- virBufferAddLit(buf, ">\n");
- virBufferAdjustIndent(buf, 2);
- children = true;
- }
- if (def->data.spice.image)
- virBufferAsprintf(buf, "<image compression='%s'/>\n",
- virDomainGraphicsSpiceImageCompressionTypeToString(def->data.spice.image));
- if (def->data.spice.jpeg)
- virBufferAsprintf(buf, "<jpeg compression='%s'/>\n",
- virDomainGraphicsSpiceJpegCompressionTypeToString(def->data.spice.jpeg));
- if (def->data.spice.zlib)
- virBufferAsprintf(buf, "<zlib compression='%s'/>\n",
- virDomainGraphicsSpiceZlibCompressionTypeToString(def->data.spice.zlib));
- if (def->data.spice.playback)
- virBufferAsprintf(buf, "<playback compression='%s'/>\n",
- virTristateSwitchTypeToString(def->data.spice.playback));
- if (def->data.spice.streaming)
- virBufferAsprintf(buf, "<streaming mode='%s'/>\n",
- virDomainGraphicsSpiceStreamingModeTypeToString(def->data.spice.streaming));
- if (def->data.spice.mousemode)
- virBufferAsprintf(buf, "<mouse mode='%s'/>\n",
- virDomainMouseModeTypeToString(def->data.spice.mousemode));
- if (def->data.spice.copypaste)
- virBufferAsprintf(buf, "<clipboard copypaste='%s'/>\n",
- virTristateBoolTypeToString(def->data.spice.copypaste));
- if (def->data.spice.filetransfer)
- virBufferAsprintf(buf, "<filetransfer enable='%s'/>\n",
- virTristateBoolTypeToString(def->data.spice.filetransfer));
- virDomainGraphicsDefFormatGL(buf, def->data.spice.gl, def->data.spice.rendernode);
- }
+#define FORMAT_SPICE_FEATURE(name, attr, value, toStringFunc) \
+ if (value) { \
+ virBufferAsprintf(&spiceBuf, " " attr "='%s'", toStringFunc(value)); \
+ } \
+ virXMLFormatElement(&childBuf, name, &spiceBuf, NULL);
- if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
- if (!children) {
- virBufferAddLit(buf, ">\n");
- virBufferAdjustIndent(buf, 2);
- children = true;
- }
+ FORMAT_SPICE_FEATURE("image", "compression", def->data.spice.image,
+ virDomainGraphicsSpiceImageCompressionTypeToString);
+ FORMAT_SPICE_FEATURE("jpeg", "compression", def->data.spice.jpeg,
+ virDomainGraphicsSpiceJpegCompressionTypeToString);
+ FORMAT_SPICE_FEATURE("zlib", "compression", def->data.spice.zlib,
+ virDomainGraphicsSpiceZlibCompressionTypeToString);
+ FORMAT_SPICE_FEATURE("playback", "compression", def->data.spice.playback,
+ virTristateSwitchTypeToString);
+ FORMAT_SPICE_FEATURE("streaming", "mode", def->data.spice.streaming,
+ virDomainGraphicsSpiceStreamingModeTypeToString);
+ FORMAT_SPICE_FEATURE("mouse", "mode", def->data.spice.mousemode,
+ virDomainMouseModeTypeToString);
+ FORMAT_SPICE_FEATURE("clipboard", "copypaste", def->data.spice.copypaste,
+ virTristateBoolTypeToString);
+ FORMAT_SPICE_FEATURE("filetransfer", "enable", def->data.spice.filetransfer,
+ virTristateBoolTypeToString);
- virDomainGraphicsDefFormatAudio(buf, def->data.vnc.audioId);
+ virDomainGraphicsDefFormatGL(&childBuf, def->data.spice.gl, def->data.spice.rendernode);
}
- if (children) {
- virBufferAdjustIndent(buf, -2);
- virBufferAddLit(buf, "</graphics>\n");
- } else {
- virBufferAddLit(buf, "/>\n");
- }
+ if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC)
+ virDomainGraphicsDefFormatAudio(&childBuf, def->data.vnc.audioId);
+
+ virXMLFormatElement(buf, "graphics", &attrBuf, &childBuf);
return 0;
}
--
2.48.1
© 2016 - 2025 Red Hat, Inc.