shithub: riscv

Download patch

ref: 2de164c51dc3330859c160b80440e1363fb5b566
parent: 5d7e9bee3ce75cce5727c0283a192b344800cc07
author: Ori Bernstein <ori@eigenstate.org>
date: Sat Apr 25 06:43:39 EDT 2020

fix typos in time calculation

the results of the time calculation were garbled -- and
apparently negative on my system when testing, so the
test passed when it shouldn't have.

--- a/sys/src/cmd/6c/txt.c
+++ b/sys/src/cmd/6c/txt.c
@@ -363,6 +363,7 @@
 			if(reg[i] == 0 && !resvreg[i])
 				goto out;
 		diag(tn, "out of float registers");
+		abort();
 		goto out;
 	}
 	diag(tn, "unknown type in regalloc: %T", tn->type);
--- a/sys/src/cmd/aux/getflags.c
+++ b/sys/src/cmd/aux/getflags.c
@@ -26,9 +26,13 @@
 char*
 argname(char *p)
 {
+	char *s;
 	Rune r;
 	int n;
 
+	s = p;
+	if(*p == ' ')
+		p++;
 	while(1){
 		n = chartorune(&r, p);
 		if(!isalpharune(r) && !isdigitrune(r))
@@ -35,6 +39,8 @@
 			break;
 		p += n;
 	}
+	if(*s == ' ')
+		return s;
 	return p;
 }
 
--- a/sys/src/cmd/cpp/macro.c
+++ b/sys/src/cmd/cpp/macro.c
@@ -350,7 +350,7 @@
 void
 substargs(Nlist *np, Tokenrow *rtr, Tokenrow **atr)
 {
-	Tokenrow ttr;
+	Tokenrow ttr, rp, rn;
 	Token *tp, *ap, *an, *pp, *pn;
 	int ntok, argno, hs;
 
@@ -369,19 +369,25 @@
 			insertrow(rtr, ntok, stringify(atr[argno]));
 		} else if (ispaste(rtr, &ap, &an, &ntok)) { /* first token, just do the next one */
 			pp = ap;
+			rp.tp = nil;
 			pn = an;
+			rn.tp = nil;
 			if (ap && (argno = lookuparg(np, ap)) >= 0){
 				pp = nil;
-				if(atr[argno]->tp != atr[argno]->lp)
-					pp = atr[argno]->lp - 1;
+				rp = *atr[argno];
+				if(rp.tp != rp.lp)
+					pp = --rp.lp;
 			}
 			if (an && (argno = lookuparg(np, an)) >= 0) {
 				pn = nil;
-				if(atr[argno]->tp != atr[argno]->lp)
-					pn = atr[argno]->lp - 1;
+				rn = *atr[argno];
+				if(rn.tp != rn.lp)
+					pn = rn.bp++;
 			}
 			glue(&ttr, pp, pn);
+			insertrow(rtr, 0, &rp);
 			insertrow(rtr, ntok, &ttr);
+			insertrow(rtr, 0, &rn);
 			free(ttr.bp);
 		} else if (rtr->tp->type==NAME) {
 			if((argno = lookuparg(np, rtr->tp)) >= 0) {
--- a/sys/src/cmd/cpp/test.c
+++ b/sys/src/cmd/cpp/test.c
@@ -21,6 +21,9 @@
 #define FOO	CAT(BAR, 3)
 FOO
 
+/* Expected: a bc d */
+CAT(a b, c d)
+
 /*
  * CURRENTLY BROKEN:
  *     __VA_ARGS__ requires at least one item.
@@ -58,4 +61,4 @@
  *     It should treat no args as a single empty arg list.
 p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) };
 char c[2][6] = { str(hello), str() };
-*/
\ No newline at end of file
+*/
--- a/sys/src/cmd/dossrv/dosfs.c
+++ b/sys/src/cmd/dossrv/dosfs.c
@@ -550,7 +550,7 @@
 /*
  * wipe out a dos directory entry
  */
-static void
+static int
 doremove(Xfs *xf, Dosptr *dp)
 {
 	Iosect *p;
@@ -565,6 +565,8 @@
 	}
 	if(prevdo < 0 && dp->prevaddr != -1){
 		p = getsect(xf, dp->prevaddr);
+		if(p == nil)
+			return -1;
 		for(prevdo = ((Dosbpb*)xf->ptr)->sectsize-DOSDIRSIZE; prevdo >= 0; prevdo -= DOSDIRSIZE){
 			if(p->iobuf[prevdo+11] != 0xf)
 				break;
@@ -572,7 +574,8 @@
 			p->flags |= BMOD;
 		}
 		putsect(p);
-	}		
+	}
+	return 0;		
 }
 
 void
@@ -601,8 +604,7 @@
 	 * or it's a read only file in the root directory
 	 */
 	parp = getsect(f->xf, dp->paddr);
-	if(parp == nil
-	|| getfile(f) < 0){
+	if(parp == nil || getfile(f) < 0){
 		errno = Eio;
 		goto out;
 	}
@@ -617,7 +619,10 @@
 		errno = Eio;
 		goto out;
 	}
-	doremove(f->xf, f->ptr);
+	if(doremove(f->xf, f->ptr) == -1){
+		errno = Eio;
+		goto out;
+	}
 	if(!isroot(dp->paddr)){
 		puttime(pard, 0);
 		parp->flags |= BMOD;
--- a/sys/src/cmd/dossrv/dossubs.c
+++ b/sys/src/cmd/dossrv/dossubs.c
@@ -1000,6 +1000,8 @@
 			c = count;
 		if(c == bp->sectsize){
 			p = getosect(xf, addr);
+			if(p == nil)
+				return -1;
 			p->flags = 0;
 		}else{
 			p = getsect(xf, addr);
@@ -1632,7 +1634,8 @@
 			if(rp == nil)
 				return -1;
 			wp = getosect(xf, ws);
-			assert(wp != nil);
+			if(wp == nil)
+				return -1;
 			memmove(wp->iobuf, rp->iobuf, bp->sectsize);
 			wp->flags = BMOD;
 			putsect(rp);
@@ -1702,6 +1705,8 @@
 	k = clust2sect(bp, n);
 	for(i=0; i<bp->clustsize; i++){
 		p = getosect(xf, k+i);
+		if(p == nil)
+			return -1;
 		memset(p->iobuf, 0, bp->sectsize);
 		p->flags = BMOD;
 		putsect(p);
--- a/sys/src/cmd/dossrv/iotrack.c
+++ b/sys/src/cmd/dossrv/iotrack.c
@@ -39,8 +39,11 @@
 	int toff;
 	Iosect *p;
 
-	if(addr < 0)
+	if(addr < 0){
+		chat("invalid address\n");
+		errno = Eio;
 		return nil;
+	}
 	toff = addr % Sect2trk;
 	taddr = addr - toff;
 	t = getiotrack(xf, taddr);
@@ -53,8 +56,10 @@
 	}
 	t->ref++;
 	p = t->tp->p[toff];
-	if(p == 0){
+	if(p == nil){
 		p = newsect();
+		if(p == nil)
+			return nil;
 		t->tp->p[toff] = p;
 		p->flags = t->flags&BSTALE;
 		p->lock.key = 0;
@@ -196,10 +201,10 @@
 			t->flags &= ~BSTALE;
 	}
 	if(devwrite(t->xf, t->addr, t->tp->buf, Trksize) < 0){
-		chat("error]");
+		chat("error]\n");
 		return -1;
 	}
-	chat(" done]");
+	chat(" done]\n");
 	return 0;
 }
 
@@ -304,6 +309,8 @@
 	else
 		p = malloc(sizeof(Iosect));
 	unmlock(&freelock);
+	if(p == nil)
+		return nil;
 	p->next = 0;
 	return p;
 }
--- a/sys/src/cmd/plumb/plumb.c
+++ b/sys/src/cmd/plumb/plumb.c
@@ -35,29 +35,50 @@
 	}
 }
 
+int
+matchmsg(Plumbmsg *m, Plumbmsg *pat)
+{
+	Plumbattr *a;
+	char *v;
+
+	if(pat->src && strcmp(m->src, pat->src) != 0)
+		return 0;
+	if(pat->dst && strcmp(m->dst, pat->dst) != 0)
+		return 0;
+	if(pat->wdir && strcmp(m->wdir, pat->wdir) != 0)
+		return 0;
+	if(pat->type && strcmp(m->type, pat->type) != 0)
+		return 0;
+	for(a = m->attr; a != nil; a = a->next){
+		v = plumblookup(pat->attr, a->name);
+		if(v != nil && strcmp(a->value, v) != 0)
+			return 0;
+	}
+	return 1;
+}
+
 void
 main(int argc, char *argv[])
 {
-	char buf[1024], *p;
+	char buf[1024], *p, *readport;
 	int fd, i, input;
+	Plumbmsg *rmsg;
+	Plumbattr *a;
 
 	input = 0;
-	m.src = "plumb";
+	readport = nil;
+	m.src = nil;
 	m.dst = nil;
-	m.wdir = getwd(buf, sizeof buf);
+	m.wdir = nil;
 	m.type = "text";
 	m.attr = nil;
 	ARGBEGIN{
 	case 'a':
-		p = ARGF();
-		if(p == nil)
-			usage();
+		p = EARGF(usage());
 		m.attr = plumbaddattr(m.attr, plumbunpackattr(p));
 		break;
 	case 'd':
-		m.dst = ARGF();
-		if(m.dst == nil)
-			usage();
+		m.dst = EARGF(usage());
 		break;
 	case 'i':
 		input++;
@@ -64,30 +85,27 @@
 		break;
 	case 't':
 	case 'k':	/* for backwards compatibility */
-		m.type = ARGF();
-		if(m.type == nil)
-			usage();
+		m.type = EARGF(usage());
 		break;
 	case 'p':
-		plumbfile = ARGF();
-		if(plumbfile == nil)
-			usage();
+		plumbfile = EARGF(usage());
 		break;
 	case 's':
-		m.src = ARGF();
-		if(m.src == nil)
-			usage();
+		m.src = EARGF(usage());
 		break;
 	case 'w':
-		m.wdir = ARGF();
-		if(m.wdir == nil)
-			usage();
+		m.wdir = EARGF(usage());
 		break;
+	case 'r':
+		readport = EARGF(usage());
+		break;
 	}ARGEND
 
-	if((input && argc>0) || (!input && argc<1))
+	if((input && argc>0) || (!input && argc<1) && readport == nil)
 		usage();
-	if(plumbfile != nil)
+	if(readport != nil)
+		fd = plumbopen(readport, OREAD);
+	else if(plumbfile != nil)
 		fd = open(plumbfile, OWRITE);
 	else
 		fd = plumbopen("send", OWRITE);
@@ -95,6 +113,30 @@
 		fprint(2, "plumb: can't open plumb file: %r\n");
 		exits("open");
 	}
+	if(readport != nil){
+again:
+		rmsg = plumbrecv(fd);
+		if(rmsg == nil){
+			fprint(2, "plumb: receive failed: %r\n");
+			exits("recv");
+		}
+		print("got message, matching\n");
+		if(!matchmsg(rmsg, &m))
+			goto again;
+		print("src %s\n", rmsg->src);
+		print("dst %s\n", rmsg->dst);
+		print("wdir %s\n", rmsg->wdir);
+		print("type %s\n", rmsg->type);
+		print("data %.*s\n", rmsg->ndata, rmsg->data);
+		for(a = rmsg->attr; a; a = a->next)
+			print("attr %s=%s\n", a->name, a->value);
+		plumbfree(rmsg);
+		exits(nil);
+	}
+	if(m.src == nil)
+		m.src = "plumb";
+	if(m.wdir == nil)
+		m.wdir = getwd(buf, sizeof buf);
 	if(input){
 		gather();
 		if(plumblookup(m.attr, "action") == nil)
--- a/sys/src/cmd/samterm/flayer.c
+++ b/sys/src/cmd/samterm/flayer.c
@@ -258,7 +258,7 @@
 
 	if(l->visible!=All)
 		flupfront(l);
-	dt = l->click = mousep->msec;
+	dt = mousep->msec - l->click;
 	dx = abs(mousep->xy.x - clickpt.x);
 	dy = abs(mousep->xy.y - clickpt.y);
 
@@ -279,7 +279,6 @@
 {
 	ulong fp0, fp1;
 
-	l->click = 0;
 	if(l->visible==None || !flprepare(l)){
 		l->p0 = p0, l->p1 = p1;
 		return;