1.1 --- a/ucx/dlist.c Sat Jan 14 13:07:18 2012 +0100 1.2 +++ b/ucx/dlist.c Sun Jan 15 14:12:34 2012 +0100 1.3 @@ -45,6 +45,7 @@ 1.4 nl->data = data; 1.5 nl->next = NULL; 1.6 if (l == NULL) { 1.7 + nl->prev = NULL; 1.8 return nl; 1.9 } else { 1.10 UcxDlist *t = ucx_dlist_last(l); 1.11 @@ -113,9 +114,11 @@ 1.12 1.13 void ucx_dlist_foreach(UcxDlist *l, ucx_callback fnc, void* data) { 1.14 UcxDlist *e = l; 1.15 + UcxDlist *n; 1.16 while (e != NULL) { 1.17 + n = e->next; 1.18 fnc(e, data); 1.19 - e = e->next; 1.20 + e = n; 1.21 } 1.22 } 1.23 1.24 @@ -129,3 +132,15 @@ 1.25 } 1.26 return e; 1.27 } 1.28 + 1.29 +UcxDlist *ucx_dlist_remove(UcxDlist *l, UcxDlist *e) { 1.30 + if (e->prev == NULL) { 1.31 + e->next->prev = NULL; 1.32 + l = e->next; 1.33 + } else { 1.34 + e->prev->next = e->next; 1.35 + e->next->prev = e->prev; 1.36 + } 1.37 + free(e); 1.38 + return l; 1.39 +}