ref: 0dff9fc6e6ec1032360a29d8e7486876ba17a3ff
parent: de9a2c9aa2cf16c4bdca9a780f6c6ea2807301bb
author: cinap_lenrek <cinap_lenrek@centraldogma>
date: Tue Jun 7 00:35:23 EDT 2011
kbdfs: fix queue bug
--- a/sys/src/cmd/aux/kbdfs/kbdfs.c
+++ b/sys/src/cmd/aux/kbdfs/kbdfs.c
@@ -653,29 +653,29 @@
if(0){case ASTR:
p = s;
- } else if(s == nil)
- continue;
- if((r = q) == nil)
- continue;
- if((q = q->aux) == nil)
- qq = &q;
+ }
- e = s + strlen(s);
- if(p == s && r->fid->qid.path == Qkbd)
- e++; /* send terminating \0 if its kbd file */
+ while(s && q){+ r = q;
+ if((q = q->aux) == nil)
+ qq = &q;
- n = e - p;
- if(n > r->ifcall.count)
- n = r->ifcall.count;
+ e = s + strlen(s);
+ if(p == s && r->fid->qid.path == Qkbd)
+ e++; /* send terminating \0 if its kbd file */
+ n = e - p;
+ if(n > r->ifcall.count)
+ n = r->ifcall.count;
- r->ofcall.count = n;
- memmove(r->ofcall.data, p, n);
- respond(r, nil);
+ r->ofcall.count = n;
+ memmove(r->ofcall.data, p, n);
+ respond(r, nil);
- p += n;
- if(p >= e){- free(s);
- s = nil;
+ p += n;
+ if(p >= e){+ free(s);
+ s = nil;
+ }
}
}
}
--
⑨