ref: 3a11d0aedad1182dc8247aef3cf1f27ff5b5473b
parent: 65d772993cf7b1aca3c0516420c2bf83af3ef3fa
	author: cinap_lenrek <cinap_lenrek@felloff.net>
	date: Sat Oct 20 23:42:24 EDT 2018
	
kbdfs: don't get confused by broken utf8
--- a/sys/src/cmd/aux/kbdfs/kbdfs.c
+++ b/sys/src/cmd/aux/kbdfs/kbdfs.c
@@ -625,23 +625,29 @@
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;
}
--
⑨