shithub: riscv

Download patch

ref: 77481acf057de580f5ef3a2378ebc92264867feb
parent: b932aaeafcb18deea79b4d19e84f527c5018141f
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;
+				}
 			}
 		}
 	}
--