From aa5e86a8caba5ede5626d09c5cb0997530920e57 Mon Sep 17 00:00:00 2001 From: BurnZeZ Date: Fri, 20 Mar 2020 18:08:34 +0000 Subject: [PATCH] kbdfs: fix kbmapread() not accounting for reads smaller than the size of the line --- sys/src/cmd/aux/kbdfs/kbdfs.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/sys/src/cmd/aux/kbdfs/kbdfs.c b/sys/src/cmd/aux/kbdfs/kbdfs.c index aa7e72050..172c91258 100644 --- a/sys/src/cmd/aux/kbdfs/kbdfs.c +++ b/sys/src/cmd/aux/kbdfs/kbdfs.c @@ -1091,21 +1091,22 @@ void 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); }