move a function into rx.[hc]
[apps/madmutt.git] / muttlib.c
index 6892168..729c050 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 <sys/types.h>
+#include <utime.h>
+
 #include <lib-lib/mem.h>
 #include <lib-lib/ascii.h>
 #include <lib-lib/str.h>
 #include <lib-lib/macros.h>
 #include <lib-lib/buffer.h>
 #include <lib-lib/file.h>
+#include <lib-lib/debug.h>
 
 #include <lib-mime/mime.h>
 
+#include <lib-ui/curses.h>
+#include <lib-ui/enter.h>
+
 #include "mutt.h"
-#include "enter.h"
-#include "mutt_curses.h"
 #include "mx.h"
 #include "url.h"
 #include "attach.h"
 #include <imap/imap.h>
 #include <imap/mx_imap.h>
 
-#include "mutt_crypt.h"
-
-#include "lib/debug.h"
-
-#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 <sys/types.h>
-#include <utime.h>
+#include <lib-crypt/crypt.h>
 
 #define SW              (option(OPTMBOXPANE)?SidebarWidth:0)
 
@@ -155,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);
   }
@@ -176,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);
@@ -194,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)
@@ -206,46 +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
-  p_delete(&(*h)->data);
-  p_delete(h);
-}
-
 /* returns true if the header contained in "s" is in list "t" */
 int mutt_matches_ignore (const char *s, LIST * t)
 {
@@ -354,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;
@@ -418,7 +387,7 @@ char *_mutt_expand_path (char *s, size_t slen, int rx)
     }
 
     if (rx && *p && !recurse) {
-      mutt_rx_sanitize_string (q, sizeof (q), p);
+      rx_sanitize_string (q, sizeof (q), p);
       snprintf (tmp, sizeof (tmp), "%s%s", q, tail);
     }
     else
@@ -439,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;
 
@@ -502,7 +471,7 @@ void mutt_set_parameter (const char *attribute, const char *value,
     }
   }
 
-  q = mutt_new_parameter ();
+  q = parameter_new();
   q->attribute = m_strdup(attribute);
   q->value = m_strdup(value);
   q->next = *p;
@@ -517,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;
     }
   }
@@ -574,46 +543,11 @@ int mutt_is_text_part (BODY * b)
   return 0;
 }
 
-void mutt_free_envelope (ENVELOPE ** p)
-{
-  if (!*p)
-    return;
-  address_delete (&(*p)->return_path);
-  address_delete (&(*p)->from);
-  address_delete (&(*p)->to);
-  address_delete (&(*p)->cc);
-  address_delete (&(*p)->bcc);
-  address_delete (&(*p)->sender);
-  address_delete (&(*p)->reply_to);
-  address_delete (&(*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);
@@ -650,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));
@@ -919,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 */
@@ -927,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 */
@@ -954,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++;
@@ -976,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++;
@@ -988,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++;
         }
@@ -1285,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;
 }
@@ -1302,7 +1236,7 @@ void mutt_free_spam_list (SPAM_LIST ** list)
   while (*list) {
     p = *list;
     *list = (*list)->next;
-    rx_free (&p->rx);
+    rx_delete(&p->rx);
     p_delete(&p->template);
     p_delete(&p);
   }