fix the user-agent
[apps/madmutt.git] / muttlib.c
index 442a8fc..0f6114e 100644 (file)
--- a/muttlib.c
+++ b/muttlib.c
 
 #include "version.h"
 
-#ifdef USE_IMAP
-#include "imap.h"
-#include "imap/mx_imap.h"
-#endif
+#include <imap/imap.h>
+#include <imap/mx_imap.h>
 
-#include "mutt_crypt.h"
+#include <lib-crypt/crypt.h>
 
 #include "lib/debug.h"
 
@@ -157,7 +155,7 @@ int mutt_copy_body (FILE * fp, BODY ** tgt, BODY * src)
   /* copy parameters */
   for (par = b->parameter, ppar = &b->parameter; par;
        ppar = &(*ppar)->next, par = par->next) {
-    *ppar = mutt_new_parameter ();
+    *ppar = parameter_new();
     (*ppar)->attribute = m_strdup(par->attribute);
     (*ppar)->value = m_strdup(par->value);
   }
@@ -178,7 +176,7 @@ void mutt_free_body (BODY ** p)
     a = a->next;
 
     if (b->parameter)
-      mutt_free_parameter (&b->parameter);
+      parameter_delete(&b->parameter);
     if (b->unlink && b->filename) {
       debug_print (1, ("unlinking %s.\n", b->filename));
       unlink (b->filename);
@@ -196,7 +194,7 @@ void mutt_free_body (BODY ** p)
     if (b->hdr) {
       /* Don't free twice (b->hdr->content = b->parts) */
       b->hdr->content = NULL;
-      mutt_free_header (&b->hdr);
+      header_delete(&b->hdr);
     }
 
     if (b->parts)
@@ -208,48 +206,15 @@ void mutt_free_body (BODY ** p)
   *p = 0;
 }
 
-void mutt_free_parameter (PARAMETER ** p)
-{
-  PARAMETER *t = *p;
-  PARAMETER *o;
-
-  while (t) {
-    p_delete(&t->attribute);
-    p_delete(&t->value);
-    o = t;
-    t = t->next;
-    p_delete(&o);
-  }
-  *p = 0;
-}
-
 HEADER *mutt_dup_header (HEADER * h)
 {
   HEADER *hnew;
 
-  hnew = mutt_new_header ();
+  hnew = header_new();
   memcpy (hnew, h, sizeof (HEADER));
   return hnew;
 }
 
-void mutt_free_header (HEADER ** h)
-{
-  if (!h || !*h)
-    return;
-  mutt_free_envelope (&(*h)->env);
-  mutt_free_body (&(*h)->content);
-  p_delete(&(*h)->maildir_flags);
-  p_delete(&(*h)->tree);
-  p_delete(&(*h)->path);
-#ifdef MIXMASTER
-  mutt_free_list (&(*h)->chain);
-#endif
-#if defined USE_POP || defined USE_IMAP || defined USE_NNTP
-  p_delete(&(*h)->data);
-#endif
-  p_delete(h);
-}
-
 /* returns true if the header contained in "s" is in list "t" */
 int mutt_matches_ignore (const char *s, LIST * t)
 {
@@ -339,13 +304,11 @@ char *_mutt_expand_path (char *s, size_t slen, int rx)
     case '=':
     case '+':
       {
-#ifdef USE_IMAP
         /* if folder = imap[s]://host/: don't append slash */
         if (imap_is_magic (NONULL (Maildir), NULL) == M_IMAP && 
             Maildir[m_strlen(Maildir) - 1] == '/')
           m_strcpy(p, sizeof(p), NONULL(Maildir));
         else
-#endif
           snprintf (p, sizeof (p), "%s/", NONULL (Maildir));
 
         tail = s + 1;
@@ -360,12 +323,12 @@ char *_mutt_expand_path (char *s, size_t slen, int rx)
         address_t *alias;
 
         if ((alias = mutt_lookup_alias (s + 1))) {
-          h = mutt_new_header ();
-          h->env = mutt_new_envelope ();
+          h = header_new();
+          h->env = envelope_new();
           h->env->from = h->env->to = alias;
           mutt_default_save (p, sizeof (p), h);
           h->env->from = h->env->to = NULL;
-          mutt_free_header (&h);
+          header_delete(&h);
           /* Avoid infinite recursion if the resulting folder starts with '@' */
           if (*p != '@')
             recurse = 1;
@@ -445,10 +408,10 @@ char *_mutt_expand_path (char *s, size_t slen, int rx)
  * name.
  */
 
-char *mutt_gecos_name (char *dest, size_t destlen, struct passwd *pw)
+char *mutt_gecos_name (char *dest, ssize_t destlen, struct passwd *pw)
 {
   regmatch_t pat_match[1];
-  size_t pwnl;
+  ssize_t pwnl;
   int idx;
   char *p;
 
@@ -503,12 +466,12 @@ void mutt_set_parameter (const char *attribute, const char *value,
 
   for (q = *p; q; q = q->next) {
     if (ascii_strcasecmp (attribute, q->attribute) == 0) {
-      str_replace (&q->value, value);
+      m_strreplace(&q->value, value);
       return;
     }
   }
 
-  q = mutt_new_parameter ();
+  q = parameter_new();
   q->attribute = m_strdup(attribute);
   q->value = m_strdup(value);
   q->next = *p;
@@ -523,7 +486,7 @@ void mutt_delete_parameter (const char *attribute, PARAMETER ** p)
     if (ascii_strcasecmp (attribute, q->attribute) == 0) {
       *p = q->next;
       q->next = NULL;
-      mutt_free_parameter (&q);
+      parameter_delete(&q);
       return;
     }
   }
@@ -542,9 +505,9 @@ int mutt_needs_mailcap (BODY * m)
     break;
 
   case TYPEAPPLICATION:
-    if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp (m))
+    if (mutt_is_application_pgp (m))
       return 0;
-    if ((WithCrypto & APPLICATION_SMIME) && mutt_is_application_smime (m))
+    if (mutt_is_application_smime (m))
       return 0;
     break;
 
@@ -561,7 +524,7 @@ int mutt_is_text_part (BODY * b)
   int t = b->type;
   char *s = b->subtype;
 
-  if ((WithCrypto & APPLICATION_PGP) && mutt_is_application_pgp (b))
+  if (mutt_is_application_pgp (b))
     return 0;
 
   if (t == TYPETEXT)
@@ -572,7 +535,7 @@ int mutt_is_text_part (BODY * b)
       return 1;
   }
 
-  if ((WithCrypto & APPLICATION_PGP) && t == TYPEAPPLICATION) {
+  if (t == TYPEAPPLICATION) {
     if (!ascii_strcasecmp ("pgp-keys", s))
       return 1;
   }
@@ -580,46 +543,11 @@ int mutt_is_text_part (BODY * b)
   return 0;
 }
 
-void mutt_free_envelope (ENVELOPE ** p)
-{
-  if (!*p)
-    return;
-  rfc822_free_address (&(*p)->return_path);
-  rfc822_free_address (&(*p)->from);
-  rfc822_free_address (&(*p)->to);
-  rfc822_free_address (&(*p)->cc);
-  rfc822_free_address (&(*p)->bcc);
-  rfc822_free_address (&(*p)->sender);
-  rfc822_free_address (&(*p)->reply_to);
-  rfc822_free_address (&(*p)->mail_followup_to);
-
-  p_delete(&(*p)->list_post);
-  p_delete(&(*p)->subject);
-  /* real_subj is just an offset to subject and shouldn't be freed */
-  p_delete(&(*p)->message_id);
-  p_delete(&(*p)->supersedes);
-  p_delete(&(*p)->date);
-  p_delete(&(*p)->x_label);
-  p_delete(&(*p)->organization);
-#ifdef USE_NNTP
-  p_delete(&(*p)->newsgroups);
-  p_delete(&(*p)->xref);
-  p_delete(&(*p)->followup_to);
-  p_delete(&(*p)->x_comment_to);
-#endif
-
-  mutt_buffer_free (&(*p)->spam);
-  mutt_free_list (&(*p)->references);
-  mutt_free_list (&(*p)->in_reply_to);
-  mutt_free_list (&(*p)->userhdrs);
-  p_delete(p);
-}
-
 /* move all the headers from extra not present in base into base */
 void mutt_merge_envelopes(ENVELOPE* base, ENVELOPE** extra)
 {
   /* copies each existing element if necessary, and sets the element
-  * to NULL in the source so that mutt_free_envelope doesn't leave us
+  * to NULL in the source so that envelope_delete doesn't leave us
   * with dangling pointers. */
 #define MOVE_ELEM(h) if (!base->h) { base->h = (*extra)->h; (*extra)->h = NULL; }
   MOVE_ELEM(return_path);
@@ -656,13 +584,13 @@ void mutt_merge_envelopes(ENVELOPE* base, ENVELOPE** extra)
   MOVE_ELEM(userhdrs);
 #undef MOVE_ELEM
   
-  mutt_free_envelope(extra);
+  envelope_delete(extra);
 }
 
 void _mutt_mktemp (char *s, const char *src, int line)
 {
 
-  snprintf (s, _POSIX_PATH_MAX, "%s/muttng-%s-%d-%d-%d-%x%x", NONULL (Tempdir),
+  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));
@@ -677,7 +605,7 @@ void mutt_free_alias (ALIAS ** p)
     t = *p;
     *p = (*p)->next;
     p_delete(&t->name);
-    rfc822_free_address (&t->addr);
+    address_delete (&t->addr);
     p_delete(&t);
   }
 }
@@ -691,12 +619,10 @@ void mutt_pretty_mailbox (char *s)
 
   scheme = url_check_scheme (s);
 
-#ifdef USE_IMAP
   if (scheme == U_IMAP || scheme == U_IMAPS) {
     imap_pretty_mailbox (s);
     return;
   }
-#endif
 
   /* if s is an url, only collapse path component */
   if (scheme != U_UNKNOWN) {
@@ -829,7 +755,7 @@ int mutt_check_overwrite (const char *attname, const char *path,
               (_("File is a directory, save under it? [(y)es, (n)o, (a)ll]"),
                _("yna"))) {
       case 3:                  /* all */
-        str_replace (directory, fname);
+        m_strreplace(directory, fname);
         break;
       case 1:                  /* yes */
         p_delete(directory);
@@ -889,7 +815,7 @@ void mutt_save_path (char *d, size_t dsize, address_t * a)
       if ((p = strpbrk (d, "%@")))
         *p = 0;
     }
-    str_tolower (d);
+    m_strtolower(d);
   }
   else
     *d = 0;
@@ -927,7 +853,7 @@ int mutt_skipchars (const char *s, const char *c)
 }
 
 void mutt_FormatString (char *dest,     /* output buffer */
-                        size_t destlen, /* output buffer len */
+                        ssize_t destlen, /* output buffer len */
                         const char *src,        /* template string */
                         format_t * callback,    /* callback for processing */
                         unsigned long data,     /* callback data */
@@ -935,7 +861,7 @@ void mutt_FormatString (char *dest,     /* output buffer */
 {                               /* callback flags */
   char prefix[SHORT_STRING], buf[LONG_STRING], *cp, *wptr = dest, ch;
   char ifstring[SHORT_STRING], elsestring[SHORT_STRING];
-  size_t wlen, count, len, col, wid;
+  ssize_t wlen, wid, count, col, len;
 
   prefix[0] = '\0';
   destlen--;                    /* save room for the terminal \0 */
@@ -962,7 +888,7 @@ void mutt_FormatString (char *dest,     /* output buffer */
         /* eat the format string */
         cp = prefix;
         count = 0;
-        while (count < sizeof (prefix) &&
+        while (count < ssizeof (prefix) &&
                (isdigit ((unsigned char) *src) || *src == '.' || *src == '-'))
         {
           *cp++ = *src++;
@@ -984,7 +910,7 @@ void mutt_FormatString (char *dest,     /* output buffer */
         /* eat the `if' part of the string */
         cp = ifstring;
         count = 0;
-        while (count < sizeof (ifstring) && *src && *src != '?'
+        while (count < ssizeof (ifstring) && *src && *src != '?'
                && *src != '&') {
           *cp++ = *src++;
           count++;
@@ -996,7 +922,7 @@ void mutt_FormatString (char *dest,     /* output buffer */
           src++;                /* skip the & */
         cp = elsestring;
         count = 0;
-        while (count < sizeof (elsestring) && *src && *src != '?') {
+        while (count < ssizeof (elsestring) && *src && *src != '?') {
           *cp++ = *src++;
           count++;
         }
@@ -1070,7 +996,7 @@ void mutt_FormatString (char *dest,     /* output buffer */
                     data, flags);
 
         if (lower)
-          str_tolower (buf);
+          m_strtolower(buf);
         if (nodots) {
           char *p = buf;
 
@@ -1178,13 +1104,11 @@ int mutt_save_confirm (const char *s, struct stat *st)
 
   magic = mx_get_magic (s);
 
-#ifdef USE_POP
   if (magic == M_POP) {
     mutt_error _("Can't save message to POP mailbox.");
 
     return 1;
   }
-#endif
 
 #ifdef USE_NNTP
   if (magic == M_NNTP) {
@@ -1213,9 +1137,7 @@ int mutt_save_confirm (const char *s, struct stat *st)
     }
   }
   else {
-#ifdef USE_IMAP
     if (magic != M_IMAP)
-#endif /* execute the block unconditionally if we don't use imap */
     {
       st->st_mtime = 0;
       st->st_atime = 0;
@@ -1297,10 +1219,10 @@ const char *mutt_make_version (int full)
 
   if (full)
     snprintf (vstring, sizeof (vstring),
-              "Mutt-ng %s-r%s (based on Mutt 1.5.11)",
+              "Madmutt/%s-r%s (based on Mutt 1.5.11)",
               MUTT_VERSION, MUTT_REVISION);
   else
-    snprintf (vstring, sizeof (vstring), "mutt-ng/%s-r%s",
+    snprintf (vstring, sizeof (vstring), "Madmutt/%s-%s",
               MUTT_VERSION, MUTT_REVISION);
   return vstring;
 }