On 3/19/21 4:56 PM, Tim Wiederhake wrote:
This series replaces some recurring boilerplate code in src/conf/ regarding
the extraction of a virTristate(Switch|Bool) XML attribute.

The boilerplate code looks roughly like this,

   g_autofree char *str = NULL;
   if (str = virXMLPropString(node, ...)) {
     int val;
     if ((val = virTristateBoolTypeFromString(str)) <= 0) {
       virReportError(...)
       return -1;
     }
     def->... = val;
   }

with some variations regarding how `str` is free'd in case of later re-use,
the exact error message for invalid values, whether or not
`VIR_TRISTATE_(SWITCH|BOOL)_ABSENT` is explicitly checked for (`val < 0` vs.
`val <= 0`), whether an intermediate variable is used or the value is assigned
directly, and in some cases the conditions in the two if-blocks are merged.

As a side effect, this makes the error messages for invalid values in these
attributes much more consistent and catches some instances where e.g.
`<foo bar="default"/>` would incorrectly be accepted.

V1: https://listman.redhat.com/archives/libvir-list/2021-March/msg00853.html
V2: https://listman.redhat.com/archives/libvir-list/2021-March/msg00994.html

Changes since V2:
* Fixed the -Wtautological-unsigned-enum-zero-compare issues in the first
   part of the series. These issues were solved later in the series, but
   this change makes it easier to bisect in the future.

I was thinking about only re-sending the first couple of patches, but the
latter part would have endet up with quite a few conflicts, so I am sending
it in its entirety, again. Sorry for the spam!

Cheers,
Tim

Alternatively, rewrite to virXMLPropTristateXXX() could have gone in the first, followed by change of struct members to virTristateXXX which would have produced smalled diff. But I guess it doesn't matter.


Tim Wiederhake (51):
   conf: Use virTristateXXX in virStorageSource
   conf: Use virTristateXXX in virStorageSourceNVMeDef
   conf: Use virTristateXXX in virDomainDeviceInfo
   conf: Use virTristateXXX in virDomainDiskDef
   conf: Use virTristateXXX in virDomainActualNetDef
   conf: Use virTristateXXX in virDomainNetDef
   conf: Use virTristateXXX in virDomainChrSourceDef
   conf: Use virTristateXXX in virDomainGraphicsDef
   conf: Use virTristateXXX in virDomainMemballoonDef
   conf: Use virTristateXXX in virDomainLoaderDef
   conf: Use virTristateXXX in virDomainDef
   conf: Use virTristateXXX in virStorageAdapterFCHost
   conf: Use virTristateXXX in virStoragePoolSourceDevice
   conf: Use virTristateXXX in virPCIDeviceAddress
   virxml: Add virXMLPropTristateBool
   virxml: Add virXMLPropTristateSwitch
   domain_conf: Use virXMLPropTristateXXX in
     virDomainKeyWrapCipherDefParseXML
   domain_conf: Use virXMLPropTristateXXX in
     virDomainVirtioOptionsParseXML
   domain_conf: Use virXMLPropTristateXXX in virDomainDeviceInfoParseXML
   domain_conf: Use virXMLPropTristateXXX in
     virDomainDiskSourceNetworkParse
   domain_conf: Use virXMLPropTristateXXX in virDomainDiskSourceNVMeParse
   domain_conf: Use virXMLPropTristateXXX in
     virDomainDiskDefDriverParseXML
   domain_conf: Use virXMLPropTristateXXX in
     virDomainActualNetDefParseXML
   domain_conf: Use virXMLPropTristateXXX in
     virDomainChrSourceReconnectDefParseXML
   domain_conf: Use virXMLPropTristateXXX in virDomainNetDefParseXML
   domain_conf: Use virXMLPropTristateXXX in
     virDomainChrSourceDefParseTCP
   domain_conf: Use virXMLPropTristateXXX in
     virDomainChrSourceDefParseFile
   domain_conf: Use virXMLPropTristateXXX in
     virDomainChrSourceDefParseLog
   domain_conf: Use virXMLPropTristateXXX in
     virDomainGraphicsDefParseXMLVNC
   domain_conf: Use virXMLPropTristateXXX in
     virDomainGraphicsDefParseXMLSDL
   domain_conf: Use virXMLPropTristateXXX in
     virDomainGraphicsDefParseXMLSpice
   domain_conf: Use virXMLPropTristateXXX in virDomainAudioCommonParse
   domain_conf: Use virXMLPropTristateXXX in virDomainAudioJackParse
   domain_conf: Use virXMLPropTristateXXX in virDomainAudioOSSParse
   domain_conf: Use virXMLPropTristateXXX in virDomainAudioDefParseXML
   domain_conf: Use virXMLPropTristateXXX in
     virDomainMemballoonDefParseXML
   domain_conf: Use virXMLPropTristateXXX in virDomainShmemDefParseXML
   domain_conf: Use virXMLPropTristateXXX in
     virDomainPerfEventDefParseXML
   domain_conf: Use virXMLPropTristateXXX in virDomainMemoryDefParseXML
   domain_conf: Use virXMLPropTristateXXX in virDomainIOMMUDefParseXML
   domain_conf: Use virXMLPropTristateXXX in virDomainVsockDefParseXML
   domain_conf: Use virXMLPropTristateXXX in virDomainFeaturesDefParse
   domain_conf: Use virXMLPropTristateXXX in virDomainLoaderDefParseXML
   domain_conf: Use virXMLPropTristateXXX in virDomainVcpuParse
   backup_conf: Use virXMLPropTristateXXX in
     virDomainBackupDiskDefParseXML
   backup_conf: Use virXMLPropTristateXXX in virDomainBackupDefParse
   device_conf: Use virXMLPropTristateXXX in virPCIDeviceAddressParseXML
   network_conf: Use virXMLPropTristateXXX in
     virNetworkForwardNatDefParseXML
   numa_conf: Use virXMLPropTristateXXX in virDomainNumaDefParseXML
   storage_adapter_conf: Use virXMLPropTristateXXX in
     virStorageAdapterParseXMLFCHost
   storage_conf: Use virXMLPropTristateXXX in
     virStoragePoolDefParseSource

  src/conf/backup_conf.c          |  32 +-
  src/conf/device_conf.c          |   8 +-
  src/conf/device_conf.h          |   4 +-
  src/conf/domain_conf.c          | 794 +++++++-------------------------
  src/conf/domain_conf.h          |  28 +-
  src/conf/network_conf.c         |  15 +-
  src/conf/numa_conf.c            |  14 +-
  src/conf/storage_adapter_conf.c |  14 +-
  src/conf/storage_adapter_conf.h |   2 +-
  src/conf/storage_conf.c         |  17 +-
  src/conf/storage_conf.h         |   2 +-
  src/conf/storage_source_conf.h  |   4 +-
  src/libvirt_private.syms        |   2 +
  src/qemu/qemu_command.c         |   3 +-
  src/qemu/qemu_hotplug.c         |   2 +-
  src/util/virpci.h               |   2 +-
  src/util/virxml.c               |  82 ++++
  src/util/virxml.h               |   9 +
  18 files changed, 301 insertions(+), 733 deletions(-)


Reviewed-by: Michal Privoznik <mpriv...@redhat.com>

Will push at the end of day, to give others chance to object.

Michal

Reply via email to