選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4. #include "list.h"
  5. struct ListHead* list_create()
  6. {
  7. return calloc(1, sizeof(struct ListHead));
  8. }
  9. int list_add(struct ListHead* head, void* data, size_t size)
  10. {
  11. assert(head);
  12. struct ListElem* p = malloc(sizeof(struct ListElem) + size);
  13. if(!p)
  14. return -1;
  15. p->next = NULL;
  16. p->dataSize = size;
  17. memcpy((char*)p + sizeof(struct ListElem), data, size);
  18. p->dataStart = (char*)p + sizeof(struct ListElem);
  19. // First elem to ever be added?
  20. if(!head->end)
  21. {
  22. head->end = head->start = p;
  23. }
  24. else
  25. {
  26. head->end->next = p;
  27. head->end = p;
  28. }
  29. return 0;
  30. }
  31. // todo:
  32. int list_free(struct ListHead* head)
  33. {
  34. struct ListElem* p = head->start;
  35. while(p)
  36. {
  37. struct ListElem* pOld = p;
  38. p = p->next;
  39. free(pOld);
  40. }
  41. free(head);
  42. return 0;
  43. }