Rocco Rutte:
[apps/madmutt.git] / muttlib.c
index 3e96ae9..234efd2 100644 (file)
--- a/muttlib.c
+++ b/muttlib.c
@@ -1,20 +1,11 @@
 /*
+ * Copyright notice from original mutt:
  * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
  * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
- * 
- *     This program is free software; you can redistribute it and/or modify
- *     it under the terms of the GNU General Public License as published by
- *     the Free Software Foundation; either version 2 of the License, or
- *     (at your option) any later version.
- * 
- *     This program is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- * 
- *     You should have received a copy of the GNU General Public License
- *     along with this program; if not, write to the Free Software
- *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *
+ * This file is part of mutt-ng, see http://www.muttng.org/.
+ * It's licensed under the GNU General Public License,
+ * please see the file GPL in the top level source directory.
  */
 
 #if HAVE_CONFIG_H
@@ -24,7 +15,6 @@
 #include "mutt.h"
 #include "mutt_curses.h"
 #include "mime.h"
-#include "mailbox.h"
 #include "mx.h"
 #include "url.h"
 
 
 #ifdef USE_IMAP
 #include "imap.h"
+#include "imap/mx_imap.h"
 #endif
 
 #include "mutt_crypt.h"
 
+#include "lib/mem.h"
+#include "lib/intl.h"
+#include "lib/str.h"
+#include "lib/debug.h"
+
 #include <string.h>
 #include <ctype.h>
 #include <unistd.h>
@@ -175,13 +171,11 @@ void mutt_free_body (BODY ** p)
     if (b->parameter)
       mutt_free_parameter (&b->parameter);
     if (b->unlink && b->filename) {
-      dprint (1, (debugfile, "mutt_free_body: Unlinking %s.\n", b->filename));
+      debug_print (1, ("unlinking %s.\n", b->filename));
       unlink (b->filename);
     }
     else if (b->filename)
-      dprint (1,
-              (debugfile, "mutt_free_body: Not unlinking %s.\n",
-               b->filename));
+      debug_print (1, ("not unlinking %s.\n", b->filename));
 
     FREE (&b->filename);
     FREE (&b->content);
@@ -368,10 +362,9 @@ char *_mutt_expand_path (char *s, size_t slen, int rx)
     case '+':
       {
 #ifdef USE_IMAP
-        /* if folder = {host} or imap[s]://host/: don't append slash */
-        if (mx_is_imap (NONULL (Maildir)) &&
-            (Maildir[strlen (Maildir) - 1] == '}' ||
-             Maildir[strlen (Maildir) - 1] == '/'))
+        /* if folder = imap[s]://host/: don't append slash */
+        if (imap_is_magic (NONULL (Maildir), NULL) == M_IMAP && 
+            Maildir[mutt_strlen (Maildir) - 1] == '/')
           strfcpy (p, NONULL (Maildir), sizeof (p));
         else
 #endif
@@ -463,13 +456,6 @@ char *_mutt_expand_path (char *s, size_t slen, int rx)
   }
   while (recurse);
 
-#ifdef USE_IMAP
-  /* Rewrite IMAP path in canonical form - aids in string comparisons of
-   * folders. May possibly fail, in which case s should be the same. */
-  if (mx_is_imap (s))
-    imap_expand_path (s, slen);
-#endif
-
   return (s);
 }
 
@@ -503,7 +489,7 @@ char *mutt_gecos_name (char *dest, size_t destlen, struct passwd *pw)
   else
     strfcpy (dest, pw->pw_gecos, destlen);
 
-  pwnl = strlen (pw->pw_name);
+  pwnl = mutt_strlen (pw->pw_name);
 
   for (idx = 0; dest[idx]; idx++) {
     if (dest[idx] == '&') {
@@ -539,7 +525,7 @@ void mutt_set_parameter (const char *attribute, const char *value,
 
   for (q = *p; q; q = q->next) {
     if (ascii_strcasecmp (attribute, q->attribute) == 0) {
-      mutt_str_replace (&q->value, value);
+      str_replace (&q->value, value);
       return;
     }
   }
@@ -653,10 +639,11 @@ void mutt_free_envelope (ENVELOPE ** p)
 
 void _mutt_mktemp (char *s, const char *src, int line)
 {
-  snprintf (s, _POSIX_PATH_MAX, "%s/mutt-%s-%d-%d-%d", NONULL (Tempdir),
-            NONULL (Hostname), (int) getuid (), (int) getpid (), Counter++);
-  dprint (1,
-          (debugfile, "%s:%d: mutt_mktemp returns \"%s\".\n", src, line, s));
+
+  snprintf (s, _POSIX_PATH_MAX, "%s/muttng-%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);
 }
 
@@ -714,12 +701,12 @@ void mutt_pretty_mailbox (char *s)
   }
   *q = 0;
 
-  if (mutt_strncmp (s, Maildir, (len = mutt_strlen (Maildir))) == 0 &&
+  if (safe_strncmp (s, Maildir, (len = mutt_strlen (Maildir))) == 0 &&
       s[len] == '/') {
     *s++ = '=';
     memmove (s, s + len, mutt_strlen (s + len) + 1);
   }
-  else if (mutt_strncmp (s, Homedir, (len = mutt_strlen (Homedir))) == 0 &&
+  else if (safe_strncmp (s, Homedir, (len = mutt_strlen (Homedir))) == 0 &&
            s[len] == '/') {
     *s++ = '~';
     memmove (s, s + len - 1, mutt_strlen (s + len - 1) + 1);
@@ -820,7 +807,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 */
-        mutt_str_replace (directory, fname);
+        str_replace (directory, fname);
         break;
       case 1:                  /* yes */
         FREE (directory);
@@ -880,7 +867,7 @@ void mutt_save_path (char *d, size_t dsize, ADDRESS * a)
       if ((p = strpbrk (d, "%@")))
         *p = 0;
     }
-    mutt_strlower (d);
+    str_tolower (d);
   }
   else
     *d = 0;
@@ -1063,7 +1050,7 @@ void mutt_FormatString (char *dest,     /* output buffer */
                     data, flags);
 
         if (tolower)
-          mutt_strlower (buf);
+          str_tolower (buf);
         if (nodots) {
           char *p = buf;
 
@@ -1244,7 +1231,7 @@ void state_prefix_putc (char c, STATE * s)
   if (s->flags & M_PENDINGPREFIX) {
     int i;
 
-    i = strlen (Quotebuf);
+    i = mutt_strlen (Quotebuf);
     Quotebuf[i++] = c;
     Quotebuf[i] = '\0';
     if (i == sizeof (Quotebuf) - 1 || c == '\n') {
@@ -1345,7 +1332,7 @@ BUFFER *mutt_buffer_init (BUFFER * b)
       return NULL;
   }
   else {
-    safe_free (b->data);
+    FREE(&b->data);
   }
   memset (b, 0, sizeof (BUFFER));
   return b;
@@ -1437,45 +1424,11 @@ const char *mutt_make_version (void)
 {
   static char vstring[STRING];
 
-  snprintf (vstring, sizeof (vstring), "Mutt-ng %s (%s)",
+  snprintf (vstring, sizeof (vstring), "Mutt-ng %s (%s) based on Mutt 1.5.9",
             MUTT_VERSION, ReleaseDate);
   return vstring;
 }
 
-REGEXP *mutt_compile_regexp (const char *s, int flags)
-{
-  REGEXP *pp = safe_calloc (sizeof (REGEXP), 1);
-
-  pp->pattern = safe_strdup (s);
-  pp->rx = safe_calloc (sizeof (regex_t), 1);
-  if (REGCOMP (pp->rx, NONULL (s), flags) != 0)
-    mutt_free_regexp (&pp);
-
-  return pp;
-}
-
-void mutt_free_regexp (REGEXP ** pp)
-{
-  FREE (&(*pp)->pattern);
-  regfree ((*pp)->rx);
-  FREE (&(*pp)->rx);
-  FREE (pp);
-}
-
-void mutt_free_rx_list (RX_LIST ** list)
-{
-  RX_LIST *p;
-
-  if (!list)
-    return;
-  while (*list) {
-    p = *list;
-    *list = (*list)->next;
-    mutt_free_regexp (&p->rx);
-    FREE (&p);
-  }
-}
-
 void mutt_free_spam_list (SPAM_LIST ** list)
 {
   SPAM_LIST *p;
@@ -1485,29 +1438,12 @@ void mutt_free_spam_list (SPAM_LIST ** list)
   while (*list) {
     p = *list;
     *list = (*list)->next;
-    mutt_free_regexp (&p->rx);
-    safe_free (&p->template);
-    FREE (&p);
+    rx_free (&p->rx);
+    FREE(&p->template);
+    FREE(&p);
   }
 }
 
-int mutt_match_rx_list (const char *s, RX_LIST * l)
-{
-  if (!s)
-    return 0;
-
-  for (; l; l = l->next) {
-    if (regexec (l->rx->rx, s, (size_t) 0, (regmatch_t *) 0, (int) 0) == 0) {
-      dprint (5,
-              (debugfile, "mutt_match_rx_list: %s matches %s\n", s,
-               l->rx->pattern));
-      return 1;
-    }
-  }
-
-  return 0;
-}
-
 int mutt_match_spam_list (const char *s, SPAM_LIST * l, char *text, int x)
 {
   static regmatch_t *pmatch = NULL;
@@ -1531,12 +1467,7 @@ int mutt_match_spam_list (const char *s, SPAM_LIST * l, char *text, int x)
     if (regexec
         (l->rx->rx, s, (size_t) l->nmatch, (regmatch_t *) pmatch,
          (int) 0) == 0) {
-      dprint (5,
-              (debugfile, "mutt_match_spam_list: %s matches %s\n", s,
-               l->rx->pattern));
-      dprint (5,
-              (debugfile, "mutt_match_spam_list: %d subs\n",
-               l->rx->rx->re_nsub));
+      debug_print (5, ("%s matches %s\n%d subst", s, l->rx->pattern, l->rx->rx->re_nsub));
 
       /* Copy template into text, with substitutions. */
       for (p = l->template; *p;) {
@@ -1552,7 +1483,7 @@ int mutt_match_spam_list (const char *s, SPAM_LIST * l, char *text, int x)
         }
       }
       text[tlen] = '\0';
-      dprint (5, (debugfile, "mutt_match_spam_list: \"%s\"\n", text));
+      debug_print (5, ("\"%s\"\n", text));
       return 1;
     }
   }