void DLISTdestroy(Dlist list) { void *data; while (DLISTsize(list) > 0) { if (DLISTremove(list, DLISTtail(list), (void **)&data) == 0 && list->destroy != NULL) { list->destroy(data); } } free(list); }