- safe_write(err, buf, brk);
- if (brk < len) {
- memmove(buf + 8, buf + brk, len - brk);
- len = len - brk + 8;
- } else
- break;
- }
+
+ /*
+ * Let's insert a suffix to clear the end
+ * of the screen line if a line break was
+ * found. Also, if we don't skip the
+ * prefix, then a non-empty string must be
+ * present too.
+ */
+ if (brk > (skip_pf ? 0 : (pf+1 + 1))) {
+ char save[FIX_SIZE];
+ memcpy(save, b + brk, sf);
+ b[brk + sf - 1] = b[brk - 1];
+ memcpy(b + brk - 1, suffix, sf);
+ safe_write(err, b, brk + sf);
+ memcpy(b + brk, save, sf);
+ len -= brk;
+ } else {
+ int l = brk ? brk : len;
+ safe_write(err, b, l);
+ len -= l;
+ }
+
+ skip_pf = !brk;
+ memmove(buf + pf+1, b + brk, len);
+ } while (len);