X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=rfc3676.c;h=c194540ef12c1848c6191c287cac3f10c91ad523;hp=9b626ce8bc909737add2d06493bf4cabb7e2c96f;hb=6ea736d5aa28a6e24885bc8278d080d5a0f8dfb8;hpb=2a0e5679311c156ba6e559336f80ec0077f4c571 diff --git a/rfc3676.c b/rfc3676.c index 9b626ce..c194540 100644 --- a/rfc3676.c +++ b/rfc3676.c @@ -20,16 +20,18 @@ #include #include +#include +#include +#include +#include +#include + #include "mutt.h" #include "mutt_curses.h" -#include "ascii.h" #include "handler.h" #include "state.h" #include "lib.h" -#include "lib/mem.h" -#include "lib/intl.h" -#include "lib/str.h" #include "lib/debug.h" #define FLOWED_MAX 77 @@ -45,7 +47,7 @@ static int get_quote_level (char *line) static void print_flowed_line (char *line, STATE * s, int ql) { int width; char *pos, *oldpos; - int len = str_len (line); + int len = m_strlen(line); int i; if (MaxLineLength > 0) { @@ -67,8 +69,8 @@ static void print_flowed_line (char *line, STATE * s, int ql) { width = COLS; } - if (str_len (line) == 0) { - if (option (OPTQUOTEEMPTY)) { + if (m_strlen(line) == 0) { + if (!(s->flags & M_REPLYING) || option (OPTQUOTEEMPTY)) { if (s->prefix) state_puts(s->prefix,s); for (i=0;i',s); @@ -136,16 +138,18 @@ static void print_flowed_line (char *line, STATE * s, int ql) { int rfc3676_handler (BODY * a, STATE * s) { int bytes = a->length; char buf[LONG_STRING]; - char *curline = str_dup (""); + char *curline = p_new(char, 1); char *t = NULL; unsigned int curline_len = 1, quotelevel = 0, newql = 0; int buf_off, buf_len; int delsp = 0, fixed = 0; + *curline='\0'; + /* respect DelSP of RfC3676 only with f=f parts */ if ((t = (char*) mutt_get_parameter ("delsp", a->parameter))) { - delsp = str_len (t) == 3 && ascii_strncasecmp (t, "yes", 3) == 0; + delsp = m_strlen(t) == 3 && ascii_strncasecmp (t, "yes", 3) == 0; t = NULL; } @@ -153,7 +157,7 @@ int rfc3676_handler (BODY * a, STATE * s) { while (bytes > 0 && fgets (buf, sizeof (buf), s->fpin)) { - buf_len = str_len (buf); + buf_len = m_strlen(buf); bytes -= buf_len; newql = get_quote_level (buf); @@ -173,7 +177,7 @@ int rfc3676_handler (BODY * a, STATE * s) { * possibly a change in quoting level. But that's better than not * displaying it at all. */ - if ((t = strrchr (buf, '\n')) || (t = strrchr (buf, '\r'))) { + if ((t = strrchr (buf, '\r')) || (t = strrchr (buf, '\n'))) { *t = '\0'; buf_len = t - buf; } @@ -192,6 +196,15 @@ int rfc3676_handler (BODY * a, STATE * s) { if (delsp && buf_len >= 1 && buf[buf_len-1] == ' ') buf[--buf_len] = '\0'; + /* we're here when last space removed 'cause of DelSp was + * the last space and there isn't more -> done */ + if ((buf_len - buf_off) < 0) { + print_flowed_line (curline, s, quotelevel); + *curline = '\0'; + curline_len = 1; + continue; + } + /* signature separator also flushes the previous paragraph */ if (strcmp(buf + buf_off, "-- ") == 0 && curline && *curline) { print_flowed_line (curline, s, quotelevel); @@ -199,7 +212,7 @@ int rfc3676_handler (BODY * a, STATE * s) { curline_len = 1; } - mem_realloc (&curline, curline_len + buf_len - buf_off); + p_realloc(&curline, curline_len + buf_len - buf_off); strcpy (curline + curline_len - 1, buf + buf_off); curline_len += buf_len - buf_off; @@ -211,7 +224,7 @@ int rfc3676_handler (BODY * a, STATE * s) { } } - mem_free (&curline); + p_delete(&curline); return (0); } @@ -242,7 +255,7 @@ void rfc3676_space_stuff (HEADER* hdr) { fputc (' ', out); #if DEBUG lc++; - len = str_len (buf); + len = m_strlen(buf); if (len > 0) { c = buf[len-1]; buf[len-1] = '\0'; @@ -259,5 +272,5 @@ void rfc3676_space_stuff (HEADER* hdr) { fclose (out); mutt_set_mtime (hdr->content->filename, tmpfile); unlink (hdr->content->filename); - str_replace (&hdr->content->filename, tmpfile); + m_strreplace(&hdr->content->filename, tmpfile); }