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

This commit is contained in:
BurnZeZ 2020-03-20 18:08:34 +00:00
parent 37b86df09f
commit aa5e86a8ca

View file

@ -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);
}