[libvirt] [PATCH 4/4] conf: Add iterators for RNG and Redirdev

Pavel Hrdina phrdina at redhat.com
Mon Oct 24 07:47:15 UTC 2016


On Fri, Oct 21, 2016 at 07:25:40PM -0400, John Ferlan wrote:
> Add the virDomainRNGDefForeach and +virDomainRedirdevDefForeach iterators
> to traverse all the RNG and Redirdevs just like the Smartcard's and Chr's

Those are simple for loops over one array and I don't see any benefit of those
helpers.  If someone want's to iterate over RNG or Redirect devices they can
use a simple for loop without a need to create an extra iterator function.

I would rather remove the helper for Smartcards because it's the same case,
the only one that make sense is for char devices, because there are four
arrays and you usually wants to iterate over all of the char devices.

Pavel

> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  src/conf/domain_conf.c   | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
>  src/conf/domain_conf.h   | 18 ++++++++++++++++++
>  src/libvirt_private.syms |  2 ++
>  3 files changed, 68 insertions(+)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index de7df5c..30f2d6d 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -24559,6 +24559,54 @@ virDomainSmartcardDefForeach(virDomainDefPtr def,
>  
>  
>  int
> +virDomainRNGDefForeach(virDomainDefPtr def,
> +                       bool abortOnError,
> +                       virDomainRNGDefIterator iter,
> +                       void *opaque)
> +{
> +    size_t i;
> +    int rc = 0;
> +
> +    for (i = 0; i < def->nrngs; i++) {
> +        if ((iter)(def,
> +                   def->rngs[i],
> +                   opaque) < 0)
> +            rc = -1;
> +
> +        if (abortOnError && rc != 0)
> +            goto done;
> +    }
> +
> + done:
> +    return rc;
> +}
> +
> +
> +int
> +virDomainRedirdevDefForeach(virDomainDefPtr def,
> +                            bool abortOnError,
> +                            virDomainRedirdevDefIterator iter,
> +                            void *opaque)
> +{
> +    size_t i;
> +    int rc = 0;
> +
> +    for (i = 0; i < def->nredirdevs; i++) {
> +        if ((iter)(def,
> +                   def->redirdevs[i],
> +                   opaque) < 0)
> +            rc = -1;
> +
> +        if (abortOnError && rc != 0)
> +            goto done;
> +    }
> +
> + done:
> +    return rc;
> +}
> +
> +
> +int
>  virDomainUSBDeviceDefForeach(virDomainDefPtr def,
>                               virDomainUSBDeviceDefIterator iter,
>                               void *opaque,
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index df216e8..df962d7 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -2948,6 +2948,24 @@ int virDomainChrDefForeach(virDomainDefPtr def,
>                             virDomainChrDefIterator iter,
>                             void *opaque);
>  
> +typedef int (*virDomainRNGDefIterator)(virDomainDefPtr def,
> +                                       virDomainRNGDefPtr dev,
> +                                       void *opaque);
> +
> +int virDomainRNGDefForeach(virDomainDefPtr def,
> +                           bool abortOnError,
> +                           virDomainRNGDefIterator iter,
> +                           void *opaque);
> +
> +typedef int (*virDomainRedirdevDefIterator)(virDomainDefPtr def,
> +                                            virDomainRedirdevDefPtr dev,
> +                                            void *opaque);
> +
> +int virDomainRedirdevDefForeach(virDomainDefPtr def,
> +                                bool abortOnError,
> +                                virDomainRedirdevDefIterator iter,
> +                                void *opaque);
> +
>  typedef int (*virDomainDiskDefPathIterator)(virDomainDiskDefPtr disk,
>                                              const char *path,
>                                              size_t depth,
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index bf503a5..c777738 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -453,9 +453,11 @@ virDomainPMSuspendedReasonTypeToString;
>  virDomainRedirdevBusTypeFromString;
>  virDomainRedirdevBusTypeToString;
>  virDomainRedirdevDefFind;
> +virDomainRedirdevDefForeach;
>  virDomainRedirdevDefFree;
>  virDomainRedirdevDefRemove;
>  virDomainRNGBackendTypeToString;
> +virDomainRNGDefForeach;
>  virDomainRNGDefFree;
>  virDomainRNGFind;
>  virDomainRNGModelTypeToString;
> -- 
> 2.7.4
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20161024/4bbbade0/attachment-0001.sig>


More information about the libvir-list mailing list