]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/cmd/aux/kbdfs/kbdfs.c
kbdfs: fix kbmapread() not accounting for reads smaller than the size of the line
[plan9front.git] / sys / src / cmd / aux / kbdfs / kbdfs.c
index aa7e72050f6d38e5ce64d6674f6cf385510c0c46..172c91258b9830e7402e6a375b6e6f62cceee219 100644 (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);
 }