about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--mmime.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/mmime.c b/mmime.c
index af7c86d..83e0d82 100644
--- a/mmime.c
+++ b/mmime.c
@@ -85,7 +85,6 @@ int gen_qp(uint8_t *s, off_t size, int maxlinelen, int linelen)
 		}
 
 		if ((s[i] > 126) ||
-		    (s[i] < 32 && s[i] != '\n' && s[i] != '\t') ||
 		    (s[i] == '=')) {
 			printf("=%02X", s[i]);
 			linelen += 3;
@@ -99,6 +98,18 @@ int gen_qp(uint8_t *s, off_t size, int maxlinelen, int linelen)
 			putc_unlocked('_', stdout);
 			linelen++;
 			prev = '_';
+		} else if (s[i] < 33 && s[i] != '\n') {
+			if ((s[i] == ' ' || s[i] == '\t') &&
+			    i+1 < size &&
+			    (s[i+1] != '\n' && s[i+1] != '\r')) {
+				putc_unlocked(s[i], stdout);
+				linelen += 1;
+				prev = s[i];
+			} else {
+				printf("=%02X", s[i]);
+				linelen += 3;
+				prev = '_';
+			}
 		} else if (s[i] == '\n') {
 			if (prev == ' ' || prev == '\t')
 				puts("=");