]> xenbits.xensource.com Git - libvirt.git/commitdiff
virDomainRedirdevDef: Introduce find & remove routines
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 9 Jun 2016 09:17:01 +0000 (11:17 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 17 Jun 2016 16:12:43 +0000 (18:12 +0200)
Basically, there are just two functions introduced here:
virDomainRedirdevDefFind which looks up given redirdev in domain
definition, and virDomainRedirdevDefRemove which removes the
device at given index in the array of devices.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms

index b5cf2229be3c6f9236e643b8726abff42b1a6f5a..0a641b0b7c9b21daf15da4400fd77b9d584dfefd 100644 (file)
@@ -14615,6 +14615,48 @@ virDomainMemoryRemove(virDomainDefPtr def,
 }
 
 
+ssize_t
+virDomainRedirdevDefFind(virDomainDefPtr def,
+                         virDomainRedirdevDefPtr redirdev)
+{
+    size_t i;
+
+    for (i = 0; i < def->nredirdevs; i++) {
+        virDomainRedirdevDefPtr tmp = def->redirdevs[i];
+
+        if (redirdev->bus != tmp->bus)
+            continue;
+
+        if (!virDomainChrSourceDefIsEqual(&redirdev->source.chr,
+                                          &tmp->source.chr))
+            continue;
+
+        if (redirdev->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
+            !virDomainDeviceInfoAddressIsEqual(&redirdev->info, &tmp->info))
+            continue;
+
+        if (redirdev->info.alias &&
+            STRNEQ_NULLABLE(redirdev->info.alias, tmp->info.alias))
+            continue;
+
+        return i;
+    }
+
+    return -1;
+}
+
+
+virDomainRedirdevDefPtr
+virDomainRedirdevDefRemove(virDomainDefPtr def, size_t idx)
+{
+    virDomainRedirdevDefPtr ret = def->redirdevs[idx];
+
+    VIR_DELETE_ELEMENT(def->redirdevs, idx, def->nredirdevs);
+
+    return ret;
+}
+
+
 char *
 virDomainDefGetDefaultEmulator(virDomainDefPtr def,
                                virCapsPtr caps)
index 428f85d32dd84d942a697224f2c8ab3d10ae8c70..6e81e5251e6a8fd5e49e2382e90411eafc71e8e6 100644 (file)
@@ -2834,6 +2834,10 @@ virDomainChrRemove(virDomainDefPtr vmdef,
 ssize_t virDomainRNGFind(virDomainDefPtr def, virDomainRNGDefPtr rng);
 virDomainRNGDefPtr virDomainRNGRemove(virDomainDefPtr def, size_t idx);
 
+ssize_t virDomainRedirdevDefFind(virDomainDefPtr def,
+                                 virDomainRedirdevDefPtr redirdev);
+virDomainRedirdevDefPtr virDomainRedirdevDefRemove(virDomainDefPtr def, size_t idx);
+
 int virDomainSaveXML(const char *configDir,
                      virDomainDefPtr def,
                      const char *xml);
index f6a2c1b2b8e64ba5716e99d0d988a96d6e95f233..f62dd705f66a68e50d7bf88771146609eba01a12 100644 (file)
@@ -425,7 +425,9 @@ virDomainPMSuspendedReasonTypeFromString;
 virDomainPMSuspendedReasonTypeToString;
 virDomainRedirdevBusTypeFromString;
 virDomainRedirdevBusTypeToString;
+virDomainRedirdevDefFind;
 virDomainRedirdevDefFree;
+virDomainRedirdevDefRemove;
 virDomainRNGBackendTypeToString;
 virDomainRNGDefFree;
 virDomainRNGFind;