Rocco Rutte:
[apps/madmutt.git] / handler.c
index 8373635..a39bc0c 100644 (file)
--- a/handler.c
+++ b/handler.c
@@ -19,6 +19,9 @@
 #include <sys/stat.h>
 
 #include "mutt.h"
+#include "ascii.h"
+#include "recvattach.h"
+#include "handler.h"
 #include "mutt_curses.h"
 #include "rfc1524.h"
 #include "keymap.h"
@@ -26,6 +29,8 @@
 #include "copy.h"
 #include "charset.h"
 #include "mutt_crypt.h"
+#include "state.h"
+#include "attach.h"
 #include "lib.h"
 
 #include "lib/mem.h"
 #include "lib/str.h"
 #include "lib/debug.h"
 
-#define BUFI_SIZE 1000
-#define BUFO_SIZE 2000
-
-
 typedef void handler_f (BODY *, STATE *);
 typedef handler_f *handler_t;
 
@@ -62,52 +63,6 @@ int Index_64[128] = {
   41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1
 };
 
-static void state_prefix_put (const char *d, size_t dlen, STATE * s)
-{
-  if (s->prefix)
-    while (dlen--)
-      state_prefix_putc (*d++, s);
-  else
-    fwrite (d, dlen, 1, s->fpout);
-}
-
-void mutt_convert_to_state (iconv_t cd, char *bufi, size_t * l, STATE * s)
-{
-  char bufo[BUFO_SIZE];
-  ICONV_CONST char *ib;
-  char *ob;
-  size_t ibl, obl;
-
-  if (!bufi) {
-    if (cd != (iconv_t) (-1)) {
-      ob = bufo, obl = sizeof (bufo);
-      iconv (cd, 0, 0, &ob, &obl);
-      if (ob != bufo)
-        state_prefix_put (bufo, ob - bufo, s);
-    }
-    if (Quotebuf[0] != '\0')
-      state_prefix_putc ('\n', s);
-    return;
-  }
-
-  if (cd == (iconv_t) (-1)) {
-    state_prefix_put (bufi, *l, s);
-    *l = 0;
-    return;
-  }
-
-  ib = bufi, ibl = *l;
-  for (;;) {
-    ob = bufo, obl = sizeof (bufo);
-    mutt_iconv (cd, &ib, &ibl, &ob, &obl, 0, "?");
-    if (ob == bufo)
-      break;
-    state_prefix_put (bufo, ob - bufo, s);
-  }
-  memmove (bufi, ib, ibl);
-  *l = ibl;
-}
-
 void mutt_decode_xbit (STATE * s, long len, int istext, iconv_t cd)
 {
   int c, ch;
@@ -943,7 +898,7 @@ static void text_plain_flowed_handler (BODY * a, STATE * s)
   int bytes = a->length;
   char buf[LONG_STRING];
   char *curline = strdup ("");
-  char *t;
+  char *t = NULL;
   unsigned int curline_len = 1;
   unsigned int quotelevel = 0, newql = 0;
   int first_line = 1;
@@ -954,8 +909,9 @@ static void text_plain_flowed_handler (BODY * a, STATE * s)
 
     newql = get_quote_level (buf);
 
-    if ((t = strrchr (buf, '\n')) || (t = strrchr (buf, '\r'))) {
-      *t = '\0';
+    if (bytes == 0 || ((t = strrchr (buf, '\n')) || (t = strrchr (buf, '\r')))) {
+      if (t)
+        *t = '\0';
       if (str_len (curline) > 0 && curline[str_len (curline) - 1] == ' '
           && newql == quotelevel
           && strcmp (curline + quotelevel, "-- ") != 0) {
@@ -986,19 +942,6 @@ static void text_plain_flowed_handler (BODY * a, STATE * s)
         quotelevel = newql;
       }
     }
-    else if (bytes == 0) {
-      /* in case there's no line end it's likely the last line
-       * so append to current (if any) */
-      if (buf[newql] == ' ')
-        curline[str_len (curline) - 1] = '\0';
-      curline = realloc (curline, curline_len + str_len (buf));
-      if (curline_len == 1)
-        *curline = '\0';
-      curline_len += str_len (buf);
-      str_ncat (curline, curline_len, buf + newql,
-                    str_len (buf + newql));
-      break;
-    }
   }
   if (curline) {
     print_flowed_line (curline, s, quotelevel);