This is required by BINARY fetches, since the original data had CRLFs.
{
char hexbuf[3];
size_t src_pos, pos, next;
- bool have_cr, errors = FALSE;
+ bool errors = FALSE;
int ret;
hexbuf[2] = '\0';
if (src[src_pos] == '\n') {
/* drop trailing whitespace */
pos = src_pos;
- if (pos > 0 && src[pos-1] == '\r') {
+ if (pos > 0 && src[pos-1] == '\r')
pos--;
- have_cr = TRUE;
- } else {
- have_cr = FALSE;
- }
while (pos > 0 && QP_IS_TRAILING_SPACE(src[pos-1]))
pos--;
buffer_append(dest, src + next, pos - next);
next = src_pos+1;
- if (have_cr)
- buffer_append_c(dest, '\r');
+ buffer_append_c(dest, '\r');
buffer_append_c(dest, '\n');
continue;
}
/* Translates quoted printable data into binary. dest must be at least the
size of src, and may be same as src. Returns 0 if input was valid, -1 if
- there were some decoding errors (which were skipped over).
+ there were some decoding errors (which were skipped over). LFs without
+ preceding CR are returned as CRLF (but =0A isn't).
This function may be called multiple times for parsing the same stream.
src_pos is updated to first non-translated character in src. */
{ "foo = \n=01", "foo \001", 0, 0 },
{ "foo =\t\r\nbar", "foo bar", 0, 0 },
{ "foo =\r\n=01", "foo \001", 0, 0 },
- { "foo \nbar=", "foo\nbar", 1, 0 },
+ { "foo \nbar=", "foo\r\nbar", 1, 0 },
{ "=0A=0D ", "\n\r", 2, 0 },
{ "foo_bar", "foo_bar", 0, 0 },
{ "foo=", "foo", 1, 0 },