From: Anthony Liguori <aliguori@us.ibm.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: qemu-devel@nongnu.org, avi@redhat.com
Subject: [Qemu-devel] Re: [PATCH 02/15] Introduce QList
Date: Tue, 06 Oct 2009 20:37:43 -0500 [thread overview]
Message-ID: <4ACBF0E7.1010207@us.ibm.com> (raw)
In-Reply-To: <1254875232-25012-3-git-send-email-lcapitulino@redhat.com>
Luiz Capitulino wrote:
> QList is a high-level data type that can be used to store QObjects
> in a singly-linked list.
>
> The following functions are available:
>
> - qlist_new() Create a new QList
> - qlist_append() Append a QObject to the list
> - qlist_iter() Iterate over stored QObjects
>
> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> ---
> Makefile | 2 +-
> qlist.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> qlist.h | 27 ++++++++++++++++
> qobject.h | 1 +
> 4 files changed, 129 insertions(+), 1 deletions(-)
> create mode 100644 qlist.c
> create mode 100644 qlist.h
>
<snip>
> +/**
> + * qlist_iter(): Iterate over all the list's stored values.
> + *
> + * This function allows the user to provide an iterator, which will be
> + * called for each stored value in the list.
> + */
> +void qlist_iter(const QList *qlist,
> + void (*iter)(QObject *obj, void *opaque), void *opaque)
> +{
> + QListEntry *entry;
> +
> + QTAILQ_FOREACH(entry, &qlist->head, next)
> + iter(entry->value, opaque);
> +}
> +
> +/**
> + * qobject_to_qlist(): Convert a QObject into a QList
> + */
> +QList *qobject_to_qlist(const QObject *obj)
> +{
> + if (qobject_type(obj) != QTYPE_QLIST)
> + return NULL;
> +
> + return container_of(obj, QList, base);
> +}
>
Missing {} around ifs.
> +
> +/**
> + * qlist_destroy_obj(): Free all the memory allocated by a QList
> + */
> +static void qlist_destroy_obj(QObject *obj)
> +{
> + QList *qlist;
> + QListEntry *entry, *next_entry;
> +
> + assert(obj != NULL);
>
Usually accepting NULL in a free function makes for nicer exit paths in
function.
> + qlist = qobject_to_qlist(obj);
> +
> + QTAILQ_FOREACH_SAFE(entry, &qlist->head, next, next_entry) {
> + QTAILQ_REMOVE(&qlist->head, entry, next);
> + qobject_decref(entry->value);
> + qemu_free(entry);
> + }
> +
> + qemu_free(qlist);
> +}
> +
> +static const QType qlist_type = {
> + .code = QTYPE_QLIST,
> + .destroy = qlist_destroy_obj,
> +};
>
Forward definitions of statics usually indicate code motion is in
order. In this case, I think it's probably a good idea as my first
reaction to this was, gees, this has to be dead code since it's a static
at the end of a file.
> diff --git a/qlist.h b/qlist.h
> new file mode 100644
> index 0000000..b38786e
> --- /dev/null
> +++ b/qlist.h
> @@ -0,0 +1,27 @@
>
Missing copyright/license.
> +#ifndef QLIST
> +#define QLIST
>
Should probably at least do QLIST_H to avoid namespace polution.
--
Regards,
Anthony Liguori
next prev parent reply other threads:[~2009-10-07 1:38 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-07 0:26 [Qemu-devel] [PATCH v2 00/15]: Initial QObject conversion Luiz Capitulino
2009-10-07 0:26 ` [Qemu-devel] [PATCH 01/15] QObject: Accept NULL Luiz Capitulino
2009-10-07 0:26 ` [Qemu-devel] [PATCH 02/15] Introduce QList Luiz Capitulino
2009-10-07 1:37 ` Anthony Liguori [this message]
2009-10-07 12:48 ` [Qemu-devel] " Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 03/15] Introduce QList unit-tests Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 04/15] monitor: Add user_print() to mon_cmd_t Luiz Capitulino
2009-10-07 1:40 ` [Qemu-devel] " Anthony Liguori
2009-10-07 12:52 ` Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 05/15] monitor: Handle new and old style handlers Luiz Capitulino
2009-10-07 1:42 ` [Qemu-devel] " Anthony Liguori
2009-10-07 12:54 ` Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 06/15] monitor: do_info(): handle new and old info handlers Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 07/15] monitor: Convert do_quit() do QObject Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 08/15] monitor: Convert do_stop() to QObject Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 09/15] monitor: Convert do_system_reset() " Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 10/15] monitor: Convert do_system_powerdown() " Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 11/15] monitor: Convert do_cont() " Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 12/15] monitor: Convert do_balloon() " Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 13/15] monitor: Convert do_info_version() " Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 14/15] monitor: Convert do_info_balloon() " Luiz Capitulino
2009-10-07 0:27 ` [Qemu-devel] [PATCH 15/15] monitor: Convert do_info_cpus() " Luiz Capitulino
2009-10-07 1:46 ` [Qemu-devel] " Anthony Liguori
2009-10-07 13:04 ` Luiz Capitulino
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4ACBF0E7.1010207@us.ibm.com \
--to=aliguori@us.ibm.com \
--cc=avi@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.