static void delete_hook (HOOK *h) { FREE (&h->command); FREE (&h->rx.pattern); if (h->rx.rx) { regfree (h->rx.rx); } mutt_pattern_free (&h->pattern); FREE (&h); }
int mutt_parse_unscore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err) { SCORE *tmp, *last = NULL; while (MoreArgs (s)) { mutt_extract_token (buf, s, 0); if (!mutt_strcmp ("*", buf->data)) { for (tmp = Score; tmp; ) { last = tmp; tmp = tmp->next; mutt_pattern_free (&last->pat); safe_free ((void **) &last); } Score = NULL; } else { for (tmp = Score; tmp; last = tmp, tmp = tmp->next) { if (!mutt_strcmp (buf->data, tmp->str)) { if (last) last->next = tmp->next; else Score = tmp->next; mutt_pattern_free (&tmp->pat); safe_free ((void **) &tmp); /* there should only be one score per pattern, so we can stop here */ break; } } } } set_option (OPTNEEDRESCORE); return 0; }
static void mutt_free_color_line(COLOR_LINE **l, int free_colors) { COLOR_LINE *tmp; if(!l || !*l) return; tmp = *l; #ifdef HAVE_COLOR if(free_colors && tmp->fg != -1 && tmp->bg != -1) mutt_free_color(tmp->fg, tmp->bg); #endif /* we should really introduce a container * type for regular expressions. */ regfree(&tmp->rx); mutt_pattern_free(&tmp->color_pattern); FREE (&tmp->pattern); FREE (l); /* __FREE_CHECKED__ */ }