From bc914e9e915eab8b70978773373cc39d2d618191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sat, 5 Mar 2016 23:43:11 +0000 Subject: [PATCH] fix lines that terminate on EOF --- os/readutil.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/os/readutil.c b/os/readutil.c index 897d2b443..5933628cf 100644 --- a/os/readutil.c +++ b/os/readutil.c @@ -62,12 +62,16 @@ static Int rl_to_codes(Term TEnd, int do_as_binary, int arity USES_REGS) { unsigned char *pt = buf; do { ch = st->stream_wgetc_for_read(sno); - if (ch < 127) + if (ch < 127) { *pt++ = ch; - else - pt += get_utf8(pt, 4, &ch); - if (pt + 4 == buf + buf_sz) - break; + if (ch < 0) { + ch = '\n'; + pt[-1] = '\n'; + } else + pt += get_utf8(pt, 4, &ch); + if (pt + 4 == buf + buf_sz) + break; + } } while (ch != '\n'); sz = pt - buf; } @@ -150,10 +154,15 @@ static Int read_line_to_string(USES_REGS1) { unsigned char *pt = buf; do { ch = st->stream_wgetc_for_read(sno); - if (ch < 127) - *pt++ = ch; - else + if (ch < 127) { + if (ch < 0) { + ch = '\n'; + pt[-1] = '\n'; + } else + *pt++ = ch; + } else { pt += put_utf8(pt, ch); + } if (pt + 4 == buf + buf_sz) break; } while (ch != '\n');