wibble.
[apps/madmutt.git] / sendlib.c
index 032078d..ae595c3 100644 (file)
--- a/sendlib.c
+++ b/sendlib.c
@@ -9,32 +9,14 @@
 
 #define _SENDLIB_C 1
 
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
+#include <lib-lib/lib-lib.h>
 
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <ctype.h>
-#include <sys/stat.h>
 #include <signal.h>
-#include <sys/wait.h>
-#include <fcntl.h>
 #include <sys/utsname.h>
 
-#include <lib-lib/mem.h>
-#include <lib-lib/ascii.h>
-#include <lib-lib/str.h>
-#include <lib-lib/macros.h>
-#include <lib-lib/file.h>
-
 #include <lib-sys/exit.h>
 #include <lib-sys/mutt_signal.h>
-
 #include <lib-mime/mime.h>
-
 #include <lib-ui/curses.h>
 
 #include "mutt.h"
@@ -72,8 +54,6 @@
 
 #define DISPOSITION(X) X==DISPATTACH?"attachment":"inline"
 
-static char MsgIdPfx = 'A';
-
 static void transform_to_7bit (BODY * a, FILE * fpin);
 
 static void encode_quoted (fgetconv_t * fc, FILE * fout, int istext)
@@ -134,7 +114,7 @@ static void encode_quoted (fgetconv_t * fc, FILE * fout, int istext)
           fputs (line, fout);
         }
         else {
-          int savechar = line[linelen - 1];
+          savechar = line[linelen - 1];
 
           line[linelen - 1] = '=';
           line[linelen] = 0;
@@ -366,8 +346,6 @@ int mutt_write_mime_header (BODY * a, FILE * f)
   return (ferror (f) ? -1 : 0);
 }
 
-# define write_as_text_part(a)  (mutt_is_text_part(a) || mutt_is_application_pgp(a))
-
 int mutt_write_mime_body (BODY * a, FILE * f)
 {
   const char *p;
@@ -416,6 +394,7 @@ int mutt_write_mime_body (BODY * a, FILE * f)
   else
     fc = fgetconv_open (fpin, 0, 0, 0);
 
+#define write_as_text_part(a)  (mutt_is_text_part(a) || mutt_is_application_pgp(a))
   if (a->encoding == ENCQUOTEDPRINTABLE)
     encode_quoted (fc, f, write_as_text_part (a));
   else if (a->encoding == ENCBASE64)
@@ -424,6 +403,7 @@ int mutt_write_mime_body (BODY * a, FILE * f)
     encode_8bit (fc, f, write_as_text_part (a));
   else
     mutt_copy_stream (fpin, f);
+#undef write_as_text_part
 
   fgetconv_close (&fc);
   fclose (fpin);
@@ -431,8 +411,6 @@ int mutt_write_mime_body (BODY * a, FILE * f)
   return (ferror (f) ? -1 : 0);
 }
 
-#undef write_as_text_part
-
 typedef struct {
   int from;
   int whitespace;
@@ -550,9 +528,6 @@ static void update_content_info (CONTENT * info, CONTENT_STATE * s, char *d,
 
 }
 
-/* Define as 1 if iconv sometimes returns -1(EILSEQ) instead of transcribing. */
-#define BUGGY_ICONV 1
-
 /*
  * Find the best charset conversion of the file from fromcode into one
  * of the tocodes. If successful, set *tocode and CONTENT *info and
@@ -613,8 +588,7 @@ static ssize_t convert_file_to (FILE * file, const char *fromcode,
     ob = bufu, obl = sizeof (bufu);
     n = my_iconv(cd1, ibl ? &ib : 0, &ibl, &ob, &obl);
     assert (n == -1 || !n);
-    if (n == -1 &&
-        ((errno != EINVAL && errno != E2BIG) || ib == bufi)) {
+    if (n == -1 && ((errno != EINVAL && errno != E2BIG) || ib == bufi)) {
       assert (errno == EILSEQ ||
               (errno == EINVAL && ib == bufi && ibl < ssizeof (bufi)));
       ret = -1;
@@ -629,8 +603,6 @@ static ssize_t convert_file_to (FILE * file, const char *fromcode,
         ob = bufo, obl = sizeof (bufo);
         n = my_iconv(cd[i], (ibl || ubl) ? &ub : 0, &ubl, &ob, &obl);
         if (n == -1) {
-          assert (errno == E2BIG ||
-                  (BUGGY_ICONV && (errno == EILSEQ || errno == ENOENT)));
           score[i] = -1;
         }
         else {
@@ -1086,10 +1058,6 @@ static void mutt_set_encoding (BODY * b, CONTENT * info)
            && ascii_strcasecmp (b->subtype, "pgp-keys") == 0)
     b->encoding = ENC7BIT;
   else
-#if 0
-  if (info->lobin || info->hibin || info->binary || info->linemax > 990
-        || info->cr || ( /* option (OPTENCODEFROM) && */ info->from))
-#endif
   {
     /* Determine which encoding is smaller  */
     if (1.33 * (float) (info->lobin + info->hibin + info->ascii) <
@@ -1098,10 +1066,6 @@ static void mutt_set_encoding (BODY * b, CONTENT * info)
     else
       b->encoding = ENCQUOTEDPRINTABLE;
   }
-#if 0
-  else
-    b->encoding = ENC7BIT;
-#endif
 }
 
 void mutt_stamp_attachment (BODY * a)
@@ -1111,22 +1075,16 @@ void mutt_stamp_attachment (BODY * a)
 
 /* Get a body's character set */
 
-char *mutt_get_body_charset (char *d, ssize_t dlen, BODY * b)
+char *mutt_get_body_charset(char *d, ssize_t dlen, BODY * b)
 {
-  const char *p = NULL;
-
-  if (b && b->type != TYPETEXT)
-    return NULL;
+    const char *p;
 
-  if (b)
-    p = parameter_getval(b->parameter, "charset");
+    if (b && b->type != TYPETEXT)
+        return NULL;
 
-  if (p)
-    charset_canonicalize (d, dlen, p);
-  else
-    m_strcpy(d, dlen, "us-ascii");
-
-  return d;
+    p = b ? parameter_getval(b->parameter, "charset") : NULL;
+    charset_canonicalize(d, dlen, p);
+    return d;
 }
 
 
@@ -1239,23 +1197,8 @@ BODY *mutt_make_file_attach (const char *path)
   /* Attempt to determine the appropriate content-type based on the filename
    * suffix.
    */
-
-#if 0
-
-  if ((n =
-       mutt_lookup_mime_type (buf, sizeof (buf), xbuf, sizeof (xbuf),
-                              path)) != TYPEOTHER || *xbuf != '\0') {
-    att->type = n;
-    att->subtype = m_strdup(buf);
-    att->xtype = m_strdup(xbuf);
-  }
-
-#else
-
   mutt_lookup_mime_type (att, path);
 
-#endif
-
   if ((info = mutt_get_content_info (path, att)) == NULL) {
     body_list_wipe(&att);
     return NULL;
@@ -1270,15 +1213,14 @@ BODY *mutt_make_file_attach (const char *path)
        */
       att->type = TYPETEXT;
       att->subtype = m_strdup("plain");
-    }
-    else {
+    } else {
       att->type = TYPEAPPLICATION;
       att->subtype = m_strdup("octet-stream");
     }
   }
 
   mutt_update_encoding (att);
-  return (att);
+  return att;
 }
 
 static int get_toplevel_encoding (BODY * a)
@@ -1661,6 +1603,7 @@ static void mutt_gen_localpart(char *buf, unsigned int len, const char *fmt)
     tm = gmtime (&now);
 
     while (*fmt) {
+        static char MsgIdPfx = 'A';
         int c = *fmt++;
 
         if (c != '%') {
@@ -1789,17 +1732,8 @@ send_msg(const char *path, const char **args, const char *msg, char **tempfile)
     setsid ();
 
     /* next we close all open files */
-#if defined(OPEN_MAX)
-    for (fd = 0; fd < OPEN_MAX; fd++)
+    for (fd = 0; fd < getdtablesize(); fd++)
       close (fd);
-#elif defined(_POSIX_OPEN_MAX)
-    for (fd = 0; fd < _POSIX_OPEN_MAX; fd++)
-      close (fd);
-#else
-    close (0);
-    close (1);
-    close (2);
-#endif
 
     /* now the second fork() */
     if ((pid = fork ()) == 0) {
@@ -1826,7 +1760,7 @@ send_msg(const char *path, const char **args, const char *msg, char **tempfile)
           _exit (S_ERR);
       }
 
-      execv (path, args);
+      execv (path, (char**)args);
       _exit (S_ERR);
     }
     else if (pid == -1) {
@@ -2052,58 +1986,6 @@ int mutt_invoke_mta (address_t * from,    /* the sender */
   return mutt_invoke_sendmail (from, to, cc, bcc, msg, eightbit);
 }
 
-/* appends string 'b' to string 'a', and returns the pointer to the new
-   string. */
-char *mutt_append_string (char *a, const char *b)
-{
-  ssize_t la = m_strlen(a);
-
-  p_realloc(&a, la + m_strlen(b) + 1);
-  strcpy (a + la, b);           /* __STRCPY_CHECKED__ */
-  return (a);
-}
-
-/* returns 1 if char `c' needs to be quoted to protect from shell
-   interpretation when executing commands in a subshell */
-#define INVALID_CHAR(c) (!isalnum ((unsigned char)c) && !strchr ("@.+-_,:", c))
-
-/* returns 1 if string `s' contains characters which could cause problems
-   when used on a command line to execute a command */
-int mutt_needs_quote (const char *s)
-{
-  while (*s) {
-    if (INVALID_CHAR (*s))
-      return 1;
-    s++;
-  }
-  return 0;
-}
-
-/* Quote a string to prevent shell escapes when this string is used on the
-   command line to send mail. */
-char *mutt_quote_string (const char *s)
-{
-  char *r, *pr;
-  ssize_t rlen;
-
-  rlen = m_strlen(s) + 3;
-  pr = r = p_new(char, rlen);
-  *pr++ = '"';
-  while (*s) {
-    if (INVALID_CHAR (*s)) {
-      ssize_t o = pr - r;
-
-      p_realloc(&r, ++rlen);
-      pr = r + o;
-      *pr++ = '\\';
-    }
-    *pr++ = *s++;
-  }
-  *pr++ = '"';
-  *pr = 0;
-  return (r);
-}
-
 /* For postponing (!final) do the necessary encodings only */
 void mutt_prepare_envelope (ENVELOPE * env, int final)
 {
@@ -2254,41 +2136,6 @@ int mutt_bounce_message (FILE * fp, HEADER * h, address_t * to)
   return ret;
 }
 
-
-/* given a list of addresses, return a list of unique addresses */
-address_t *mutt_remove_duplicates (address_t * addr)
-{
-  address_t *top = addr;
-  address_t **last = &top;
-  address_t *tmp;
-  int dup;
-
-  while (addr) {
-    for (tmp = top, dup = 0; tmp && tmp != addr; tmp = tmp->next) {
-      if (tmp->mailbox && addr->mailbox &&
-          !ascii_strcasecmp (addr->mailbox, tmp->mailbox)) {
-        dup = 1;
-        break;
-      }
-    }
-
-    if (dup) {
-      *last = addr->next;
-
-      addr->next = NULL;
-      address_list_wipe(&addr);
-
-      addr = *last;
-    }
-    else {
-      last = &addr->next;
-      addr = addr->next;
-    }
-  }
-
-  return (top);
-}
-
 static void set_noconv_flags (BODY * b, short flag)
 {
   for (; b; b = b->next) {