+typedef struct string_list_t {
+ struct string_list_t *next;
+ char *data;
+} string_list_t;
+
+DO_INIT(string_list_t, string_item);
+static inline void string_item_wipe(string_list_t *it) {
+ p_delete(&it->data);
+}
+DO_NEW(string_list_t, string_item);
+DO_DELETE(string_list_t, string_item);
+DO_SLIST(string_list_t, string, string_item_delete);
+
+string_list_t *string_list_dup(const string_list_t *);
+
+/* add an element to a list */
+string_list_t *mutt_add_list_n(string_list_t*, const void*, size_t len);
+static inline string_list_t *mutt_add_list(string_list_t *head, const char *data) {
+ size_t len = m_strlen(data);
+ return mutt_add_list_n(head, data, len ? len + 1 : 0);
+}