{ last = p; p = p->next; }
(*l) = p->next; safe_free ((void **) &p); } else { last = p; p = p->next;
static void remove_from_list (LIST **l, BUFFER *inp){  LIST *p, *last = NULL;  BUFFER buf;  memset (&buf, 0, sizeof (buf));  do  {    mutt_extract_token (&buf, inp, 0);    if (mutt_strcmp ("*", buf.data) == 0)      mutt_free_list (l);    /* ``unCMD *'' means delete all current entries */    else    {      p = *l;      last = NULL;      while (p)      {	if (mutt_strcasecmp (buf.data, p->data) == 0)	{	  safe_free ((void **) &p->data);	  if (last)	    last->next = p->next;	  else	    (*l) = p->next;	  safe_free ((void **) &p);	}	else	{	  last = p;	  p = p->next;	}      }    }  }  while (MoreArgs (inp));  FREE (&buf.data);}