summaryrefslogtreecommitdiff
path: root/glib/gslist.c
diff options
context:
space:
mode:
Diffstat (limited to 'glib/gslist.c')
-rw-r--r--glib/gslist.c48
1 files changed, 47 insertions, 1 deletions
diff --git a/glib/gslist.c b/glib/gslist.c
index 7045687ca2..636dd37dc4 100644
--- a/glib/gslist.c
+++ b/glib/gslist.c
@@ -57,7 +57,7 @@ g_slist_set_allocator (GListAllocator* fallocator)
GSList*
-g_slist_alloc ()
+g_slist_alloc (void)
{
GSList *new_list;
@@ -289,6 +289,16 @@ g_slist_nth (GSList *list,
return list;
}
+gpointer
+g_slist_nth_data (GSList *list,
+ guint n)
+{
+ while ((n-- > 0) && list)
+ list = list->next;
+
+ return list ? list->data : NULL;
+}
+
GSList*
g_slist_find (GSList *list,
gpointer data)
@@ -303,6 +313,42 @@ g_slist_find (GSList *list,
return list;
}
+gint
+g_slist_position (GSList *list,
+ GSList *link)
+{
+ gint i;
+
+ i = 0;
+ while (list)
+ {
+ if (list == link)
+ return i;
+ i++;
+ list = list->next;
+ }
+
+ return -1;
+}
+
+gint
+g_slist_index (GSList *list,
+ gpointer data)
+{
+ gint i;
+
+ i = 0;
+ while (list)
+ {
+ if (list->data == data)
+ return i;
+ i++;
+ list = list->next;
+ }
+
+ return -1;
+}
+
GSList*
g_slist_last (GSList *list)
{