git: 9front

Download patch

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;
+				}
 			}
 		}
 	}
--