diff options
| author | Johan Hedberg <johan.hedberg@nokia.com> | 2007-01-13 12:27:09 +0000 | 
|---|---|---|
| committer | Johan Hedberg <johan.hedberg@nokia.com> | 2007-01-13 12:27:09 +0000 | 
| commit | f711e58f8f635d0afcf3f02da83780bef83c4347 (patch) | |
| tree | 456ccce2c738b8a9359ec7488eb74707fce339ff /common/list.c | |
| parent | 6561ed8ccf7e8dd56fbaaaa16a7bc9635523e059 (diff) | |
Rename struct slist to GSList and slist_* to g_slist_*
Diffstat (limited to 'common/list.c')
| -rw-r--r-- | common/list.c | 234 | 
1 files changed, 0 insertions, 234 deletions
diff --git a/common/list.c b/common/list.c deleted file mode 100644 index 827f1789..00000000 --- a/common/list.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - * - *  BlueZ - Bluetooth protocol stack for Linux - * - *  Copyright (C) 2004-2006  Marcel Holtmann <marcel@holtmann.org> - *  Copyright (C) 2005-2006  Johan Hedberg <johan.hedberg@nokia.com> - * - * - *  This program is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 2 of the License, or - *  (at your option) any later version. - * - *  This program is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with this program; if not, write to the Free Software - *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <stdio.h> -#include <errno.h> -#include <malloc.h> - -#include "list.h" - -struct slist *slist_append(struct slist *list, void *data) -{ -	struct slist *entry, *tail; - -	entry = malloc(sizeof(struct slist)); -	/* FIXME: this currently just silently fails */ -	if (!entry) -		return list; - -	entry->data = data; -	entry->next = NULL; - -	if (!list) -		return entry; - -	/* Find the end of the list */ -	for (tail = list; tail->next; tail = tail->next); - -	tail->next = entry; - -	return list; -} - -struct slist *slist_prepend(struct slist *list, void *data) -{ -	struct slist *entry; - -	entry = malloc(sizeof(struct slist)); -	/* FIXME: this currently just silently fails */ -	if (!entry) -		return list; - -	entry->data = data; -	entry->next = list; - -	return entry; -} - -struct slist *slist_insert_sorted(struct slist *list, void *data, cmp_func_t cmp_func) -{ -	struct slist *tmp, *prev, *entry; -	int cmp; - -	entry = malloc(sizeof(struct slist)); -	if (!entry) -		return list; - -	entry->data = data; -	entry->next = NULL; - -	if (!list) -		return entry; - -	prev = NULL; -	tmp = list; - -	cmp = cmp_func(data, tmp->data); - -	while (tmp->next && cmp > 0) { -		prev = tmp; -		tmp = tmp->next; - -		cmp = cmp_func(data, tmp->data); -	} - -	if (!tmp->next && cmp > 0) { -		tmp->next = entry; -		return list; -	} - -	if (prev) { -		prev->next = entry; -		entry->next = tmp; -		return list; -	} else { -		entry->next = list; -		return entry; -	} -} - -struct slist *slist_remove(struct slist *list, void *data) -{ -	struct slist *l, *next, *prev = NULL, *match = NULL; - -	if (!list) -		return NULL; - -	for (l = list; l != NULL; l = l->next) { -		if (l->data == data) { -			match = l; -			break; -		} -		prev = l; -	} - -	if (!match) -		return list; - -	next = match->next; - -	free(match); - -	/* If the head was removed, return the next element */ -	if (!prev) -		return next; - -	prev->next = next; - -	return list; -} - -struct slist *slist_find(struct slist *list, const void *data, -			cmp_func_t cmp_func) -{ -	struct slist *l; - -	for (l = list; l != NULL; l = l->next) { -		if (!cmp_func(l->data, data)) -			return l; -	} - -	return NULL; -} - -static struct slist *slist_sort_merge(struct slist *l1, struct slist *l2, -					cmp_func_t cmp_func) -{ -	struct slist list, *l; -	int cmp; - -	l = &list; - -	while (l1 && l2) { -		cmp = cmp_func(l1->data, l2->data); - -		if (cmp <= 0) { -			l = l->next = l1; -			l1 = l1->next; -		} else { -			l = l->next = l2; -			l2 = l2->next; -		} -	} - -	l->next = l1 ? l1 : l2; - -	return list.next; -} - -struct slist *slist_sort(struct slist *list, cmp_func_t cmp_func) -{ -	struct slist *l1, *l2; - -	if (!list || !list->next)  -		return list; - -	l1 = list;  -	l2 = list->next; - -	while ((l2 = l2->next) != NULL) { -		if ((l2 = l2->next) == NULL)  -			break; -		l1 = l1->next; -	} - -	l2 = l1->next;  -	l1->next = NULL; - -	return slist_sort_merge(slist_sort(list, cmp_func), -				slist_sort(l2, cmp_func), cmp_func); -} - -int slist_length(struct slist *list) -{ -	int len; - -	for (len = 0; list != NULL; list = list->next) -		len++; - -	return len; -} - -void slist_foreach(struct slist *list, slist_func_t func, void *user_data) -{ -	while (list) { -		struct slist *next = list->next; -		func(list->data, user_data); -		list = next; -	} -} - -void slist_free(struct slist *list) -{ -	struct slist *l, *next; - -	for (l = list; l != NULL; l = next) { -		next = l->next; -		free(l); -	} -}  | 
