- string_list_t *last = NULL;
- string_list_t *tmp = UserHeader;
- string_list_t *ptr;
- ssize_t l;
-
- do {
- mutt_extract_token (buf, s, 0);
- if (m_strcmp("*", buf->data) == 0)
- string_list_wipe(&UserHeader);
- else {
- tmp = UserHeader;
- last = NULL;
-
- l = m_strlen(buf->data);
- if (buf->data[l - 1] == ':')
- l--;
-
- while (tmp) {
- if (ascii_strncasecmp (buf->data, tmp->data, l) == 0
- && tmp->data[l] == ':') {
- ptr = tmp;
- if (last)
- last->next = tmp->next;
- else
- UserHeader = tmp->next;
- tmp = tmp->next;
- ptr->next = NULL;
- string_list_wipe(&ptr);
+ do {
+ mutt_extract_token (buf, s, 0);
+
+ if (!m_strcmp("*", buf->data)) {
+ string_list_wipe(&UserHeader);
+ } else {
+ string_list_t **last = &UserHeader;
+ ssize_t l = m_strlen(buf->data);
+
+ if (buf->data[l - 1] == ':')
+ l--;
+
+ while (*last) {
+ if (!ascii_strncasecmp(buf->data, (*last)->data, l)
+ && (*last)->data[l] == ':')
+ {
+ string_list_t *tmp = string_list_pop(last);
+ string_item_delete(&tmp);
+ } else {
+ last = &(*last)->next;
+ }
+ }