Encode text as quoted printable.
168{
169 int c, linelen = 0;
170 char line[77], savechar;
171
173 {
174
175 if ((linelen == 76) && ((istext && (c != '\n')) || !istext))
176 {
177
178
179
180 if (line[linelen - 3] == '=')
181 {
182 line[linelen - 3] = 0;
183 fputs(line, fp_out);
184 fputs("=\n", fp_out);
185 line[linelen] = 0;
186 line[0] = '=';
187 line[1] = line[linelen - 2];
188 line[2] = line[linelen - 1];
189 linelen = 3;
190 }
191 else
192 {
193 savechar = line[linelen - 1];
194 line[linelen - 1] = '=';
195 line[linelen] = 0;
196 fputs(line, fp_out);
197 fputc('\n', fp_out);
198 line[0] = savechar;
199 linelen = 1;
200 }
201 }
202
203
205 {
207 linelen = 6;
208 }
210 {
212 linelen = 6;
213 }
214 else if ((linelen == 1) && (line[0] == '.'))
215 {
217 linelen = 3;
218 }
219
220 if ((c == '\n') && istext)
221 {
222
223 if ((linelen > 0) && ((line[linelen - 1] == ' ') || (line[linelen - 1] == '\t')))
224 {
225 if (linelen < 74)
226 {
227 sprintf(line + linelen - 1, "=%2.2X", (unsigned char) line[linelen - 1]);
228 fputs(line, fp_out);
229 }
230 else
231 {
232 int savechar2 = line[linelen - 1];
233
234 line[linelen - 1] = '=';
235 line[linelen] = 0;
236 fputs(line, fp_out);
237 fprintf(fp_out, "\n=%2.2X", (unsigned char) savechar2);
238 }
239 }
240 else
241 {
242 line[linelen] = 0;
243 fputs(line, fp_out);
244 }
245 fputc('\n', fp_out);
246 linelen = 0;
247 }
248 else if ((c != 9) && ((c < 32) || (c > 126) || (c == '=')))
249 {
250
251
252 if (linelen > 73)
253 {
254 line[linelen++] = '=';
255 line[linelen] = 0;
256 fputs(line, fp_out);
257 fputc('\n', fp_out);
258 linelen = 0;
259 }
260 sprintf(line + linelen, "=%2.2X", (unsigned char) c);
261 linelen += 3;
262 }
263 else
264 {
265
266
267 line[linelen++] = c;
268 }
269 }
270
271
272 if (linelen > 0)
273 {
274 if ((line[linelen - 1] == ' ') || (line[linelen - 1] == '\t'))
275 {
276
277 if (linelen < 74)
278 sprintf(line + linelen - 1, "=%2.2X", (unsigned char) line[linelen - 1]);
279 else
280 {
281 savechar = line[linelen - 1];
282 line[linelen - 1] = '=';
283 line[linelen] = 0;
284 fputs(line, fp_out);
285 fputc('\n', fp_out);
286 sprintf(line, "=%2.2X", (unsigned char) savechar);
287 }
288 }
289 else
290 line[linelen] = 0;
291 fputs(line, fp_out);
292 }
293}
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)