• E
    maint: avoid 'const fooPtr' in domain_conf · d2467709
    Eric Blake 提交于
    '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: NEric Blake <eblake@redhat.com>
    d2467709
domain_conf.c 594.9 KB