/* Returns: the (possibly changed) start of the #GList  */
GList* g_list_remove(GList *list, gconstpointer data)
/* Returns: the (possibly changed) start of the #GList  */
GList* g_list_remove(GList *list, gconstpointer data)
{
  GList *tmp;
  tmp = list;
  while (tmp)
    {
      if (tmp->data != data)
        tmp = tmp->next;
      else
        {
          list = _g_list_remove_link (list, tmp);
          _g_list_free1 (tmp);
          break;
        }
    }
  return list;
}