[libvirt] [PATCH] conf: Don't output <cpu> tag if it contains no information.

Erik Skultety eskultet at redhat.com
Mon Apr 13 07:39:42 UTC 2015



On 04/10/2015 03:09 PM, Andrea Bolognani wrote:
> The tag is already marked as optional in the schema, so no changes
> are needed there.
> 
> RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1202606
> ---
> 
> Hi everyone,
> 
> this is my first contribution to libvirt so I wholeheartedly welcome
> any criticism, suggestion or recommendation :)
> 
> Cheers.
> 
>  src/conf/cpu_conf.c                                | 33 ++++++++++++++++------
>  tests/qemuxml2argvdata/qemuxml2argv-cpu-empty.xml  | 23 +++++++++++++++
>  .../qemuxml2xmlout-cpu-empty.xml                   | 21 ++++++++++++++
>  tests/qemuxml2xmltest.c                            |  1 +
>  4 files changed, 69 insertions(+), 9 deletions(-)
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-cpu-empty.xml
>  create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-empty.xml
> 
> diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
> index cd3882d..8f65d55 100644
> --- a/src/conf/cpu_conf.c
> +++ b/src/conf/cpu_conf.c
> @@ -435,13 +435,14 @@ virCPUDefFormatBufFull(virBufferPtr buf,
>                         bool updateCPU)
>  {
>      int ret = -1;
> +    virBuffer attributeBuf = VIR_BUFFER_INITIALIZER;
>      virBuffer childrenBuf = VIR_BUFFER_INITIALIZER;
>      int indent = virBufferGetIndent(buf, false);
>  
>      if (!def)
>          return 0;
>  
> -    virBufferAddLit(buf, "<cpu");
> +    /* Format attributes */
>      if (def->type == VIR_CPU_TYPE_GUEST) {
>          const char *tmp;
>  
> @@ -451,7 +452,7 @@ virCPUDefFormatBufFull(virBufferPtr buf,
>                                 _("Unexpected CPU mode %d"), def->mode);
>                  goto cleanup;
>              }
> -            virBufferAsprintf(buf, " mode='%s'", tmp);
> +            virBufferAsprintf(&attributeBuf, " mode='%s'", tmp);
>          }
>  
>          if (def->model &&
> @@ -463,10 +464,11 @@ virCPUDefFormatBufFull(virBufferPtr buf,
>                                 def->match);
>                  goto cleanup;
>              }
> -            virBufferAsprintf(buf, " match='%s'", tmp);
> +            virBufferAsprintf(&attributeBuf, " match='%s'", tmp);
>          }
>      }
>  
> +    /* Format children */
>      virBufferAdjustIndent(&childrenBuf, indent + 2);
>      if (def->arch)
>          virBufferAsprintf(&childrenBuf, "<arch>%s</arch>\n",
> @@ -477,16 +479,29 @@ virCPUDefFormatBufFull(virBufferPtr buf,
>      if (virDomainNumaDefCPUFormat(&childrenBuf, numa) < 0)
>          goto cleanup;
>  
> -    if (virBufferUse(&childrenBuf)) {
> -        virBufferAddLit(buf, ">\n");
> -        virBufferAddBuffer(buf, &childrenBuf);
> -        virBufferAddLit(buf, "</cpu>\n");
> -    } else {
> -        virBufferAddLit(buf, "/>\n");
> +    /* Put it all together */
> +    if (virBufferUse(&attributeBuf) || virBufferUse(&childrenBuf)) {
> +
> +        /* Opening tag */
Just some minor nitpicks:
Although I love the idea of commenting the code to make it as much
understandable as possible :), I think this one ^^ comments the obvious...
> +        virBufferAddLit(buf, "<cpu");
> +
> +        /* Attributes (if any) */
same here ^^...
> +        if (virBufferUse(&attributeBuf))
> +            virBufferAddBuffer(buf, &attributeBuf);
> +
> +        /* Children (if any) and closing tag */
same here ^^
> +        if (virBufferUse(&childrenBuf)) {
> +            virBufferAddLit(buf, ">\n");
> +            virBufferAddBuffer(buf, &childrenBuf);
> +            virBufferAddLit(buf, "</cpu>\n");
> +        } else {
> +            virBufferAddLit(buf, "/>\n");
> +        }
>      }
>  
>      ret = 0;
>   cleanup:
> +    virBufferFreeAndReset(&attributeBuf);
>      virBufferFreeAndReset(&childrenBuf);
>      return ret;
>  }
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-empty.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-empty.xml
> new file mode 100644
> index 0000000..2a79826
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-empty.xml
> @@ -0,0 +1,23 @@
> +<domain type='kvm'>
> +  <name>cpu-empty</name>
> +  <uuid>1aed4c39-ad6e-4a78-9264-4ce996290d17</uuid>
> +  <memory unit='KiB'>4000768</memory>
> +  <currentMemory unit='KiB'>1048576</currentMemory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='x86_64' machine='pc'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <cpu>
> +  </cpu>
> +  <clock offset='utc'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>destroy</on_crash>
> +  <devices>
> +    <emulator>/usr/bin/qemu-kvm</emulator>
> +    <controller type='usb' index='0'/>
> +    <controller type='pci' index='0' model='pci-root'/>
> +    <memballoon model='virtio'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-empty.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-empty.xml
> new file mode 100644
> index 0000000..e678607
> --- /dev/null
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-empty.xml
> @@ -0,0 +1,21 @@
> +<domain type='kvm'>
> +  <name>cpu-empty</name>
> +  <uuid>1aed4c39-ad6e-4a78-9264-4ce996290d17</uuid>
> +  <memory unit='KiB'>4000768</memory>
> +  <currentMemory unit='KiB'>1048576</currentMemory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='x86_64' machine='pc'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <clock offset='utc'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>destroy</on_crash>
> +  <devices>
> +    <emulator>/usr/bin/qemu-kvm</emulator>
> +    <controller type='usb' index='0'/>
> +    <controller type='pci' index='0' model='pci-root'/>
> +    <memballoon model='virtio'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
> index 817e408..cd0b280 100644
> --- a/tests/qemuxml2xmltest.c
> +++ b/tests/qemuxml2xmltest.c
> @@ -361,6 +361,7 @@ mymain(void)
>  
>      DO_TEST("clock-utc");
>      DO_TEST("clock-localtime");
> +    DO_TEST_DIFFERENT("cpu-empty");
>      DO_TEST("cpu-kvmclock");
>      DO_TEST("cpu-host-kvmclock");
>      DO_TEST("cpu-host-passthrough-features");
> 
Other than that, it looks good, so I removed the comments marked above
and pushed. Congratulations to your first patch in libvirt ;).
Erik




More information about the libvir-list mailing list