Encode text as quoted printable.
151{
152 int c, linelen = 0;
153 char line[77], savechar;
154
156 {
157
158 if ((linelen == 76) && ((istext && (c != '\n')) || !istext))
159 {
160
161
162
163 if (line[linelen - 3] == '=')
164 {
165 line[linelen - 3] = 0;
166 fputs(line, fp_out);
167 fputs("=\n", fp_out);
168 line[linelen] = 0;
169 line[0] = '=';
170 line[1] = line[linelen - 2];
171 line[2] = line[linelen - 1];
172 linelen = 3;
173 }
174 else
175 {
176 savechar = line[linelen - 1];
177 line[linelen - 1] = '=';
178 line[linelen] = 0;
179 fputs(line, fp_out);
180 fputc('\n', fp_out);
181 line[0] = savechar;
182 linelen = 1;
183 }
184 }
185
186
188 {
190 linelen = 6;
191 }
193 {
195 linelen = 6;
196 }
197 else if ((linelen == 1) && (line[0] == '.'))
198 {
200 linelen = 3;
201 }
202
203 if ((c == '\n') && istext)
204 {
205
206 if ((linelen > 0) && ((line[linelen - 1] == ' ') || (line[linelen - 1] == '\t')))
207 {
208 if (linelen < 74)
209 {
210 sprintf(line + linelen - 1, "=%2.2X", (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 sprintf(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 sprintf(line + linelen - 1, "=%2.2X", (unsigned char) line[linelen - 1]);
263 }
264 else
265 {
266 savechar = line[linelen - 1];
267 line[linelen - 1] = '=';
268 line[linelen] = 0;
269 fputs(line, fp_out);
270 fputc('\n', fp_out);
271 snprintf(line, sizeof(line), "=%2.2X", (unsigned char) savechar);
272 }
273 }
274 else
275 {
276 line[linelen] = 0;
277 }
278 fputs(line, fp_out);
279 }
280}
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)