projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- Don't even think about using sscanf with %as anymore
[tinc]
/
lib
/
list.c
diff --git
a/lib/list.c
b/lib/list.c
index
5358f19
..
f509e21
100644
(file)
--- a/
lib/list.c
+++ b/
lib/list.c
@@
-17,14
+17,15
@@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id: list.c,v 1.1
2000/10/20 16:44:32 zarq
Exp $
+ $Id: list.c,v 1.1
.2.6 2000/11/22 23:09:38 guus
Exp $
*/
#include "config.h"
*/
#include "config.h"
+#include <stdlib.h>
#include <string.h>
#include <string.h>
+#include <syslog.h>
-#include <error.h>
#include <list.h>
#include <xalloc.h>
#include <list.h>
#include <xalloc.h>
@@
-48,31
+49,25
@@
list_t *list_new(void)
Delete the element pointed to by idx from the list.
*/
Delete the element pointed to by idx from the list.
*/
-
list_node_t *
list_delete(list_t *list, list_node_t *idx)
+
void
list_delete(list_t *list, list_node_t *idx)
{
{
- list_node_t *res;
-
- if(!list)
- return NULL;
- if(!idx)
- return NULL;
+ if(!list || !idx)
+ return;
if(list->callbacks->delete != NULL)
if(list->callbacks->delete(idx->data))
if(list->callbacks->delete != NULL)
if(list->callbacks->delete(idx->data))
-
error(ERR_WARNING, N
_("List callback[delete] failed for %08lx - freeing anyway"), idx->data);
+
syslog(LOG_WARNING,
_("List callback[delete] failed for %08lx - freeing anyway"), idx->data);
free(idx->data);
if(idx->prev == NULL)
/* First element in list */
{
free(idx->data);
if(idx->prev == NULL)
/* First element in list */
{
- res = idx->next;
list->head = idx->next;
}
if(idx->next == NULL)
/* Last element in list */
{
list->head = idx->next;
}
if(idx->next == NULL)
/* Last element in list */
{
- res = NULL;
list->tail = idx->prev;
}
if(idx->prev != NULL && idx->next != NULL)
list->tail = idx->prev;
}
if(idx->prev != NULL && idx->next != NULL)
@@
-86,8
+81,8
@@
list_node_t *list_delete(list_t *list, list_node_t *idx)
else
if(list->tail == NULL)
list->head = NULL;
else
if(list->tail == NULL)
list->head = NULL;
+
free(idx);
free(idx);
- return res;
}
/*
}
/*
@@
-98,7
+93,7
@@
list_node_t *list_delete(list_t *list, list_node_t *idx)
*/
void list_forall_nodes(list_t *list, int (*function)(void *data))
{
*/
void list_forall_nodes(list_t *list, int (*function)(void *data))
{
- list_node_t *p;
+ list_node_t *p
, *next
;
int res;
if(!list) /* no list given */
int res;
if(!list) /* no list given */
@@
-107,11
+102,12
@@
void list_forall_nodes(list_t *list, int (*function)(void *data))
return;
if(!list->head) /* list is empty */
return;
return;
if(!list->head) /* list is empty */
return;
- for(p = list->head; p != NULL; p =
p->
next)
+ for(p = list->head; p != NULL; p = next)
{
{
+ next = p->next;
res = function(p->data);
if(res != 0)
res = function(p->data);
if(res != 0)
-
p =
list_delete(list, p);
+ list_delete(list, p);
}
}
}
}
@@
-125,7
+121,7
@@
void list_destroy(list_t *list)
{
if(!list)
return;
{
if(!list)
return;
- list_destroy_nodes(list);
+/* list_destroy_nodes(list); */
free(list);
}
free(list);
}
@@
-134,13
+130,14
@@
void list_destroy(list_t *list)
Append a new node to the list that points to data.
*/
Append a new node to the list that points to data.
*/
-list_append(list_t *list, void *data)
+
void
list_append(list_t *list, void *data)
{
list_node_t *n;
n = xmalloc_and_zero(sizeof(list_node_t));
n->data = data;
n->prev = list->tail;
{
list_node_t *n;
n = xmalloc_and_zero(sizeof(list_node_t));
n->data = data;
n->prev = list->tail;
- list->tail->next = n;
+ if(list->tail)
+ list->tail->next = n;
list->tail = n;
}
list->tail = n;
}