/* * Copyright notice from original mutt: * Copyright (C) 1996-2000 Michael R. Elkins * * This file is part of mutt-ng, see http://www.muttng.org/. * It's licensed under the GNU General Public License, * please see the file GPL in the top level source directory. */ #if HAVE_CONFIG_H #include "config.h" #endif #include #include #include "list.h" #include "lib/mem.h" #include "lib/str.h" LIST *mutt_copy_list (LIST * p) { LIST *t, *r = NULL, *l = NULL; for (; p; p = p->next) { t = (LIST *) mem_malloc (sizeof (LIST)); t->data = str_dup (p->data); t->next = NULL; if (l) { r->next = t; r = r->next; } else l = r = t; } return (l); } LIST *mutt_add_list (LIST * head, const char *data) { size_t len = str_len (data); return (mutt_add_list_n (head, data, len ? len + 1 : 0)); } LIST *mutt_add_list_n (LIST *head, const void *data, size_t len) { LIST *tmp; for (tmp = head; tmp && tmp->next; tmp = tmp->next); if (tmp) { tmp->next = mem_malloc (sizeof (LIST)); tmp = tmp->next; } else head = tmp = mem_malloc (sizeof (LIST)); tmp->data = mem_malloc (len); if (len) memcpy (tmp->data, data, len); tmp->next = NULL; return head; } void mutt_free_list (LIST ** list) { LIST *p; if (!list) return; while (*list) { p = *list; *list = (*list)->next; mem_free (&p->data); mem_free (&p); } }