shithub: riscv

Download patch

ref: aa5e86a8caba5ede5626d09c5cb0997530920e57
parent: 37b86df09ff381bcc4f60802d43e57bd9bfcac73
author: BurnZeZ <devnull@localhost>
date: Fri Mar 20 14:08:34 EDT 2020

kbdfs: fix kbmapread() not accounting for reads smaller than the size of the line

--- a/sys/src/cmd/aux/kbdfs/kbdfs.c
+++ b/sys/src/cmd/aux/kbdfs/kbdfs.c
@@ -1091,21 +1091,22 @@
 kbmapread(Req *req)
 {
 	char tmp[3*12+1];
-	int t, sc, off, n;
+	int t, sc, soff, off, n;
 	Rune *rp;
 
 	off = req->ifcall.offset/(sizeof(tmp)-1);
+	soff = req->ifcall.offset%(sizeof(tmp)-1);
 	t = off/Nscan;
 	sc = off%Nscan;
-	if(rp = kbmapent(t, sc))
+	if(rp = kbmapent(t, sc)){
 		sprint(tmp, "%11d %11d %11d\n", t, sc, *rp);
-	else
-		*tmp = 0;
-	n = strlen(tmp);
-	if(req->ifcall.count < n)
-		n = req->ifcall.count;
-	req->ofcall.count = n;
-	memmove(req->ofcall.data, tmp, n);
+		n = strlen(&tmp[soff]);
+		if(req->ifcall.count < n)
+			n = req->ifcall.count;
+		req->ofcall.count = n;
+		memmove(req->ofcall.data, &tmp[soff], n);
+	}else
+		req->ofcall.count = 0;
 	respond(req, nil);
 }