Rocco Rutte:
[apps/madmutt.git] / sendlib.c
index cedcd9e..c9c5874 100644 (file)
--- a/sendlib.c
+++ b/sendlib.c
@@ -1,19 +1,10 @@
 /*
+ * Copyright notice from original mutt:
  * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.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.
  */
 
 #define _SENDLIB_C 1
 #include "rfc2231.h"
 #include "mx.h"
 #include "mime.h"
-#include "mailbox.h"
 #include "copy.h"
 #include "pager.h"
 #include "charset.h"
 #include "mutt_crypt.h"
 #include "mutt_idna.h"
 
+#include "lib/mem.h"
+#include "lib/str.h"
+#include "lib/intl.h"
+#include "lib/debug.h"
+
 #include <string.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -192,11 +187,11 @@ static void encode_quoted (FGETCONV * fc, FILE * fout, int istext)
     }
 
     /* Escape lines that begin with/only contain "the message separator". */
-    if (linelen == 4 && !mutt_strncmp ("From", line, 4)) {
+    if (linelen == 4 && !safe_strncmp ("From", line, 4)) {
       strfcpy (line, "=46rom", sizeof (line));
       linelen = 6;
     }
-    else if (linelen == 4 && !mutt_strncmp ("from", line, 4)) {
+    else if (linelen == 4 && !safe_strncmp ("from", line, 4)) {
       strfcpy (line, "=66rom", sizeof (line));
       linelen = 6;
     }
@@ -462,9 +457,7 @@ int mutt_write_mime_body (BODY * a, FILE * f)
   if (a->type == TYPEMULTIPART) {
     /* First, find the boundary to use */
     if (!(p = mutt_get_parameter ("boundary", a->parameter))) {
-      dprint (1,
-              (debugfile,
-               "mutt_write_mime_body(): no boundary parameter found!\n"));
+      debug_print (1, ("no boundary parameter found!\n"));
       mutt_error _("No boundary parameter found! [report this error]");
 
       return (-1);
@@ -492,9 +485,7 @@ int mutt_write_mime_body (BODY * a, FILE * f)
   }
 
   if ((fpin = fopen (a->filename, "r")) == NULL) {
-    dprint (1,
-            (debugfile, "write_mime_body: %s no longer exists!\n",
-             a->filename));
+    debug_print (1, ("%s no longer exists!\n", a->filename));
     mutt_error (_("%s no longer exists!"), a->filename);
     return -1;
   }
@@ -832,7 +823,7 @@ static size_t convert_file_from_to (FILE * file,
   for (c = tocodes, i = 0; c; c = c1 ? c1 + 1 : 0, i++) {
     if ((c1 = strchr (c, ':')) == c)
       continue;
-    tcode[i] = mutt_substrdup (c, c1);
+    tcode[i] = str_substrdup (c, c1);
   }
 
   ret = (size_t) (-1);
@@ -841,7 +832,7 @@ static size_t convert_file_from_to (FILE * file,
     for (c = fromcodes; c; c = c1 ? c1 + 1 : 0) {
       if ((c1 = strchr (c, ':')) == c)
         continue;
-      fcode = mutt_substrdup (c, c1);
+      fcode = str_substrdup (c, c1);
 
       ret = convert_file_to (file, fcode, ncodes, (const char **) tcode,
                              &cn, info);
@@ -904,8 +895,7 @@ CONTENT *mutt_get_content_info (const char *fname, BODY * b)
   }
 
   if ((fp = fopen (fname, "r")) == NULL) {
-    dprint (1, (debugfile, "mutt_get_content_info: %s: %s (errno %d).\n",
-                fname, strerror (errno), errno));
+    debug_print (1, ("%s: %s (errno %d).\n", fname, strerror (errno), errno));
     return (NULL);
   }
 
@@ -980,16 +970,13 @@ int mutt_lookup_mime_type (BODY * att, const char *path)
       snprintf (buf, sizeof (buf), "%s/.mime.types", NONULL (Homedir));
       break;
     case 1:
-      strfcpy (buf, SYSCONFDIR "/mime.types", sizeof (buf));
+      strfcpy (buf, SYSCONFDIR "/muttng-mime.types", sizeof (buf));
       break;
     case 2:
       strfcpy (buf, PKGDATADIR "/mime.types", sizeof (buf));
       break;
     default:
-      dprint (1,
-              (debugfile,
-               "mutt_lookup_mime_type: Internal error, count = %d.\n",
-               count));
+      debug_print (1, ("Internal error, count = %d.\n", count));
       goto bye;                 /* shouldn't happen */
     }
 
@@ -1013,7 +1000,7 @@ int mutt_lookup_mime_type (BODY * att, const char *path)
         while ((p = strtok (p, " \t\n"))) {
           sze = mutt_strlen (p);
           if ((sze > cur_sze) && (szf >= sze) &&
-              (mutt_strcasecmp (path + szf - sze, p) == 0
+              (safe_strcasecmp (path + szf - sze, p) == 0
                || ascii_strcasecmp (path + szf - sze, p) == 0) && (szf == sze
                                                                    || path[szf
                                                                            -
@@ -1031,7 +1018,7 @@ int mutt_lookup_mime_type (BODY * att, const char *path)
 
             for (q = p; *q && !ISSPACE (*q); q++);
 
-            mutt_substrcpy (subtype, p, q, sizeof (subtype));
+            str_substrcpy (subtype, p, q, sizeof (subtype));
 
             if ((type = mutt_check_mime_type (ct)) == TYPEOTHER)
               strfcpy (xtype, ct, sizeof (xtype));
@@ -1049,8 +1036,8 @@ bye:
 
   if (type != TYPEOTHER || *xtype != '\0') {
     att->type = type;
-    mutt_str_replace (&att->subtype, subtype);
-    mutt_str_replace (&att->xtype, xtype);
+    str_replace (&att->subtype, subtype);
+    str_replace (&att->xtype, xtype);
   }
 
   return (type);
@@ -1696,7 +1683,7 @@ int mutt_write_rfc822_header (FILE * fp, ENVELOPE * env, BODY * attach,
       }
     }
     /* Add a vanity header */
-    fprintf (fp, "User-Agent: mutt-ng %s (%s)\n", MUTT_VERSION, os);
+    fprintf (fp, "User-Agent: mutt-ng/%s (%s)\n", MUTT_VERSION, os);
   }
 
   return (ferror (fp) == 0 ? 0 : -1);
@@ -1796,11 +1783,11 @@ static void mutt_gen_localpart (char *buf, unsigned int len, char *fmt)
         break;
       case 'O':
         snprintf (tmp, sizeof (tmp), "%lo", (unsigned long) now);
-        safe_strncat (buf, len, tmp, strlen (tmp));
+        safe_strncat (buf, len, tmp, mutt_strlen (tmp));
         break;
       case 'p':
         snprintf (tmp, sizeof (tmp), "%u", (unsigned int) getpid ());
-        safe_strncat (buf, len, tmp, strlen (tmp));
+        safe_strncat (buf, len, tmp, mutt_strlen (tmp));
         break;
       case 'P':
         snprintf (tmp, sizeof (tmp), "%c", MsgIdPfx);
@@ -1809,11 +1796,11 @@ static void mutt_gen_localpart (char *buf, unsigned int len, char *fmt)
         break;
       case 'r':
         snprintf (tmp, sizeof (tmp), "%u", (unsigned int) rand ());
-        safe_strncat (buf, len, tmp, strlen (tmp));
+        safe_strncat (buf, len, tmp, mutt_strlen (tmp));
         break;
       case 'R':
         snprintf (tmp, sizeof (tmp), "%x", (unsigned int) rand ());
-        safe_strncat (buf, len, tmp, strlen (tmp));
+        safe_strncat (buf, len, tmp, mutt_strlen (tmp));
         break;
       case 's':
         snprintf (tmp, sizeof (tmp), "%02d", tm->tm_sec);
@@ -1821,11 +1808,11 @@ static void mutt_gen_localpart (char *buf, unsigned int len, char *fmt)
         break;
       case 'T':
         snprintf (tmp, sizeof (tmp), "%u", (unsigned int) now);
-        safe_strncat (buf, len, tmp, strlen (tmp));
+        safe_strncat (buf, len, tmp, mutt_strlen (tmp));
         break;
       case 'X':
         snprintf (tmp, sizeof (tmp), "%x", (unsigned int) now);
-        safe_strncat (buf, len, tmp, strlen (tmp));
+        safe_strncat (buf, len, tmp, mutt_strlen (tmp));
         break;
       case 'Y':
         snprintf (tmp, sizeof (tmp), "%04d", tm->tm_year + 1900);       /* this will break in the year 10000 ;-) */
@@ -1853,16 +1840,12 @@ char *mutt_gen_msgid (void)
   char buf[SHORT_STRING];
   char localpart[SHORT_STRING];
   unsigned int localpart_length;
-  time_t now;
-  struct tm *tm;
   const char *fqdn;
 
-  now = time (NULL);
-  tm = gmtime (&now);
   if (!(fqdn = mutt_fqdn (0)))
     fqdn = NONULL (Hostname);
 
-  localpart_length = sizeof (buf) - strlen (fqdn) - 4;  /* the 4 characters are '<', '@', '>' and '\0' */
+  localpart_length = sizeof (buf) - mutt_strlen (fqdn) - 4;  /* the 4 characters are '<', '@', '>' and '\0' */
 
   mutt_gen_localpart (localpart, localpart_length, MsgIdFormat);
 
@@ -2259,7 +2242,7 @@ void mutt_prepare_envelope (ENVELOPE * env, int final)
 
     mutt_set_followup_to (env);
 
-    if (!env->message_id)
+    if (!env->message_id && MsgIdFormat && *MsgIdFormat)
       env->message_id = mutt_gen_msgid ();
   }
 
@@ -2334,7 +2317,8 @@ static int _mutt_bounce_message (FILE * fp, HEADER * h, ADDRESS * to,
     fseek (fp, h->offset, 0);
     fprintf (f, "Resent-From: %s", resent_from);
     fprintf (f, "\nResent-%s", mutt_make_date (date, sizeof (date)));
-    fprintf (f, "Resent-Message-ID: %s\n", mutt_gen_msgid ());
+    if (MsgIdFormat && *MsgIdFormat)
+      fprintf (f, "Resent-Message-ID: %s\n", mutt_gen_msgid ());
     fputs ("Resent-To: ", f);
     mutt_write_address_list (to, f, 11, 0);
     mutt_copy_header (fp, h, f, ch_flags, NULL);
@@ -2403,8 +2387,7 @@ ADDRESS *mutt_remove_duplicates (ADDRESS * addr)
     }
 
     if (dup) {
-      dprint (2, (debugfile, "mutt_remove_duplicates: Removing %s\n",
-                  addr->mailbox));
+      debug_print (2, ("Removing %s\n", addr->mailbox));
 
       *last = addr->next;
 
@@ -2449,10 +2432,7 @@ int mutt_write_fcc (const char *path, HEADER * hdr, const char *msgid,
     set_noconv_flags (hdr->content, 1);
 
   if (mx_open_mailbox (path, M_APPEND | M_QUIET, &f) == NULL) {
-    dprint (1,
-            (debugfile,
-             "mutt_write_fcc(): unable to open mailbox %s in append-mode, aborting.\n",
-             path));
+    debug_print (1, ("unable to open mailbox %s in append-mode, aborting.\n", path));
     return (-1);
   }
 
@@ -2567,8 +2547,7 @@ int mutt_write_fcc (const char *path, HEADER * hdr, const char *msgid,
 
     fflush (tempfp);
     if (ferror (tempfp)) {
-      dprint (1,
-              (debugfile, "mutt_write_fcc(): %s: write failed.\n", tempfile));
+      debug_print (1, ("%s: write failed.\n", tempfile));
       fclose (tempfp);
       unlink (tempfile);
       mx_commit_message (msg, &f);      /* XXX - really? */