]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix virDomainDeviceInfoIsSet() to check all struct fields
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 15 May 2012 15:16:49 +0000 (16:16 +0100)
committerCole Robinson <crobinso@redhat.com>
Thu, 14 Jun 2012 22:16:49 +0000 (18:16 -0400)
The virDomainDeviceInfoIsSet API was only checking if an
address or alias was set in the struct. Thus if only a
rom bar setting / filename, boot index, or USB master
value was set, they could be accidentally dropped when
formatting XML
(cherry picked from commit 2c195fdbf3293792e39bc4f06755ae751025b0ea)

src/conf/domain_conf.c
src/conf/domain_conf.h

index 8a39721acdc3baabafe9d604958685f9884a6744..9d059044e45e822dd90dfa958fa57c425a626f4b 100644 (file)
@@ -1896,14 +1896,21 @@ int virDomainDevicePCIAddressIsValid(virDomainDevicePCIAddressPtr addr)
 }
 
 
-static int
+static bool
 virDomainDeviceInfoIsSet(virDomainDeviceInfoPtr info, unsigned int flags)
 {
     if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
-        return 1;
+        return true;
     if (info->alias && !(flags & VIR_DOMAIN_XML_INACTIVE))
-        return 1;
-    return 0;
+        return true;
+    if (info->mastertype != VIR_DOMAIN_CONTROLLER_MASTER_NONE)
+        return true;
+    if ((info->rombar != VIR_DOMAIN_PCI_ROMBAR_DEFAULT) ||
+        info->romfile)
+        return true;
+    if (info->bootIndex)
+        return true;
+    return false;
 }
 
 void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info)
index 0eed60e02a93fce961e587ae4acc0af5a1538e06..1b8741e211428b3407e562b3fe2c33d669c7b13a 100644 (file)
@@ -253,6 +253,10 @@ struct _virDomainDeviceUSBMaster {
 typedef struct _virDomainDeviceInfo virDomainDeviceInfo;
 typedef virDomainDeviceInfo *virDomainDeviceInfoPtr;
 struct _virDomainDeviceInfo {
+    /* If adding to this struct, ensure that
+     * virDomainDeviceInfoIsSet() is updated
+     * to consider the new fields
+     */
     char *alias;
     int type;
     union {