Sun, 08 Jan 2012 15:46:47 +0100
Added webdav code
#include "dlist.h" void ucx_dlist_free(UcxDlist *l) { UcxDlist *e = l, *f; while (e != NULL) { f = e; e = e->next; free(f); } } UcxDlist *ucx_dlist_append(UcxDlist *l, void *data) { UcxDlist *nl = (UcxDlist*) malloc(sizeof(UcxDlist)); if (nl == NULL) return NULL; nl->data = data; nl->next = NULL; if (l == NULL) { return nl; } else { UcxDlist *t = ucx_dlist_last(l); t->next = nl; nl->prev = t; return l; } } UcxDlist *ucx_dlist_prepend(UcxDlist *l, void *data) { UcxDlist *nl = ucx_dlist_append(NULL, data); if (nl == NULL) return NULL; if (l != NULL) { nl->next = l; l->prev = nl; } return nl; } UcxDlist *ucx_dlist_concat(UcxDlist *l1, UcxDlist *l2) { if (l1 == NULL) { return l2; } else { UcxDlist *last = ucx_dlist_last(l1); last->next = l2; l2->prev = last; return l1; } } UcxDlist *ucx_dlist_last(UcxDlist *l) { if (l == NULL) return NULL; UcxDlist *e = l; while (e->next != NULL) { e = e->next; } return e; } UcxDlist *ucx_dlist_get(UcxDlist *l, int index) { if (l == NULL) return NULL; UcxDlist *e = l; while (e->next != NULL && index > 0) { e = e->next; index--; } return index == 0 ? e : NULL; } size_t ucx_dlist_size(UcxDlist *l) { if (l == NULL) return 0; UcxDlist *e = l; size_t s = 1; while (e->next != NULL) { e = e->next; s++; } return s; } void ucx_dlist_foreach(UcxDlist *l, ucx_callback fnc, void* data) { UcxDlist *e = l; while (e != NULL) { fnc(e, data); e = e->next; } } /* dlist specific functions */ UcxDlist *ucx_dlist_first(UcxDlist *l) { if (l == NULL) return NULL; UcxDlist *e = l; while (e->prev != NULL) { e = e->prev; } return e; }