qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 02/24] qom: add object_child_foreach


From: Andreas Färber
Subject: Re: [Qemu-devel] [PATCH v2 02/24] qom: add object_child_foreach
Date: Thu, 12 Apr 2012 18:03:14 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120312 Thunderbird/11.0

Am 11.04.2012 23:30, schrieb Paolo Bonzini:
> A utility function that will be used to implement hierarchical realization.
> 
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
>  include/qemu/object.h |   14 +++++++++++++-
>  qom/object.c          |   17 +++++++++++++++++
>  2 files changed, 30 insertions(+), 1 deletion(-)
> 
> diff --git a/include/qemu/object.h b/include/qemu/object.h
> index f814521..470efe3 100644
> --- a/include/qemu/object.h
> +++ b/include/qemu/object.h
> @@ -918,6 +918,19 @@ void object_property_add_str(Object *obj, const char 
> *name,
>                               struct Error **errp);
>  
>  /**
> + * object_child_foreach:
> + * @obj: the object whose children will be navigated
> + * @fn: the iterator function to be called
> + * @opaque: an opaque value that will be passed to the iterator
> + *
> + * Call @fn passing each child of @obj and @opaque to it, until @fn returns
> + * non-zero.  Return the last value returned by @fn, or 0 if there is no
> + * child.
> + */
> +int object_child_foreach(Object *obj, int (*fn)(Object *child, void *opaque),
> +                         void *opaque);
> +
> +/**
>   * container_get:
>   * @path: path to the container
>   *
> @@ -928,5 +941,4 @@ void object_property_add_str(Object *obj, const char 
> *name,
>   */
>  Object *container_get(const char *path);
>  
> -

Unrelated whitespace change. I intentionally leave two empty lines
before #endif in my header files. Otherwise looks okay.

Andreas

>  #endif
> diff --git a/qom/object.c b/qom/object.c
> index 3e9fed7..4975d93 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -597,6 +597,23 @@ void object_class_foreach(void (*fn)(ObjectClass *klass, 
> void *opaque),
>      g_hash_table_foreach(type_table_get(), object_class_foreach_tramp, 
> &data);
>  }
>  
> +int object_child_foreach(Object *obj, int (*fn)(Object *child, void *opaque),
> +                         void *opaque)
> +{
> +    ObjectProperty *prop;
> +    int ret = 0;
> +
> +    QTAILQ_FOREACH(prop, &obj->properties, node) {
> +        if (strstart(prop->type, "child<", NULL)) {
> +            ret = fn(prop->opaque, opaque);
> +            if (ret != 0) {
> +                break;
> +            }
> +        }
> +    }
> +    return ret;
> +}
> +
>  static void object_class_get_list_tramp(ObjectClass *klass, void *opaque)
>  {
>      GSList **list = opaque;

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg



reply via email to

[Prev in Thread] Current Thread [Next in Thread]