talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 55a628c8650cf9adb9aa92dd65ecc89e53f38e1e
parent 452b4d0d24debfff5376fe61f3673e712872847a
Author: Paul Mangan <paul@claws-mail.org>
Date:   Tue, 10 Jul 2012 21:35:40 +0000

2012-07-10 [paul]	3.8.1cvs14

	* src/procmime.c
		forgot this in last commit

Diffstat:
MChangeLog | 5+++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/procmime.c | 77+++++++++++++++--------------------------------------------------------------
4 files changed, 22 insertions(+), 63 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,8 @@ +2012-07-10 [paul] 3.8.1cvs14 + + * src/procmime.c + forgot this in last commit + 2012-07-10 [paul] 3.8.1cvs13 * src/messageview.c diff --git a/PATCHSETS b/PATCHSETS @@ -4388,3 +4388,4 @@ ( cvs diff -u -r 1.1.2.70 -r 1.1.2.71 src/plugins/pgpcore/sgpgme.c; ) > 3.8.1cvs11.patchset ( cvs diff -u -r 1.1.2.71 -r 1.1.2.72 src/plugins/pgpcore/sgpgme.c; ) > 3.8.1cvs12.patchset ( cvs diff -u -r 1.94.2.234 -r 1.94.2.235 src/messageview.c; cvs diff -u -r 1.9.2.57 -r 1.9.2.58 src/common/defs.h; cvs diff -u -r 1.3.2.18 -r 1.3.2.19 src/common/quoted-printable.c; cvs diff -u -r 1.3.2.10 -r 1.3.2.11 src/common/quoted-printable.h; ) > 3.8.1cvs13.patchset +( cvs diff -u -r 1.49.2.146 -r 1.49.2.147 src/procmime.c; ) > 3.8.1cvs14.patchset diff --git a/configure.ac b/configure.ac @@ -12,7 +12,7 @@ MINOR_VERSION=8 MICRO_VERSION=1 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=13 +EXTRA_VERSION=14 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/procmime.c b/src/procmime.c @@ -583,37 +583,12 @@ gboolean procmime_encode_content(MimeInfo *mimeinfo, EncodingType encoding) } } } else { - gchar buf[MAXSMTPTEXTLEN+1]; - gint leftover = 0; - - while (fgets(buf + leftover, - sizeof(buf) - leftover, - infp) != NULL) - { - gchar *l, *c = buf; - leftover = 0; - - while (*c != '\0') { - if ( - *c == '\n' - || (*c == '\r' && *(c+1) == '\n')) - { - *c = '\0'; - break; - } - c++; - } - while (c - buf > MAXSMTPTEXTLEN - 2) { - *c = *(c-1); - *--c = '\0'; - leftover++; - } - - if (fputs(buf, outfp) == EOF || putc('\n', outfp) == EOF) - err = TRUE; - - for (l = buf; l-buf < leftover; l++) - *l = *++c; + gchar buf[BUFFSIZE]; + + while (fgets(buf, sizeof(buf), infp) != NULL) { + strcrchomp(buf); + if (fputs(buf, outfp) == EOF) + err = TRUE; } } @@ -1200,12 +1175,11 @@ EncodingType procmime_get_encoding_for_text_file(const gchar *file, gboolean *ha { FILE *fp; guchar buf[BUFFSIZE]; - gboolean cr = FALSE; size_t len; - gint linelen = 0, maxlinelen = 0; size_t octet_chars = 0; size_t total_len = 0; gfloat octet_percentage; + gboolean force_b64 = FALSE; if ((fp = g_fopen(file, "rb")) == NULL) { FILE_OP_ERROR(file, "fopen"); @@ -1217,27 +1191,11 @@ EncodingType procmime_get_encoding_for_text_file(const gchar *file, gboolean *ha gint i; for (p = buf, i = 0; i < len; ++p, ++i) { - switch (*p) { - case '\n': - if (cr) linelen--; - maxlinelen = MAX(linelen, maxlinelen); - linelen = 0; - cr = FALSE; - break; - case '\r': - cr = TRUE; - linelen++; - break; - case '\0': + if (*p & 0x80) + ++octet_chars; + if (*p == '\0') { + force_b64 = TRUE; *has_binary = TRUE; - maxlinelen = G_MAXINT; - cr = FALSE; - break; - default: - if (*p & 0x80) - octet_chars++; - linelen++; - cr = FALSE; } } total_len += len; @@ -1251,20 +1209,15 @@ EncodingType procmime_get_encoding_for_text_file(const gchar *file, gboolean *ha octet_percentage = 0.0; debug_print("procmime_get_encoding_for_text_file(): " - "8bit chars: %zd / %zd (%f%%). " - "maximum line length: %d chars\n", - octet_chars, total_len, 100.0 * octet_percentage, - maxlinelen); + "8bit chars: %zd / %zd (%f%%)\n", octet_chars, total_len, + 100.0 * octet_percentage); - if (octet_percentage > 0.20) { + if (octet_percentage > 0.20 || force_b64) { debug_print("using BASE64\n"); return ENC_BASE64; - } else if (maxlinelen > MAXSMTPTEXTLEN-2) { + } else if (octet_chars > 0) { debug_print("using quoted-printable\n"); return ENC_QUOTED_PRINTABLE; - } else if (octet_chars > 0) { - debug_print("using 8bit\n"); - return ENC_8BIT; } else { debug_print("using 7bit\n"); return ENC_7BIT;