move mutt_get_parameter -> parameter_getval into mime.c
[apps/madmutt.git] / muttlib.c
index 00d0e90..5ad138c 100644 (file)
--- a/muttlib.c
+++ b/muttlib.c
 # include "config.h"
 #endif
 
-#include <string.h>
 #include <ctype.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/wait.h>
 #include <errno.h>
-#include <sys/stat.h>
 #include <fcntl.h>
-#include <time.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
 #include <sys/types.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
 #include <utime.h>
 
 #include <lib-lib/mem.h>
@@ -30,7 +32,6 @@
 #include <lib-lib/macros.h>
 #include <lib-lib/buffer.h>
 #include <lib-lib/file.h>
-#include <lib-lib/debug.h>
 #include <lib-lib/url.h>
 
 #include <lib-mime/mime.h>
@@ -38,6 +39,7 @@
 #include <lib-ui/curses.h>
 #include <lib-ui/enter.h>
 
+#include "alias.h"
 #include "mutt.h"
 #include "mx.h"
 #include "attach.h"
@@ -67,12 +69,12 @@ BODY *mutt_new_body (void)
  * Renamed to mutt_adv_mktemp so I only have to change where it's
  * called, and not all possible cases.
  */
-void mutt_adv_mktemp (const char* dir, char *s, size_t l)
+void mutt_adv_mktemp (const char* dir, char *s, ssize_t l)
 {
   char buf[_POSIX_PATH_MAX];
   char tmp[_POSIX_PATH_MAX];
   char *period;
-  size_t sl;
+  ssize_t sl;
   struct stat sb;
 
   m_strcpy(buf, sizeof(buf), m_strisempty(dir) ? NONULL(Tempdir) : dir);
@@ -166,23 +168,14 @@ 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) {
-      debug_print (1, ("unlinking %s.\n", b->filename));
-      unlink (b->filename);
+        unlink (b->filename);
     }
-    else if (b->filename)
-      debug_print (1, ("not unlinking %s.\n", b->filename));
 
     p_delete(&b->filename);
     p_delete(&b->content);
@@ -192,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)
@@ -230,7 +230,7 @@ int mutt_matches_ignore (const char *s, string_list_t * t)
 void mutt_expand_link (char *newpath, const char *path, const char *lnk)
 {
   const char *lb = NULL;
-  size_t len;
+  ssize_t len;
 
   /* lnk is full path */
   if (*lnk == '/') {
@@ -249,12 +249,12 @@ void mutt_expand_link (char *newpath, const char *path, const char *lnk)
   m_strcpy(newpath + len, _POSIX_PATH_MAX - len, lnk);
 }
 
-char *mutt_expand_path (char *s, size_t slen)
+char *mutt_expand_path (char *s, ssize_t slen)
 {
   return _mutt_expand_path (s, slen, 0);
 }
 
-char *_mutt_expand_path (char *s, size_t slen, int rx)
+char *_mutt_expand_path (char *s, ssize_t slen, int rx)
 {
   char p[_POSIX_PATH_MAX] = "";
   char q[_POSIX_PATH_MAX] = "";
@@ -320,9 +320,10 @@ char *_mutt_expand_path (char *s, size_t slen, int rx)
     case '@':
       {
         HEADER *h;
+        /* FIXME: BUG ? */
         address_t *alias;
 
-        if ((alias = alias_lookup(Aliases, s + 1))) {
+        if ((alias = alias_lookup(s + 1))) {
           h = header_new();
           h->env = envelope_new();
           h->env->from = h->env->to = alias;
@@ -400,51 +401,40 @@ char *_mutt_expand_path (char *s, size_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 */
@@ -548,7 +538,6 @@ void _mutt_mktemp (char *s, const char *src, int line)
   snprintf (s, _POSIX_PATH_MAX, "%s/madmutt-%s-%d-%d-%d-%x%x", NONULL (Tempdir),
             NONULL (Hostname), (int) getuid (), (int) getpid (), Counter++, 
             (unsigned int) rand(), (unsigned int) rand());
-  debug_print (1, ("%s:%d: mutt_mktemp returns \"%s\".\n", src, line, s));
   unlink (s);
 }
 
@@ -556,7 +545,7 @@ void _mutt_mktemp (char *s, const char *src, int line)
 void mutt_pretty_mailbox (char *s)
 {
   char *p = s, *q = s;
-  size_t len;
+  ssize_t len;
   url_scheme_t scheme;
 
   scheme = url_check_scheme (s);
@@ -603,7 +592,7 @@ void mutt_pretty_mailbox (char *s)
   }
 }
 
-void mutt_pretty_size (char *s, size_t len, long n)
+void mutt_pretty_size (char *s, ssize_t len, long n)
 {
   if (n == 0)
     m_strcpy(s, len, "0K");
@@ -622,7 +611,7 @@ void mutt_pretty_size (char *s, size_t len, long n)
   }
 }
 
-void mutt_expand_file_fmt (char *dest, size_t destlen, const char *fmt,
+void mutt_expand_file_fmt (char *dest, ssize_t destlen, const char *fmt,
                            const char *src)
 {
   char tmp[LONG_STRING];
@@ -631,12 +620,12 @@ void mutt_expand_file_fmt (char *dest, size_t destlen, const char *fmt,
   mutt_expand_fmt (dest, destlen, fmt, tmp);
 }
 
-void mutt_expand_fmt (char *dest, size_t destlen, const char *fmt,
+void mutt_expand_fmt (char *dest, ssize_t destlen, const char *fmt,
                       const char *src)
 {
   const char *p;
   char *d;
-  size_t slen;
+  ssize_t slen;
   int found = 0;
 
   slen = m_strlen(src);
@@ -679,7 +668,7 @@ void mutt_expand_fmt (char *dest, size_t destlen, const char *fmt,
 
 /* return 0 on success, -1 on abort, 1 on error */
 int mutt_check_overwrite (const char *attname, const char *path,
-                          char *fname, size_t flen, int *append,
+                          char *fname, ssize_t flen, int *append,
                           char **directory)
 {
   int rc = 0;
@@ -747,7 +736,7 @@ int mutt_check_overwrite (const char *attname, const char *path,
   return 0;
 }
 
-void mutt_save_path (char *d, size_t dsize, address_t * a)
+void mutt_save_path (char *d, ssize_t dsize, address_t * a)
 {
   if (a && a->mailbox) {
     m_strcpy(d, dsize, a->mailbox);
@@ -763,7 +752,7 @@ void mutt_save_path (char *d, size_t dsize, address_t * a)
     *d = 0;
 }
 
-void mutt_safe_path (char *s, size_t l, address_t * a)
+void mutt_safe_path (char *s, ssize_t l, address_t * a)
 {
   char *p;
 
@@ -1204,11 +1193,8 @@ int mutt_match_spam_list (const char *s, SPAM_LIST * l, char *text, int x)
     }
 
     /* Does this pattern match? */
-    if (regexec
-        (l->rx->rx, s, (size_t) l->nmatch, (regmatch_t *) pmatch,
-         (int) 0) == 0) {
-      debug_print (5, ("%s matches %s\n%d subst", s, l->rx->pattern, l->rx->rx->re_nsub));
-
+    if (regexec(l->rx->rx, s, l->nmatch, (regmatch_t *)pmatch, (int) 0) == 0)
+    {
       /* Copy template into text, with substitutions. */
       for (p = l->template; *p;) {
         if (*p == '%') {
@@ -1223,7 +1209,6 @@ int mutt_match_spam_list (const char *s, SPAM_LIST * l, char *text, int x)
         }
       }
       text[tlen] = '\0';
-      debug_print (5, ("\"%s\"\n", text));
       return 1;
     }
   }