[libvirt] [PATCH v2 2/7] virDomainRedirdevDef: Introduce find & remove routines
John Ferlan
jferlan at redhat.com
Thu Jun 16 19:38:46 UTC 2016
On 06/10/2016 11:32 AM, 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 at redhat.com>
> ---
> src/conf/domain_conf.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> src/conf/domain_conf.h | 4 ++++
> src/libvirt_private.syms | 2 ++
> 3 files changed, 48 insertions(+)
>
ACK - one note below.
John
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index c75279d..e0d10e9 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -14603,6 +14603,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;
> +
I would think if type == NONE, then neither AddressIsEqual or Alias will
matter. This way works, but after seeing Laine's recent patch about &&
I had to think a bit!
> + 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)
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 3792562..c1b002a 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -2827,6 +2827,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);
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 85b9cd1..4625886 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -424,7 +424,9 @@ virDomainPMSuspendedReasonTypeFromString;
> virDomainPMSuspendedReasonTypeToString;
> virDomainRedirdevBusTypeFromString;
> virDomainRedirdevBusTypeToString;
> +virDomainRedirdevDefFind;
> virDomainRedirdevDefFree;
> +virDomainRedirdevDefRemove;
> virDomainRNGBackendTypeToString;
> virDomainRNGDefFree;
> virDomainRNGFind;
>
More information about the libvir-list
mailing list