move mutt_get_parameter -> parameter_getval into mime.c
[apps/madmutt.git] / muttlib.c
index 7e89aff..5ad138c 100644 (file)
--- 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);
+
+void mutt_free_body(BODY **p)
+{
+    while (*p) {
+        BODY *b = *p;
+        *p = b->next;
 
-  *p = 0;
+        body_delete(&b);
+    }
 }
 
 HEADER *mutt_dup_header (HEADER * h)
@@ -400,51 +401,40 @@ char *_mutt_expand_path (char *s, ssize_t slen, int rx)
   return (s);
 }
 
-char *mutt_get_parameter (const char *s, PARAMETER * p)
-{
-  for (; p; p = p->next)
-    if (ascii_strcasecmp (s, p->attribute) == 0)
-      return (p->value);
-
-  return NULL;
-}
-
 void mutt_set_parameter (const char *attribute, const char *value,
                          PARAMETER ** p)
 {
-  PARAMETER *q;
+    PARAMETER *q;
 
-  if (!value) {
-    mutt_delete_parameter (attribute, p);
-    return;
-  }
+    if (!value) {
+        mutt_delete_parameter (attribute, p);
+        return;
+    }
 
-  for (q = *p; q; q = q->next) {
-    if (ascii_strcasecmp (attribute, q->attribute) == 0) {
-      m_strreplace(&q->value, value);
-      return;
+    for (q = *p; q; q = q->next) {
+        if (ascii_strcasecmp (attribute, q->attribute) == 0) {
+            m_strreplace(&q->value, value);
+            return;
+        }
     }
-  }
 
-  q = parameter_new();
-  q->attribute = m_strdup(attribute);
-  q->value = m_strdup(value);
-  q->next = *p;
-  *p = q;
+    q = parameter_new();
+    q->attribute = m_strdup(attribute);
+    q->value = m_strdup(value);
+    parameter_list_push(p, q);
 }
 
 void mutt_delete_parameter (const char *attribute, PARAMETER ** p)
 {
-  PARAMETER *q;
+    while (*p) {
+        if (!ascii_strcasecmp(attribute, (*p)->attribute)) {
+            PARAMETER *q = parameter_list_pop(p);
+            parameter_delete(&q);
+            return;
+        }
 
-  for (q = *p; q; p = &q->next, q = q->next) {
-    if (ascii_strcasecmp (attribute, q->attribute) == 0) {
-      *p = q->next;
-      q->next = NULL;
-      parameter_list_wipe(&q);
-      return;
+        p = &(*p)->next;
     }
-  }
 }
 
 /* returns 1 if Mutt can't display this type of data, 0 otherwise */