+ quotelevel = newql;
+
+ /* XXX - If a line is longer than buf (shouldn't happen), it is split.
+ * This will almost always cause an unintended line break, and
+ * possibly a change in quoting level. But that's better than not
+ * displaying it at all.
+ */
+ if ((t = strrchr (buf, '\n')) || (t = strrchr (buf, '\r'))) {
+ *t = '\0';
+ buf_len = t - buf;
+ }
+ buf_off = newql;
+ if (buf[buf_off] == ' ')
+ buf_off++;
+
+ /* signature separator also flushes the previous paragraph */
+ if (strcmp(buf + buf_off, "-- ") == 0 && curline && *curline) {
+ print_flowed_line (curline, s, quotelevel);
+ *curline = '\0';
+ curline_len = 1;
+ }
+
+ curline = realloc (curline, curline_len + buf_len - buf_off);
+ strcpy (curline + curline_len - 1, buf + buf_off);
+ curline_len += buf_len - buf_off;
+
+ /* if this was a fixed line the paragraph is finished */
+ if (buf_len == 0 || buf[buf_len - 1] != ' ' || strcmp(buf + buf_off, "-- ") == 0) {
+ print_flowed_line (curline, s, quotelevel);
+ *curline = '\0';
+ curline_len = 1;
+ }
+