From 48c21ccc1b58b3759b1725f73a8a9b4e70efe794 Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Wed, 15 Nov 2006 17:05:42 +0100 Subject: [PATCH] make mutt_body_free a bit more mad-friendly Signed-off-by: Pierre Habouzit --- muttlib.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/muttlib.c b/muttlib.c index d607b4f..2a5fc3b 100644 --- a/muttlib.c +++ b/muttlib.c @@ -168,19 +168,13 @@ int mutt_copy_body (FILE * fp, BODY ** tgt, BODY * src) } - -void mutt_free_body (BODY ** p) +static void body_wipe(BODY *b) { - BODY *a = *p, *b; - - while (a) { - b = a; - a = a->next; - if (b->parameter) - parameter_list_wipe(&b->parameter); + parameter_list_wipe(&b->parameter); + if (b->unlink && b->filename) { - unlink (b->filename); + unlink (b->filename); } p_delete(&b->filename); @@ -191,18 +185,25 @@ void mutt_free_body (BODY ** p) p_delete(&b->form_name); if (b->hdr) { - /* Don't free twice (b->hdr->content = b->parts) */ - b->hdr->content = NULL; - header_delete(&b->hdr); + /* Don't free twice (b->hdr->content = b->parts) */ + b->hdr->content = NULL; + header_delete(&b->hdr); } if (b->parts) - mutt_free_body (&b->parts); + mutt_free_body(&b->parts); +} - p_delete(&b); - } +DO_DELETE(BODY, body); - *p = 0; +void mutt_free_body(BODY **p) +{ + while (*p) { + BODY *b = *p; + *p = b->next; + + body_delete(&b); + } } HEADER *mutt_dup_header (HEADER * h) -- 2.20.1