Nico Golde:
[apps/madmutt.git] / handler.c
index 88a3183..d0900ae 100644 (file)
--- a/handler.c
+++ b/handler.c
  *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  */ 
 
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
@@ -31,6 +35,7 @@
 #include "copy.h"
 #include "charset.h"
 #include "mutt_crypt.h"
+#include "lib.h"
 
 
 #define BUFI_SIZE 1000
@@ -1216,14 +1221,18 @@ static void print_flowed_line(char * line, STATE *s,int ql) {
   /* fprintf(stderr,"print_flowed_line will print `%s' with ql = %d\n",line,ql); */
 
   if (strlen(line)==0) {
+    if (s->prefix)
+      state_puts(s->prefix,s);
     for (i=0;i<ql;++i) state_putc('>',s);
+    if (option(OPTSTUFFQUOTED))
+      state_putc(' ',s);
     state_putc('\n',s);
     return;
   }
 
   pos=line+ql+width;
   oldpos=line+ql;
-  if (ql>0 && isblank(*oldpos)) ++oldpos;
+  if (ql>0 && ISBLANK(*oldpos)) ++oldpos;
 
   /* fprintf(stderr,"oldpos = %p line+len = %p\n",oldpos,line+len); */
 
@@ -1257,11 +1266,15 @@ static void print_flowed_line(char * line, STATE *s,int ql) {
     } else {
       /* fprintf(stderr,"if 1 else\n"); */
     }
+    if (s->prefix)
+      state_puts(s->prefix,s);
     for (i=0;i<ql;++i)
       state_putc('>',s);
-    if (option(OPTSTUFFQUOTED) && ql>0) state_putc(' ',s);
+    if (option(OPTSTUFFQUOTED) && (ql>0 || s->prefix)) state_putc(' ',s);
     state_puts(oldpos,s);
     /* fprintf(stderr,"print_flowed_line: `%s'\n",oldpos); */
+    if (pos<line+len)
+      state_putc(' ',s);
     state_putc('\n',s);
     oldpos = pos;
   }
@@ -1290,6 +1303,9 @@ static void text_plain_flowed_handler (BODY *a, STATE *s)
     if ((t=strrchr(buf,'\n')) || (t=strrchr(buf,'\r'))) {
       *t = '\0';
       if (strlen(curline)>0 && curline[strlen(curline)-1]==' ' && newql==quotelevel && strcmp(curline+quotelevel,"-- ")!=0) {
+        if (buf[newql]==' ')
+          curline[strlen(curline)-1] = '\0';
+
         curline = realloc(curline,curline_len+strlen(buf));
         if (curline_len == 1) *curline = '\0';
         curline_len+=strlen(buf);
@@ -1855,11 +1871,21 @@ void mutt_decode_attachment (BODY *b, STATE *s)
 
   Quotebuf[0] = '\0';
 
-  if (istext && s->flags & M_CHARCONV)
+  if (istext)
   {
-    char *charset = mutt_get_parameter ("charset", b->parameter);
-    if (charset && Charset)
-      cd = mutt_iconv_open (Charset, charset, M_ICONV_HOOK_FROM);
+    if(s->flags & M_CHARCONV)
+    {
+      char *charset = mutt_get_parameter ("charset", b->parameter);
+      if (!option (OPTSTRICTMIME) && !charset)
+        charset = mutt_get_first_charset (AssumedCharset);
+      if (charset && Charset)
+        cd = mutt_iconv_open (Charset, charset, M_ICONV_HOOK_FROM);
+    }
+    else
+    {
+      if (b->file_charset)
+        cd = mutt_iconv_open (Charset, b->file_charset, M_ICONV_HOOK_FROM);
+    }
   }
 
   fseek (s->fpin, b->offset, 0);