Encode text as quoted printable.
150{
151 int c, linelen = 0;
152 char line[77] = { 0 };
153
155 {
156
157 if ((linelen == 76) && ((istext && (c != '\n')) || !istext))
158 {
159
160
161
162 if (line[linelen - 3] == '=')
163 {
164 line[linelen - 3] = 0;
165 fputs(line, fp_out);
166 fputs("=\n", fp_out);
167 line[linelen] = 0;
168 line[0] = '=';
169 line[1] = line[linelen - 2];
170 line[2] = line[linelen - 1];
171 linelen = 3;
172 }
173 else
174 {
175 char savechar = line[linelen - 1];
176 line[linelen - 1] = '=';
177 line[linelen] = 0;
178 fputs(line, fp_out);
179 fputc('\n', fp_out);
180 line[0] = savechar;
181 linelen = 1;
182 }
183 }
184
185
187 {
189 linelen = 6;
190 }
192 {
194 linelen = 6;
195 }
196 else if ((linelen == 1) && (line[0] == '.'))
197 {
199 linelen = 3;
200 }
201
202 if ((c == '\n') && istext)
203 {
204
205 if ((linelen > 0) && ((line[linelen - 1] == ' ') || (line[linelen - 1] == '\t')))
206 {
207 if (linelen < 74)
208 {
209 snprintf(line + linelen - 1, sizeof(line) - (linelen - 1), "=%2.2X",
210 (unsigned char) line[linelen - 1]);
211 fputs(line, fp_out);
212 }
213 else
214 {
215 int savechar2 = line[linelen - 1];
216
217 line[linelen - 1] = '=';
218 line[linelen] = 0;
219 fputs(line, fp_out);
220 fprintf(fp_out, "\n=%2.2X", (unsigned char) savechar2);
221 }
222 }
223 else
224 {
225 line[linelen] = 0;
226 fputs(line, fp_out);
227 }
228 fputc('\n', fp_out);
229 linelen = 0;
230 }
231 else if ((c != 9) && ((c < 32) || (c > 126) || (c == '=')))
232 {
233
234
235 if (linelen > 73)
236 {
237 line[linelen++] = '=';
238 line[linelen] = 0;
239 fputs(line, fp_out);
240 fputc('\n', fp_out);
241 linelen = 0;
242 }
243 snprintf(line + linelen, sizeof(line) - linelen, "=%2.2X", (unsigned char) c);
244 linelen += 3;
245 }
246 else
247 {
248
249
250 line[linelen++] = c;
251 }
252 }
253
254
255 if (linelen > 0)
256 {
257 if ((line[linelen - 1] == ' ') || (line[linelen - 1] == '\t'))
258 {
259
260 if (linelen < 74)
261 {
262 snprintf(line + linelen - 1, sizeof(line) - (linelen - 1), "=%2.2X",
263 (unsigned char) line[linelen - 1]);
264 }
265 else
266 {
267 char savechar = line[linelen - 1];
268 line[linelen - 1] = '=';
269 line[linelen] = 0;
270 fputs(line, fp_out);
271 fputc('\n', fp_out);
272 snprintf(line, sizeof(line), "=%2.2X", (unsigned char) savechar);
273 }
274 }
275 else
276 {
277 line[linelen] = 0;
278 }
279 fputs(line, fp_out);
280 }
281}
size_t mutt_str_startswith(const char *str, const char *prefix)
Check whether a string starts with a prefix.
size_t mutt_str_copy(char *dest, const char *src, size_t dsize)
Copy a string into a buffer (guaranteeing NUL-termination)