
On Thu, Jun 09, 2016 at 17:02:39 +0200, Michal Privoznik wrote:
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 | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 4 ++++ src/libvirt_private.syms | 2 ++ 3 files changed, 50 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 8f5935c..7b2ff98 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -14597,6 +14597,50 @@ 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 (STRNEQ_NULLABLE(redirdev->info.alias, tmp->info.alias)) + continue;
I don't think we currently match the alias across our device finding functions. The reason for that is that you won't be able to unplug the device with --live --config specified for virsh or the corresponding flag values as the inactive device doesn't have an alias.
+ + break;
You can "return i" right away since you already found the device.
+ } + + if (i < def->nredirdevs) + return i;
This is then not necessary
+ + return -1; +}