Browse Source

Plan 9 from Bell Labs 2005-11-13

David du Colombier 18 years ago
parent
commit
898ebe0670
5 changed files with 60 additions and 67 deletions
  1. 5 6
      dist/replica/_plan9.db
  2. 4 4
      dist/replica/plan9.db
  3. 4 0
      dist/replica/plan9.log
  4. 17 15
      sys/src/cmd/ip/ping.c
  5. 30 42
      sys/src/cmd/vnc/devcons.c

+ 5 - 6
dist/replica/_plan9.db

@@ -148,7 +148,7 @@
 386/bin/aux/tr2post - 775 sys sys 1104121987 176578
 386/bin/aux/trampoline - 775 sys sys 1130594716 83677
 386/bin/aux/typepasswd - 775 sys sys 1130594716 69535
-386/bin/aux/vga - 775 sys sys 1131742008 333745
+386/bin/aux/vga - 775 sys sys 1131768547 333745
 386/bin/aux/vmmousepoll - 775 sys sys 1032480572 41434
 386/bin/aux/vmware - 775 sys sys 1049428256 453
 386/bin/aux/vmwarefs - 775 sys sys 1095563640 99117
@@ -297,7 +297,7 @@
 386/bin/ip/httpfile - 775 sys sys 1131163702 278386
 386/bin/ip/imap4d - 775 sys sys 1130991193 237645
 386/bin/ip/ipconfig - 775 sys sys 1130594754 137774
-386/bin/ip/ping - 775 sys sys 1130594754 77042
+386/bin/ip/ping - 775 sys sys 1131814950 76630
 386/bin/ip/ppp - 775 sys sys 1130594755 219988
 386/bin/ip/pppoe - 775 sys sys 1130594755 77580
 386/bin/ip/pptp - 775 sys sys 1130594755 126690
@@ -497,7 +497,7 @@
 386/bin/venti/verifyarena - 775 sys sys 1130594812 104009
 386/bin/venti/wrarena - 775 sys sys 1130594812 175914
 386/bin/venti/write - 775 sys sys 1130594812 102531
-386/bin/vncs - 775 sys sys 1130594813 472457
+386/bin/vncs - 775 sys sys 1131814951 472300
 386/bin/vncv - 775 sys sys 1131646651 519358
 386/bin/vt - 775 sys sys 1131646652 173951
 386/bin/vtdump - 775 sys sys 1130594815 159490
@@ -11979,7 +11979,7 @@ sys/src/cmd/ip/imap4d/utils.c - 664 sys sys 1015013077 2481
 sys/src/cmd/ip/ipconfig.c - 664 sys sys 1126103921 34865
 sys/src/cmd/ip/measure.c - 664 sys sys 944961011 3733
 sys/src/cmd/ip/mkfile - 664 sys sys 1131110598 1243
-sys/src/cmd/ip/ping.c - 664 sys sys 1084471009 5651
+sys/src/cmd/ip/ping.c - 664 sys sys 1131802956 5708
 sys/src/cmd/ip/ppp - 20000000775 sys sys 988249980 0
 sys/src/cmd/ip/ppp/block.c - 664 sys sys 1015090266 5353
 sys/src/cmd/ip/ppp/compress.c - 664 sys sys 1072729513 11774
@@ -13592,7 +13592,7 @@ sys/src/cmd/vnc/color.c - 664 sys sys 1044880749 3088
 sys/src/cmd/vnc/compat.c - 664 sys sys 1044880749 3122
 sys/src/cmd/vnc/compat.h - 664 sys sys 1047512521 3425
 sys/src/cmd/vnc/dev.c - 664 sys sys 1044880749 5496
-sys/src/cmd/vnc/devcons.c - 664 sys sys 1045758532 6978
+sys/src/cmd/vnc/devcons.c - 664 sys sys 1131801747 6806
 sys/src/cmd/vnc/devdraw.c - 664 sys sys 1044880749 42068
 sys/src/cmd/vnc/devmouse.c - 664 sys sys 1091816253 7389
 sys/src/cmd/vnc/draw.c - 664 sys sys 1044880749 6974
@@ -14973,4 +14973,3 @@ usr/glenda/lib/profile - 664 glenda glenda 1105128663 890
 usr/glenda/readme.acme - 664 glenda glenda 1019860628 4753
 usr/glenda/readme.rio - 664 glenda glenda 1019860628 6370
 usr/glenda/tmp - 20000000775 glenda glenda 1018802620 0
-386/bin/aux/vga - 775 sys sys 1131768547 333745

+ 4 - 4
dist/replica/plan9.db

@@ -297,7 +297,7 @@
 386/bin/ip/httpfile - 775 sys sys 1131163702 278386
 386/bin/ip/imap4d - 775 sys sys 1130991193 237645
 386/bin/ip/ipconfig - 775 sys sys 1130594754 137774
-386/bin/ip/ping - 775 sys sys 1130594754 77042
+386/bin/ip/ping - 775 sys sys 1131814950 76630
 386/bin/ip/ppp - 775 sys sys 1130594755 219988
 386/bin/ip/pppoe - 775 sys sys 1130594755 77580
 386/bin/ip/pptp - 775 sys sys 1130594755 126690
@@ -497,7 +497,7 @@
 386/bin/venti/verifyarena - 775 sys sys 1130594812 104009
 386/bin/venti/wrarena - 775 sys sys 1130594812 175914
 386/bin/venti/write - 775 sys sys 1130594812 102531
-386/bin/vncs - 775 sys sys 1130594813 472457
+386/bin/vncs - 775 sys sys 1131814951 472300
 386/bin/vncv - 775 sys sys 1131646651 519358
 386/bin/vt - 775 sys sys 1131646652 173951
 386/bin/vtdump - 775 sys sys 1130594815 159490
@@ -11979,7 +11979,7 @@ sys/src/cmd/ip/imap4d/utils.c - 664 sys sys 1015013077 2481
 sys/src/cmd/ip/ipconfig.c - 664 sys sys 1126103921 34865
 sys/src/cmd/ip/measure.c - 664 sys sys 944961011 3733
 sys/src/cmd/ip/mkfile - 664 sys sys 1131110598 1243
-sys/src/cmd/ip/ping.c - 664 sys sys 1084471009 5651
+sys/src/cmd/ip/ping.c - 664 sys sys 1131802956 5708
 sys/src/cmd/ip/ppp - 20000000775 sys sys 988249980 0
 sys/src/cmd/ip/ppp/block.c - 664 sys sys 1015090266 5353
 sys/src/cmd/ip/ppp/compress.c - 664 sys sys 1072729513 11774
@@ -13592,7 +13592,7 @@ sys/src/cmd/vnc/color.c - 664 sys sys 1044880749 3088
 sys/src/cmd/vnc/compat.c - 664 sys sys 1044880749 3122
 sys/src/cmd/vnc/compat.h - 664 sys sys 1047512521 3425
 sys/src/cmd/vnc/dev.c - 664 sys sys 1044880749 5496
-sys/src/cmd/vnc/devcons.c - 664 sys sys 1045758532 6978
+sys/src/cmd/vnc/devcons.c - 664 sys sys 1131801747 6806
 sys/src/cmd/vnc/devdraw.c - 664 sys sys 1044880749 42068
 sys/src/cmd/vnc/devmouse.c - 664 sys sys 1091816253 7389
 sys/src/cmd/vnc/draw.c - 664 sys sys 1044880749 6974

+ 4 - 0
dist/replica/plan9.log

@@ -22957,3 +22957,7 @@
 1131742875 0 c 386/bin/aux/vga - 775 sys sys 1131742008 333745
 1131742875 1 c sys/src/cmd/aux/vga/main.c - 664 sys sys 1131741978 9725
 1131769881 0 c 386/bin/aux/vga - 775 sys sys 1131768547 333745
+1131802289 0 c sys/src/cmd/vnc/devcons.c - 664 sys sys 1131801747 6806
+1131804089 0 c sys/src/cmd/ip/ping.c - 664 sys sys 1131802956 5708
+1131816692 0 c 386/bin/vncs - 775 sys sys 1131814951 472300
+1131816692 1 c 386/bin/ip/ping - 775 sys sys 1131814950 76630

+ 17 - 15
sys/src/cmd/ip/ping.c

@@ -81,6 +81,8 @@ catch(void *a, char *msg)
 	USED(a);
 	if(strstr(msg, "alarm"))
 		noted(NCONT);
+	else if(strstr(msg, "die"))
+		exits("errors");
 	else
 		noted(NDFLT);
 }
@@ -94,7 +96,7 @@ clean(ushort seq, vlong now, Icmp *ip)
 	for(l = &first; *l; ){
 		r = *l;
 
-		if(r->seq == seq){
+		if(ip && r->seq == seq){
 			r->rtt = now-r->time;
 			r->ttl = ip->ttl;
 			reply(r, ip);
@@ -103,7 +105,8 @@ clean(ushort seq, vlong now, Icmp *ip)
 		if(now-r->time > MINUTE){
 			*l = r->next;
 			r->rtt = now-r->time;
-			r->ttl = ip->ttl;
+			if(ip)
+				r->ttl = ip->ttl;
 			if(r->replied == 0)
 				lost(r, ip);
 			free(r);
@@ -177,14 +180,15 @@ rcvr(int fd, int msglen, int interval, int nmsg, int senderpid)
 	ip = (Icmp*)buf;
 	sum = 0;
 
-	while(!done || first != nil){
+	while(lostmsgs+rcvdmsgs < nmsg){
 		alarm((nmsg-lostmsgs-rcvdmsgs)*interval+5000);
 		n = read(fd, buf, sizeof(buf));
 		alarm(0);
 		now = nsec();
-		if(n <= 0){
-			print("read: %r\n");
-			break;
+		if(n <= 0){	/* read interrupted - time to go */
+fprint(2, "clean\n");
+			clean(0, now+MINUTE, nil);
+			continue;
 		}
 		if(n < msglen){
 			print("bad len %d/%d\n", n, msglen);
@@ -213,7 +217,6 @@ rcvr(int fd, int msglen, int interval, int nmsg, int senderpid)
 
 	if(lostmsgs)
 		print("%d out of %d messages lost\n", lostmsgs, lostmsgs+rcvdmsgs);
-	postnote(PNPROC, senderpid, "die");
 }
 
 void
@@ -229,6 +232,7 @@ main(int argc, char **argv)
 	int fd;
 	int msglen, interval, nmsg;
 	int pid;
+	char err[ERRMAX];
 
 	nsec();		/* make sure time file is already open */
 
@@ -299,9 +303,10 @@ main(int argc, char **argv)
 void
 reply(Req *r, Icmp *ip)
 {
-	rcvdmsgs++;
 	r->rtt /= 1000LL;
 	sum += r->rtt;
+	if(!r->replied)
+		rcvdmsgs++;
 	if(!quiet && !lostonly){
 		if(addresses)
 			print("%ud: %V->%V rtt %lld µs, avg rtt %lld µs, ttl = %d\n",
@@ -321,14 +326,11 @@ lost(Req *r, Icmp *ip)
 {
 	if(!quiet){
 		if(addresses)
-			print("lost %ud: %V->%V avg rtt %lld µs\n",
-				r->seq-firstseq,
-				ip->src, ip->dst,
-				sum/rcvdmsgs);
+			print("lost %ud: %V->%V\n", r->seq-firstseq,
+				ip->src, ip->dst);
 		else
-			print("lost %ud: avg rtt %lld µs\n",
-				r->seq-firstseq,
-				sum/rcvdmsgs);
+			print("lost %ud\n", r->seq-firstseq);
 	}
 	lostmsgs++;
 }
+

+ 30 - 42
sys/src/cmd/vnc/devcons.c

@@ -230,7 +230,7 @@ consopen(Chan *c, int omode)
 		qunlock(&kbd);
 		break;
 	case Qsnarf:
-		if(c->mode == OWRITE || c->mode == ORDWR)
+		if((c->mode&3) == OWRITE || (c->mode&3) == ORDWR)
 			c->aux = smalloc(sizeof(Snarf));
 		break;
 	}
@@ -289,8 +289,9 @@ consclose(Chan *c)
 static long
 consread(Chan *c, void *buf, long n, vlong off)
 {
-	char *cbuf;
-	int i, ch, eol;
+	char *cbuf, ch;
+	int i, eol;
+	int	send;
 
 	if(n <= 0)
 		return n;
@@ -315,48 +316,40 @@ consread(Chan *c, void *buf, long n, vlong off)
 			qunlock(&kbd);
 			nexterror();
 		}
-		if(kbd.raw){
-			cbuf = buf;
-			if(qcanread(lineq))
-				n = qread(lineq, buf, n);
-			else {
-				/* read as much as possible */
-				do {
-					i = qread(kbdq, cbuf, n);
-					cbuf += i;
-					n -= i;
-				} while (n>0 && qcanread(kbdq));
-				n = cbuf - (char*)buf;
-			}
-		} else {
-			while(!qcanread(lineq)){
-				qread(kbdq, &kbd.line[kbd.x], 1);
-				ch = kbd.line[kbd.x];
-				eol = 0;
+		while(!qcanread(lineq)){
+			qread(kbdq, &ch, 1);
+			send = 0;
+			if(ch == 0){
+				/* flush output on rawoff -> rawon */
+				if(kbd.x > 0)
+					send = !qcanread(kbdq);
+			}else if(kbd.raw){
+				kbd.line[kbd.x++] = ch;
+				send = !qcanread(kbdq);
+			}else{
 				switch(ch){
 				case '\b':
-					if(kbd.x)
+					if(kbd.x > 0)
 						kbd.x--;
 					break;
-				case 0x15:
+				case 0x15:	/* ^U */
 					kbd.x = 0;
 					break;
 				case '\n':
-				case 0x04:
-					eol = 1;
+				case 0x04:	/* ^D */
+					send = 1;
 				default:
-					kbd.line[kbd.x++] = ch;
+					if(ch != 0x04)
+						kbd.line[kbd.x++] = ch;
 					break;
 				}
-				if(kbd.x == sizeof(kbd.line) || eol){
-					if(ch == 0x04)
-						kbd.x--;
-					qwrite(lineq, kbd.line, kbd.x);
-					kbd.x = 0;
-				}
 			}
-			n = qread(lineq, buf, n);
+			if(send || kbd.x == sizeof kbd.line){
+				qwrite(lineq, kbd.line, kbd.x);
+				kbd.x = 0;
+			}
 		}
+		n = qread(lineq, buf, n);
 		qunlock(&kbd);
 		poperror();
 		return n;
@@ -373,6 +366,7 @@ conswrite(Chan *c, void *va, long n, vlong)
 {
 	Snarf *t;
 	char buf[256], *a;
+	char ch;
 
 	switch((ulong)c->qid.path){
 	case Qcons:
@@ -386,18 +380,12 @@ conswrite(Chan *c, void *va, long n, vlong)
 		buf[n] = 0;
 		for(a = buf; a;){
 			if(strncmp(a, "rawon", 5) == 0){
-				qlock(&kbd);
-				if(kbd.x){
-					qwrite(kbdq, kbd.line, kbd.x);
-					kbd.x = 0;
-				}
 				kbd.raw = 1;
-				qunlock(&kbd);
+				/* clumsy hack - wake up reader */
+				ch = 0;
+				qwrite(kbdq, &ch, 1);			
 			} else if(strncmp(a, "rawoff", 6) == 0){
-				qlock(&kbd);
 				kbd.raw = 0;
-				kbd.x = 0;
-				qunlock(&kbd);
 			}
 			if(a = strchr(a, ' '))
 				a++;