[libvirt] [PATCH 10/15] maint: avoid 'const fooPtr' in domain_conf

Daniel P. Berrange berrange at redhat.com
Mon Oct 14 15:33:20 UTC 2013


On Tue, Oct 08, 2013 at 11:25:07AM -0600, Eric Blake wrote:
> 'const fooPtr' is the same as 'foo * const' (the pointer won't
> change, but it's contents can).  But in general, if an interface
> is trying to be const-correct, it should be using 'const foo *'
> (the pointer is to data that can't be changed).
> 
> Fix up offenders in src/conf/domain_conf, and their fallout.
> 
> Several things to note: virObjectLock() requires a non-const
> argument; if this were C++, we could treat the locking field
> as 'mutable' and allow locking an otherwise 'const' object, but
> that is a more invasive change, so I instead dropped attempts
> to be const-correct on domain lookup.  virXMLPropString and
> friends require a non-const xmlNodePtr - this is because libxml2
> is not a const-correct library.  We could make the src/util/virxml
> wrappers cast away const, but I figured it was easier to not
> try to mark xmlNodePtr as const.  Finally, virDomainDeviceDefCopy
> was a rather hard conversion - it calls virDomainDeviceDefPostParse,
> which in turn in the xen driver was actually modifying the domain
> outside of the current device being visited.  We should not be
> adding a device on the first per-device callback, but waiting until
> after all per-device callbacks are complete.
> 
> * src/conf/domain_conf.h (virDomainObjListFindByID)
> (virDomainObjListFindByUUID, virDomainObjListFindByName)
> (virDomainObjAssignDef, virDomainObjListAdd): Drop attempt at
> const.
> (virDomainDeviceDefCopy): Use intended type.
> (virDomainDeviceDefParse, virDomainDeviceDefPostParseCallback)
> (virDomainVideoDefaultType, virDomainVideoDefaultRAM)
> (virDomainChrGetDomainPtrs): Make const-correct.
> * src/conf/domain_conf.c (virDomainObjListFindByID)
> (virDomainObjListFindByUUID, virDomainObjListFindByName)
> (virDomainDeviceDefCopy, virDomainObjListAdd)
> (virDomainObjAssignDef, virDomainHostdevSubsysUsbDefParseXML)
> (virDomainHostdevSubsysPciOrigStatesDefParseXML)
> (virDomainHostdevSubsysPciDefParseXML)
> (virDomainHostdevSubsysScsiDefParseXML)
> (virDomainControllerModelTypeFromString)
> (virDomainTPMDefParseXML, virDomainTimerDefParseXML)
> (virDomainSoundCodecDefParseXML, virDomainSoundDefParseXML)
> (virDomainWatchdogDefParseXML, virDomainRNGDefParseXML)
> (virDomainMemballoonDefParseXML, virDomainNVRAMDefParseXML)
> (virSysinfoParseXML, virDomainVideoAccelDefParseXML)
> (virDomainVideoDefParseXML, virDomainHostdevDefParseXML)
> (virDomainRedirdevDefParseXML)
> (virDomainRedirFilterUsbDevDefParseXML)
> (virDomainRedirFilterDefParseXML, virDomainIdMapEntrySort)
> (virDomainIdmapDefParseXML, virDomainVcpuPinDefParseXML)
> (virDiskNameToBusDeviceIndex, virDomainDeviceDefCopy)
> (virDomainVideoDefaultType, virDomainHostdevAssignAddress)
> (virDomainDeviceDefPostParseInternal, virDomainDeviceDefPostParse)
> (virDomainChrGetDomainPtrs, virDomainControllerSCSINextUnit)
> (virDomainSCSIDriveAddressIsUsed)
> (virDomainDriveAddressIsUsedByDisk)
> (virDomainDriveAddressIsUsedByHostdev): Fix fallout.
> * src/openvz/openvz_driver.c (openvzDomainDeviceDefPostParse):
> Likewise.
> * src/libxl/libxl_domain.c (libxlDomainDeviceDefPostParse):
> Likewise.
> * src/qemu/qemu_domain.c (qemuDomainDeviceDefPostParse)
> (qemuDomainDefaultNetModel): Likewise.
> * src/lxc/lxc_domain.c (virLXCDomainDeviceDefPostParse):
> Likewise.
> * src/uml/uml_driver.c (umlDomainDeviceDefPostParse): Likewise.
> * src/xen/xen_driver.c (xenDomainDeviceDefPostParse): Split...
> (xenDomainDefPostParse): ...since per-device callback is not the
> time to be adding a device.
> 
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>  src/conf/domain_conf.c     | 94 ++++++++++++++++++++++++----------------------
>  src/conf/domain_conf.h     | 24 +++++++-----
>  src/libxl/libxl_domain.c   |  2 +-
>  src/lxc/lxc_domain.c       |  4 +-
>  src/openvz/openvz_driver.c |  2 +-
>  src/qemu/qemu_domain.c     |  5 ++-
>  src/uml/uml_driver.c       |  6 +--
>  src/xen/xen_driver.c       | 12 +++++-
>  8 files changed, 84 insertions(+), 65 deletions(-)

ACK

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list