list.c 841 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include "includes.h"
  2. #include "dbutil.h"
  3. #include "list.h"
  4. void list_append(m_list *list, void *item) {
  5. m_list_elem *elem;
  6. elem = m_malloc(sizeof(*elem));
  7. elem->item = item;
  8. elem->list = list;
  9. elem->next = NULL;
  10. if (!list->first) {
  11. list->first = elem;
  12. elem->prev = NULL;
  13. } else {
  14. elem->prev = list->last;
  15. list->last->next = elem;
  16. }
  17. list->last = elem;
  18. }
  19. m_list * list_new() {
  20. m_list *ret = m_malloc(sizeof(m_list));
  21. ret->first = ret->last = NULL;
  22. return ret;
  23. }
  24. void * list_remove(m_list_elem *elem) {
  25. void *item = elem->item;
  26. m_list *list = elem->list;
  27. if (list->first == elem)
  28. {
  29. list->first = elem->next;
  30. }
  31. if (list->last == elem)
  32. {
  33. list->last = elem->prev;
  34. }
  35. if (elem->prev)
  36. {
  37. elem->prev->next = elem->next;
  38. }
  39. if (elem->next)
  40. {
  41. elem->next->prev = elem->prev;
  42. }
  43. m_free(elem);
  44. return item;
  45. }