diff --git a/glib/glib.h b/glib/glib.h index 6dada46852..343de406ad 100644 --- a/glib/glib.h +++ b/glib/glib.h @@ -531,6 +531,9 @@ GList* g_list_nth (GList *list, guint n); GList* g_list_find (GList *list, gpointer data); +GList *g_list_find_custom (GList *list, + gpointer data, + GCompareFunc func); gint g_list_position (GList *list, GList *link); gint g_list_index (GList *list, @@ -574,6 +577,9 @@ GSList* g_slist_nth (GSList *list, guint n); GSList* g_slist_find (GSList *list, gpointer data); +GSList *g_slist_find_custom (GSList *list, + gpointer data, + GCompareFunc func); gint g_slist_position (GSList *list, GSList *link); gint g_slist_index (GSList *list, diff --git a/glib/glist.c b/glib/glist.c index a24751cbc3..3f84528aa7 100644 --- a/glib/glist.c +++ b/glib/glist.c @@ -324,6 +324,21 @@ g_list_find (GList *list, return list; } +GList * +g_list_find_custom(GList *list, gpointer data, GCompareFunc func) +{ + if(!func) return g_list_find(list, data); + + while (list) + { + if ( !((*func)(list->data, data)) ) break; + list = list->next; + } + + return list; +} + + gint g_list_position (GList *list, GList *link) diff --git a/glib/gslist.c b/glib/gslist.c index 636dd37dc4..cdfc64cb33 100644 --- a/glib/gslist.c +++ b/glib/gslist.c @@ -313,6 +313,20 @@ g_slist_find (GSList *list, return list; } +GSList * +g_slist_find_custom(GSList *list, gpointer data, GCompareFunc func) +{ + if(!func) return g_slist_find(list, data); + + while (list) + { + if ( !((*func)(list->data, data)) ) break; + list = list->next; + } + + return list; +} + gint g_slist_position (GSList *list, GSList *link)