patch 8.0.1372: profile log may be truncated halfway a character
Problem: Profile log may be truncated halfway a character.
Solution: Find the start of the character. (Ozaki Kiichi, closes #2385)
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index e2416057..7b00ac2 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -1834,6 +1834,26 @@
{
if (vim_fgets(IObuff, IOSIZE, sfd))
break;
+ /* When a line has been truncated, append NL, taking care
+ * of multi-byte characters . */
+ if (IObuff[IOSIZE - 2] != NUL && IObuff[IOSIZE - 2] != NL)
+ {
+ int n = IOSIZE - 2;
+# ifdef FEAT_MBYTE
+ if (enc_utf8)
+ {
+ /* Move to the first byte of this char.
+ * utf_head_off() doesn't work, because it checks
+ * for a truncated character. */
+ while (n > 0 && (IObuff[n] & 0xc0) == 0x80)
+ --n;
+ }
+ else if (has_mbyte)
+ n -= mb_head_off(IObuff, IObuff + n);
+# endif
+ IObuff[n] = NL;
+ IObuff[n + 1] = NUL;
+ }
if (i < si->sn_prl_ga.ga_len
&& (pp = &PRL_ITEM(si, i))->snp_count > 0)
{