diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2010-10-16 07:40:44 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2011-06-03 22:04:31 -0400 |
commit | f065d7d60e2b6110705b1b32f050ccad0bcde62f (patch) | |
tree | 000a4e919f702e9a0043bfc31484ae738b821a33 | |
parent | 496157ffd3350799198e32e1002a19fc8be3ea83 (diff) | |
download | glib-f065d7d60e2b6110705b1b32f050ccad0bcde62f.tar.gz |
Have g_queue_remove() return a boolean
g_queue_remove() should return a boolean so callers can verify that an
element was found and removed, as in the following example:
if (g_queue_remove (queue, referenced_object))
g_object_unref (referenced_object);
Similarly, g_queue_remove_all() should return the number of elements
found and removed.
https://bugzilla.gnome.org/show_bug.cgi?id=632294
-rw-r--r-- | glib/gqueue.c | 19 | ||||
-rw-r--r-- | glib/gqueue.h | 4 |
2 files changed, 17 insertions, 6 deletions
diff --git a/glib/gqueue.c b/glib/gqueue.c index 2e7d05a2c..358b66916 100644 --- a/glib/gqueue.c +++ b/glib/gqueue.c @@ -880,20 +880,24 @@ g_queue_index (GQueue *queue, * * Removes the first element in @queue that contains @data. * + * Return value: %TRUE if @data was found and removed from @queue + * * Since: 2.4 **/ -void +gboolean g_queue_remove (GQueue *queue, gconstpointer data) { GList *link; - g_return_if_fail (queue != NULL); + g_return_val_if_fail (queue != NULL, FALSE); link = g_list_find (queue->head, data); if (link) g_queue_delete_link (queue, link); + + return (link != NULL); } /** @@ -903,15 +907,20 @@ g_queue_remove (GQueue *queue, * * Remove all elements whose data equals @data from @queue. * + * Return value: the number of elements removed from @queue + * * Since: 2.4 **/ -void +guint g_queue_remove_all (GQueue *queue, gconstpointer data) { GList *list; + guint old_length; - g_return_if_fail (queue != NULL); + g_return_val_if_fail (queue != NULL, 0); + + old_length = queue->length; list = queue->head; while (list) @@ -923,6 +932,8 @@ g_queue_remove_all (GQueue *queue, list = next; } + + return (old_length - queue->length); } /** diff --git a/glib/gqueue.h b/glib/gqueue.h index e78488fb6..345d2c76d 100644 --- a/glib/gqueue.h +++ b/glib/gqueue.h @@ -85,9 +85,9 @@ gpointer g_queue_peek_nth (GQueue *queue, guint n); gint g_queue_index (GQueue *queue, gconstpointer data); -void g_queue_remove (GQueue *queue, +gboolean g_queue_remove (GQueue *queue, gconstpointer data); -void g_queue_remove_all (GQueue *queue, +guint g_queue_remove_all (GQueue *queue, gconstpointer data); void g_queue_insert_before (GQueue *queue, GList *sibling, |