Re: [PATCH 01/11] virDomainHostdevDefFormatSubsys: Use virXMLFormatElement

2020-07-15 Thread Ján Tomko

On a Tuesday in 2020, Peter Krempa wrote:

Refactor the formatter to the new multiple buffer based approach so that
we can easily separate it into formatters per subsys type.

Signed-off-by: Peter Krempa 
---
src/conf/domain_conf.c | 65 ++
1 file changed, 27 insertions(+), 38 deletions(-)


Reviewed-by: Ján Tomko 

Jano


signature.asc
Description: PGP signature


[PATCH 01/11] virDomainHostdevDefFormatSubsys: Use virXMLFormatElement

2020-07-14 Thread Peter Krempa
Refactor the formatter to the new multiple buffer based approach so that
we can easily separate it into formatters per subsys type.

Signed-off-by: Peter Krempa 
---
 src/conf/domain_conf.c | 65 ++
 1 file changed, 27 insertions(+), 38 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 8f5a8ef4a4..4b1f27fcea 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -26030,7 +26030,9 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
 bool includeTypeInAddr,
 virDomainXMLOptionPtr xmlopt)
 {
-bool closedSource = false;
+g_auto(virBuffer) sourceAttrBuf = VIR_BUFFER_INITIALIZER;
+g_auto(virBuffer) sourceChildBuf = VIR_BUFFER_INIT_CHILD(buf);
+g_auto(virBuffer) origstatesChildBuf = 
VIR_BUFFER_INIT_CHILD(&sourceChildBuf);
 virDomainHostdevSubsysUSBPtr usbsrc = &def->source.subsys.u.usb;
 virDomainHostdevSubsysPCIPtr pcisrc = &def->source.subsys.u.pci;
 virDomainHostdevSubsysSCSIPtr scsisrc = &def->source.subsys.u.scsi;
@@ -26053,18 +26055,17 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
 virBufferAsprintf(buf, "\n", backend);
 }

-virBufferAddLit(buf, "source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) {
 if (def->startupPolicy) {
 const char *policy;
 policy = virDomainStartupPolicyTypeToString(def->startupPolicy);
-virBufferAsprintf(buf, " startupPolicy='%s'", policy);
+virBufferAsprintf(&sourceAttrBuf, " startupPolicy='%s'", policy);
 }
 if (usbsrc->autoAddress && (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))
-virBufferAddLit(buf, " autoAddress='yes'");
+virBufferAddLit(&sourceAttrBuf, " autoAddress='yes'");

 if (def->missing && !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))
-virBufferAddLit(buf, " missing='yes'");
+virBufferAddLit(&sourceAttrBuf, " missing='yes'");
 }

 if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
@@ -26072,69 +26073,59 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf,
 const char *protocol =
 virDomainHostdevSubsysSCSIProtocolTypeToString(scsisrc->protocol);

-virBufferAsprintf(buf, " protocol='%s' name='%s'",
+virBufferAsprintf(&sourceAttrBuf, " protocol='%s' name='%s'",
   protocol, iscsisrc->src->path);
 }

 if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST) {
 const char *protocol =
 
virDomainHostdevSubsysSCSIHostProtocolTypeToString(hostsrc->protocol);
-closedSource = true;

-virBufferAsprintf(buf, " protocol='%s' wwpn='%s'/",
+virBufferAsprintf(&sourceAttrBuf, " protocol='%s' wwpn='%s'",
   protocol, hostsrc->wwpn);
 }

-virBufferAddLit(buf, ">\n");
-
-virBufferAdjustIndent(buf, 2);
 switch (def->source.subsys.type) {
 case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
 if (usbsrc->vendor) {
-virBufferAsprintf(buf, "\n", usbsrc->vendor);
-virBufferAsprintf(buf, "\n", 
usbsrc->product);
+virBufferAsprintf(&sourceChildBuf, "\n", 
usbsrc->vendor);
+virBufferAsprintf(&sourceChildBuf, "\n", 
usbsrc->product);
 }
 if (usbsrc->bus || usbsrc->device) {
-virBufferAsprintf(buf, "\n",
+virBufferAsprintf(&sourceChildBuf, "\n",
   includeTypeInAddr ? "type='usb' " : "",
   usbsrc->bus, usbsrc->device);
 }
 break;
 case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
-virPCIDeviceAddressFormat(buf, pcisrc->addr,
+virPCIDeviceAddressFormat(&sourceChildBuf, pcisrc->addr,
   includeTypeInAddr);

-if ((flags & VIR_DOMAIN_DEF_FORMAT_PCI_ORIG_STATES) &&
-(def->origstates.states.pci.unbind_from_stub ||
- def->origstates.states.pci.remove_slot ||
- def->origstates.states.pci.reprobe)) {
-virBufferAddLit(buf, "\n");
-virBufferAdjustIndent(buf, 2);
+if ((flags & VIR_DOMAIN_DEF_FORMAT_PCI_ORIG_STATES)) {
 if (def->origstates.states.pci.unbind_from_stub)
-virBufferAddLit(buf, "\n");
+virBufferAddLit(&origstatesChildBuf, "\n");
 if (def->origstates.states.pci.remove_slot)
-virBufferAddLit(buf, "\n");
+virBufferAddLit(&origstatesChildBuf, "\n");
 if (def->origstates.states.pci.reprobe)
-virBufferAddLit(buf, "\n");
-virBufferAdjustIndent(buf, -2);
-virBufferAddLit(buf, "\n");
+virBufferAddLit(&origstatesChildBuf, "\n");
+virXMLFormatElement(&sourceChildBuf, "origstates", NULL, 
&origstatesChildBuf);
 }
 break;
 case VIR_DOMAIN