- Fixed all (except 2) compiler warnings gcc -Wall gave.
[tinc] / lib / list.c
index 4c90b58..668a5a9 100644 (file)
     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.2.1 2000/11/15 22:04:48 zarq Exp $
+    $Id: list.c,v 1.1.2.5 2000/11/22 22:18:03 guus Exp $
 */
 
 #include "config.h"
 
+#include <malloc.h>
 #include <string.h>
+#include <syslog.h>
 
-#include <error.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.
 */
-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))
-      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 */
     {
-      res = idx->next;
       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)
@@ -86,8 +81,8 @@ list_node_t *list_delete(list_t *list, list_node_t *idx)
   else
     if(list->tail == NULL)
       list->head = NULL;
+
   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))
 {
-  list_node_t *p;
+  list_node_t *p, *next;
   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;
-  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)
-       p = list_delete(list, p);
+       list_delete(list, p);
     }
 }
 
@@ -125,7 +121,7 @@ void list_destroy(list_t *list)
 {
   if(!list)
     return;
-  list_destroy_nodes(list);
+/*  list_destroy_nodes(list); */
   free(list);
 }
 
@@ -134,13 +130,14 @@ void list_destroy(list_t *list)
 
   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->tail->next = n;
+  if(list->tail)
+    list->tail->next = n;
   list->tail = n;
 }