From 2fd35e9bf8077c6a4d2b86d9b456711b18d5f332 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 21 Oct 2018 03:42:24 +0200 Subject: kbdfs: don't get confused by broken utf8 --- sys/src/cmd/aux/kbdfs/kbdfs.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/sys/src/cmd/aux/kbdfs/kbdfs.c b/sys/src/cmd/aux/kbdfs/kbdfs.c index b68e52250..6adbece2c 100644 --- a/sys/src/cmd/aux/kbdfs/kbdfs.c +++ b/sys/src/cmd/aux/kbdfs/kbdfs.c @@ -625,23 +625,29 @@ consproc(void *) p = buf; e = buf + sizeof(buf); while((n = read(consfd, p, e - p)) > 0){ - x = buf + n; - while(p < x && fullrune(p, x - p)){ + x = p + n; + p = buf; + while((n = x - p) > 0){ + if(!fullrune(p, n)){ + memmove(buf, p, n); + break; + } p += chartorune(&r, p); - if(r){ - if(r == 021 || r == 023) /* XON/XOFF */ - continue; - if(r == '\n' && cr){ - cr = 0; - continue; - } - if(cr = (r == '\r')) - r = '\n'; - send(runechan, &r); + if(r == 021 || r == 023) /* XON/XOFF */ + continue; + if(r == 0 || r == Runeerror){ + cr = 0; + continue; } + if(r == '\n' && cr){ + cr = 0; + continue; + } + if(cr = (r == '\r')) + r = '\n'; + send(runechan, &r); } - n = x - p; - memmove(buf, p, n); + if(n < 0) n = 0; p = buf + n; } -- cgit v1.2.3