Browse Source

Plan 9 from Bell Labs 2005-01-06

David du Colombier 19 years ago
parent
commit
742ee919c3

+ 13 - 16
dist/replica/_plan9.db

@@ -20,7 +20,7 @@
 386/bin/9660srv - 775 sys sys 1104121955 103973
 386/bin/aan - 775 sys sys 1104121955 130710
 386/bin/acid - 775 sys sys 1104121956 355756
-386/bin/acme - 775 sys sys 1104562493 427186
+386/bin/acme - 775 sys sys 1104898008 427257
 386/bin/ape - 20000000775 sys sys 1016944144 0
 386/bin/ape/basename - 775 sys sys 1087442501 132681
 386/bin/ape/cc - 775 sys sys 1104121958 70291
@@ -220,14 +220,14 @@
 386/bin/ext2srv - 775 sys sys 1104122007 173894
 386/bin/faces - 775 sys sys 1104122008 192577
 386/bin/factor - 775 sys sys 1104122008 61475
-386/bin/file - 775 sys sys 1104122008 112358
+386/bin/file - 775 sys sys 1104898008 112418
 386/bin/fmt - 775 sys sys 1104122009 65301
 386/bin/fortune - 775 sys sys 1104122009 67136
 386/bin/fossil - 20000000775 sys sys 1042005470 0
 386/bin/fossil/conf - 775 sys sys 1085077052 1506
 386/bin/fossil/flchk - 775 sys sys 1104122009 237497
 386/bin/fossil/flfmt - 775 sys sys 1104122010 245646
-386/bin/fossil/fossil - 775 sys sys 1104122011 360312
+386/bin/fossil/fossil - 775 sys sys 1104898009 360361
 386/bin/fossil/last - 775 sys sys 1104122011 63298
 386/bin/freq - 775 sys sys 1104122011 61802
 386/bin/fs - 20000000775 sys sys 954380769 0
@@ -318,7 +318,7 @@
 386/bin/mtime - 775 sys sys 1104122036 59139
 386/bin/mv - 775 sys sys 1104122036 65521
 386/bin/ndb - 20000000775 sys sys 985743147 0
-386/bin/ndb/cs - 775 sys sys 1104122037 149190
+386/bin/ndb/cs - 775 sys sys 1104898009 149237
 386/bin/ndb/csquery - 775 sys sys 1104122037 61476
 386/bin/ndb/dns - 775 sys sys 1104122037 219930
 386/bin/ndb/dnsdebug - 775 sys sys 1104122038 194546
@@ -459,7 +459,7 @@
 386/bin/upas/vf - 775 sys sys 1104122077 92623
 386/bin/usb - 20000000775 sys sys 1019538890 0
 386/bin/usb/usbaudio - 775 sys sys 1104122078 185463
-386/bin/usb/usbd - 775 sys sys 1104122079 129846
+386/bin/usb/usbd - 775 sys sys 1104898010 129846
 386/bin/usb/usbmouse - 775 sys sys 1104122079 140245
 386/bin/usb/usbprinter - 775 sys sys 1089408719 222
 386/bin/vac - 775 sys sys 1104122079 169392
@@ -4661,7 +4661,7 @@ sys/man/1/bind - 664 sys sys 1034195345 3928
 sys/man/1/bitsyload - 664 sys sys 988225301 2883
 sys/man/1/bundle - 664 sys sys 944959672 986
 sys/man/1/cal - 664 sys sys 944959673 849
-sys/man/1/calendar - 664 sys sys 1032058542 1144
+sys/man/1/calendar - 664 sys sys 1104939769 1249
 sys/man/1/cat - 664 sys sys 1022048090 1335
 sys/man/1/cb - 664 sys sys 1063855627 896
 sys/man/1/chgrp - 664 sys sys 944959673 710
@@ -4673,7 +4673,7 @@ sys/man/1/comm - 664 sys sys 944959675 665
 sys/man/1/con - 664 sys sys 1071156278 4318
 sys/man/1/cp - 664 sys sys 1015024738 1390
 sys/man/1/cpp - 664 sys sys 944959674 2105
-sys/man/1/cpu - 664 sys sys 1099501544 3540
+sys/man/1/cpu - 664 sys sys 1104939775 3540
 sys/man/1/crop - 664 sys sys 984709627 2596
 sys/man/1/date - 664 sys sys 969499884 996
 sys/man/1/db - 664 sys sys 1015024738 17862
@@ -4990,7 +4990,7 @@ sys/man/4/cfs - 664 sys sys 1015024813 1758
 sys/man/4/consolefs - 664 sys sys 1069179473 3920
 sys/man/4/dossrv - 664 sys sys 1015024813 4176
 sys/man/4/execnet - 664 sys sys 1019866708 1069
-sys/man/4/exportfs - 664 sys sys 1100524176 4540
+sys/man/4/exportfs - 664 sys sys 1104939769 4540
 sys/man/4/ext2srv - 664 sys sys 1055692986 2409
 sys/man/4/factotum - 664 sys sys 1104430211 14454
 sys/man/4/fossil - 664 sys sys 1101668322 9564
@@ -7212,7 +7212,7 @@ sys/src/cmd/bzip2/lib/randtable.c - 664 sys sys 964847967 5473
 sys/src/cmd/bzip2/lib/unix.h - 664 sys sys 964847967 136
 sys/src/cmd/bzip2/mkfile - 664 sys sys 969510789 881
 sys/src/cmd/cal.c - 664 sys sys 944961619 4206
-sys/src/cmd/calendar.c - 664 sys sys 1034213625 3571
+sys/src/cmd/calendar.c - 664 sys sys 1104939757 4205
 sys/src/cmd/cat.c - 664 sys sys 1014926693 532
 sys/src/cmd/cb - 20000000775 sys sys 1062860425 0
 sys/src/cmd/cb/cb.c - 664 sys sys 1063039630 18439
@@ -7543,7 +7543,7 @@ sys/src/cmd/fossil/9excl.c - 664 sys sys 1042005502 1887
 sys/src/cmd/fossil/9fid.c - 664 sys sys 1045600016 5521
 sys/src/cmd/fossil/9fsys.c - 664 sys sys 1104858629 33296
 sys/src/cmd/fossil/9lstn.c - 664 sys sys 1042005503 2865
-sys/src/cmd/fossil/9p.c - 664 sys sys 1077896346 21766
+sys/src/cmd/fossil/9p.c - 664 sys sys 1104940048 21862
 sys/src/cmd/fossil/9ping.c - 664 sys sys 1042005503 1563
 sys/src/cmd/fossil/9proc.c - 664 sys sys 1079034426 14680
 sys/src/cmd/fossil/9srv.c - 664 sys sys 1077896346 3879
@@ -7573,7 +7573,7 @@ sys/src/cmd/fossil/flfmt9660.c - 664 sys sys 1080586883 12314
 sys/src/cmd/fossil/flfmt9660.h - 664 sys sys 1072830621 134
 sys/src/cmd/fossil/flproto - 664 sys sys 1042005508 210
 sys/src/cmd/fossil/fns.h - 664 sys sys 1087005596 3204
-sys/src/cmd/fossil/fossil-acid - 664 sys sys 1042005508 3965
+sys/src/cmd/fossil/fossil-acid - 664 sys sys 1104940044 3991
 sys/src/cmd/fossil/fossil.c - 664 sys sys 1077896345 2435
 sys/src/cmd/fossil/fs.c - 664 sys sys 1101213292 21545
 sys/src/cmd/fossil/fs.h - 664 sys sys 1091904424 1582
@@ -12449,8 +12449,5 @@ usr/glenda/lib/profile - 664 glenda glenda 1021580005 847
 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/acme - 775 sys sys 1104898008 427257
-386/bin/usb/usbd - 775 sys sys 1104898010 129846
-386/bin/file - 775 sys sys 1104898008 112418
-386/bin/fossil/fossil - 775 sys sys 1104898009 360361
-386/bin/ndb/cs - 775 sys sys 1104898009 149237
+386/bin/calendar - 775 sys sys 1104984451 79974
+386/bin/fossil/fossil - 775 sys sys 1104984451 360391

+ 8 - 8
dist/replica/plan9.db

@@ -166,7 +166,7 @@
 386/bin/bunzip2 - 775 sys sys 1104121992 97499
 386/bin/bzip2 - 775 sys sys 1104121992 114034
 386/bin/cal - 775 sys sys 1104121993 67886
-386/bin/calendar - 775 sys sys 1104121993 79335
+386/bin/calendar - 775 sys sys 1104984451 79974
 386/bin/cat - 775 sys sys 1104121993 37447
 386/bin/cb - 775 sys sys 1104121993 77519
 386/bin/cdfs - 775 sys sys 1104121994 161088
@@ -227,7 +227,7 @@
 386/bin/fossil/conf - 775 sys sys 1085077052 1506
 386/bin/fossil/flchk - 775 sys sys 1104122009 237497
 386/bin/fossil/flfmt - 775 sys sys 1104122010 245646
-386/bin/fossil/fossil - 775 sys sys 1104898009 360361
+386/bin/fossil/fossil - 775 sys sys 1104984451 360391
 386/bin/fossil/last - 775 sys sys 1104122011 63298
 386/bin/freq - 775 sys sys 1104122011 61802
 386/bin/fs - 20000000775 sys sys 954380769 0
@@ -4661,7 +4661,7 @@ sys/man/1/bind - 664 sys sys 1034195345 3928
 sys/man/1/bitsyload - 664 sys sys 988225301 2883
 sys/man/1/bundle - 664 sys sys 944959672 986
 sys/man/1/cal - 664 sys sys 944959673 849
-sys/man/1/calendar - 664 sys sys 1032058542 1144
+sys/man/1/calendar - 664 sys sys 1104939769 1249
 sys/man/1/cat - 664 sys sys 1022048090 1335
 sys/man/1/cb - 664 sys sys 1063855627 896
 sys/man/1/chgrp - 664 sys sys 944959673 710
@@ -4673,7 +4673,7 @@ sys/man/1/comm - 664 sys sys 944959675 665
 sys/man/1/con - 664 sys sys 1071156278 4318
 sys/man/1/cp - 664 sys sys 1015024738 1390
 sys/man/1/cpp - 664 sys sys 944959674 2105
-sys/man/1/cpu - 664 sys sys 1099501544 3540
+sys/man/1/cpu - 664 sys sys 1104939775 3540
 sys/man/1/crop - 664 sys sys 984709627 2596
 sys/man/1/date - 664 sys sys 969499884 996
 sys/man/1/db - 664 sys sys 1015024738 17862
@@ -4990,7 +4990,7 @@ sys/man/4/cfs - 664 sys sys 1015024813 1758
 sys/man/4/consolefs - 664 sys sys 1069179473 3920
 sys/man/4/dossrv - 664 sys sys 1015024813 4176
 sys/man/4/execnet - 664 sys sys 1019866708 1069
-sys/man/4/exportfs - 664 sys sys 1100524176 4540
+sys/man/4/exportfs - 664 sys sys 1104939769 4540
 sys/man/4/ext2srv - 664 sys sys 1055692986 2409
 sys/man/4/factotum - 664 sys sys 1104430211 14454
 sys/man/4/fossil - 664 sys sys 1101668322 9564
@@ -7212,7 +7212,7 @@ sys/src/cmd/bzip2/lib/randtable.c - 664 sys sys 964847967 5473
 sys/src/cmd/bzip2/lib/unix.h - 664 sys sys 964847967 136
 sys/src/cmd/bzip2/mkfile - 664 sys sys 969510789 881
 sys/src/cmd/cal.c - 664 sys sys 944961619 4206
-sys/src/cmd/calendar.c - 664 sys sys 1034213625 3571
+sys/src/cmd/calendar.c - 664 sys sys 1104939757 4205
 sys/src/cmd/cat.c - 664 sys sys 1014926693 532
 sys/src/cmd/cb - 20000000775 sys sys 1062860425 0
 sys/src/cmd/cb/cb.c - 664 sys sys 1063039630 18439
@@ -7543,7 +7543,7 @@ sys/src/cmd/fossil/9excl.c - 664 sys sys 1042005502 1887
 sys/src/cmd/fossil/9fid.c - 664 sys sys 1045600016 5521
 sys/src/cmd/fossil/9fsys.c - 664 sys sys 1104858629 33296
 sys/src/cmd/fossil/9lstn.c - 664 sys sys 1042005503 2865
-sys/src/cmd/fossil/9p.c - 664 sys sys 1077896346 21766
+sys/src/cmd/fossil/9p.c - 664 sys sys 1104940048 21862
 sys/src/cmd/fossil/9ping.c - 664 sys sys 1042005503 1563
 sys/src/cmd/fossil/9proc.c - 664 sys sys 1079034426 14680
 sys/src/cmd/fossil/9srv.c - 664 sys sys 1077896346 3879
@@ -7573,7 +7573,7 @@ sys/src/cmd/fossil/flfmt9660.c - 664 sys sys 1080586883 12314
 sys/src/cmd/fossil/flfmt9660.h - 664 sys sys 1072830621 134
 sys/src/cmd/fossil/flproto - 664 sys sys 1042005508 210
 sys/src/cmd/fossil/fns.h - 664 sys sys 1087005596 3204
-sys/src/cmd/fossil/fossil-acid - 664 sys sys 1042005508 3965
+sys/src/cmd/fossil/fossil-acid - 664 sys sys 1104940044 3991
 sys/src/cmd/fossil/fossil.c - 664 sys sys 1077896345 2435
 sys/src/cmd/fossil/fs.c - 664 sys sys 1101213292 21545
 sys/src/cmd/fossil/fs.h - 664 sys sys 1091904424 1582

+ 8 - 0
dist/replica/plan9.log

@@ -18272,3 +18272,11 @@
 1104899532 2 c 386/bin/file - 775 sys sys 1104898008 112418
 1104899532 3 c 386/bin/fossil/fossil - 775 sys sys 1104898009 360361
 1104899532 4 c 386/bin/ndb/cs - 775 sys sys 1104898009 149237
+1104940940 0 c sys/man/1/cpu - 664 sys sys 1104939775 3540
+1104940940 1 c sys/man/1/calendar - 664 sys sys 1104939769 1249
+1104940940 2 c sys/man/4/exportfs - 664 sys sys 1104939769 4540
+1104940940 3 c sys/src/cmd/calendar.c - 664 sys sys 1104939757 4205
+1104940940 4 c sys/src/cmd/fossil/9p.c - 664 sys sys 1104940048 21862
+1104940940 5 c sys/src/cmd/fossil/fossil-acid - 664 sys sys 1104940044 3991
+1104985950 0 c 386/bin/calendar - 775 sys sys 1104984451 79974
+1104985950 1 c 386/bin/fossil/fossil - 775 sys sys 1104984451 360391

+ 4 - 0
sys/man/1/calendar

@@ -25,6 +25,10 @@ Examples of recognized date formats are
 "11 April",
 and
 "11 Apr".
+A special form may be used to represent weekly and
+monthly events:
+"Every Tuesday"
+"The third Wednesday"
 All comparisons are case insensitive.
 .PP
 If the

+ 2 - 2
sys/man/1/cpu

@@ -84,7 +84,7 @@ If a
 argument is present, the
 .I patternfile
 is passed to
-.IR exportfs (1)
+.IR exportfs (4)
 to control how much of the local name space will be exported to
 the remote system.
 .PP
@@ -170,7 +170,7 @@ are bound to their standard locations from there.
 .SH SEE ALSO
 .IR rc (1) ,
 .IR rio (1) ,
-.IR exportfs (1)
+.IR exportfs (4)
 .SH BUGS
 Binds and mounts done after the terminal
 .B lib/profile

+ 1 - 1
sys/man/4/exportfs

@@ -244,6 +244,6 @@ aux/nfsserver -f /srv/nfs.boot
 .br
 .B /sys/src/cmd/srvfs.c
 .SH SEE ALSO
-.IR aan (1),
+.IR aan (8),
 .IR import (4),
 .IR exportfs (4)

+ 64 - 30
sys/src/cmd/calendar.c

@@ -14,12 +14,13 @@ enum{
 	Secondsperday = 24*60*60
 };
 
+Date *Base = nil;
 Biobuf in;
 int debug, matchyear;
 
-Date *dates(Date**, Tm*);
+void dates(Tm*);
 void upper2lower(char*, char*, int);
-void *alloc(unsigned int);
+void *emalloc(unsigned int);
 
 void
 main(int argc, char *argv[])
@@ -28,7 +29,7 @@ main(int argc, char *argv[])
 	long now;
 	char *line;
 	Tm *tm;
-	Date *first, *last, *d;
+	Date *d;
 	char buf[1024];
 
 	ahead = 0;
@@ -50,26 +51,25 @@ main(int argc, char *argv[])
 	/* make a list of dates */
 	now = time(0);
 	tm = localtime(now);
-	last = nil;
-	first = dates(&last, tm);
+	dates(tm);
 	now += Secondsperday;
 	tm = localtime(now);
-	dates(&last, tm);
+	dates(tm);
 	if(tm->wday == 6){
 		now += Secondsperday;
 		tm = localtime(now);
-		dates(&last, tm);
+		dates(tm);
 	}
 	if(tm->wday == 0){
 		now += Secondsperday;
 		tm = localtime(now);
-		dates(&last, tm);
+		dates(tm);
 	}
 	if(ahead){
 		now = time(0);
 		now += ahead * Secondsperday;
 		tm = localtime(now);
-		dates(&last, tm);
+		dates(tm);
 	}
 
 	for(i=0; i<argc || (i==0 && argc==0); i++){
@@ -88,7 +88,7 @@ main(int argc, char *argv[])
 		while(line = Brdline(&in, '\n')){
 			line[Blinelen(&in) - 1] = 0;
 			upper2lower(buf, line, sizeof buf);
-			for(d=first; d; d=d->next)
+			for(d=Base; d; d=d->next)
 				if(regexec(d->p, buf, 0, 0)){
 					print("%s\n", line);
 					break;
@@ -114,18 +114,39 @@ char *months[] =
 	"november",
 	"december"
 };
+char *nth[] = {
+	"first", 
+	"seccond",
+	"third",
+	"fourth",
+	"fifth"
+};
+char *days[] = {
+	"sunday",
+	"monday",
+	"tuesday",
+	"wednesday",
+	"thursday",
+	"friday",
+	"saturday"
+};
 
 /*
  * Generate two Date structures.  First has month followed by day;
  * second has day followed by month.  Link them into list after
  * last, and return the first.
  */
-Date*
-dates(Date **last, Tm *tm)
+void
+dates(Tm *tm)
 {
-	Date *first;
 	Date *nd;
-	char mo[128], buf[128];
+	char mo[128], day[128], buf[128];
+
+	if(utflen(days[tm->wday]) > 3)
+		snprint(day, sizeof day, "%3.3s(%s)?",
+			days[tm->wday], days[tm->wday]+3);
+	else
+		snprint(day, sizeof day, "%3.3s", days[tm->wday]);
 
 	if(utflen(months[tm->mon]) > 3)
 		snprint(mo, sizeof mo, "%3.3s(%s)?",
@@ -134,37 +155,50 @@ dates(Date **last, Tm *tm)
 		snprint(mo, sizeof mo, "%3.3s", months[tm->mon]);
 	if (matchyear)
 		snprint(buf, sizeof buf,
-			"(^| |\t)((%s( |\t)+)|(%d/))%d( |\t|$)(((%d|%d)( |\t|$))|[^0-9]|([0-9]+[^0-9 \t]))",
-			mo, tm->mon+1, tm->mday, tm->year+1900, tm->year%100);
+			"^[\t ]*((%s( |\t)+)|(%d/))%d( |\t|$)(((%d|%d|%02d)( |\t|$))|[^0-9]|([0-9]+[^0-9 \t]))",
+			mo, tm->mon+1, tm->mday, tm->year+1900, tm->year%100, tm->year%100);
 	else
 		snprint(buf, sizeof buf,
-			"(^| |\t)((%s( |\t)+)|(%d/))%d( |\t|$)",
+			"^[\t ]*((%s( |\t)+)|(%d/))%d( |\t|$)",
 			mo, tm->mon+1, tm->mday);
 	if(debug)
 		print("%s\n", buf);
 
-	first = alloc(sizeof(Date));
-	if(*last)
-		(*last)->next = first;
-	first->p = regcomp(buf);	
+	nd = emalloc(sizeof(Date));
+	nd->p = regcomp(buf);
+	nd->next = Base;	
+	Base = nd;
 
 	if (matchyear)
 		snprint(buf, sizeof buf,
-			"(^| |\t)%d( |\t)+(%s)( |\t|$)(((%d|%d)( |\t|$))|[^0-9]|([0-9]+[^0-9 \t]))",
-			tm->mday, mo, tm->year+1900, tm->year%100);
+			"^[\t ]*%d( |\t)+(%s)( |\t|$)(((%d|%d|%02d)( |\t|$))|[^0-9]|([0-9]+[^0-9 \t]))",
+			tm->mday, mo, tm->year+1900, tm->year%100, tm->year%100);
 	else
 		snprint(buf, sizeof buf,
-			"(^| |\t)%d( |\t)+(%s)( |\t|$)",
+			"^[\t ]*%d( |\t)+(%s)( |\t|$)",
 			tm->mday, mo);
 	if(debug)
 		print("%s\n", buf);
-	nd = alloc(sizeof(Date));
+	nd = emalloc(sizeof(Date));
+	nd->p = regcomp(buf);	
+	nd->next = Base;	
+	Base = nd;
+
+	snprint(buf, sizeof buf, "^[\t ]*every[ \t]+%s", day);
+	if(debug)
+		print("%s\n", buf);
+	nd = emalloc(sizeof(Date));
 	nd->p = regcomp(buf);	
-	nd->next = 0;
-	first->next = nd;
-	*last = nd;
+	nd->next = Base;	
+	Base = nd;
 
-	return first;
+	snprint(buf, sizeof buf, "[\t ]*the[\t ]+%s[\t ]+%s", nth[tm->mday/7], day);
+	if(debug)
+		print("%s\n", buf);
+	nd = emalloc(sizeof(Date));
+	nd->p = regcomp(buf);	
+	nd->next = Base;	
+	Base = nd;
 }
 
 /*
@@ -182,7 +216,7 @@ upper2lower(char *to, char *from, int len)
  * Call malloc and check for errors
  */
 void*
-alloc(unsigned int n)
+emalloc(unsigned int n)
 {
 	void *p;
 

+ 17 - 9
sys/src/cmd/fossil/9p.c

@@ -21,7 +21,7 @@ permFile(File* file, Fid* fid, int perm)
 	DirEntry de;
 
 	if(!fileGetDir(file, &de))
-		return 0;
+		return -1;
 
 	/*
 	 * User none only gets other permissions.
@@ -320,7 +320,7 @@ rTwstat(Msg* m)
 		if(!validFileName(dir.name))
 			goto error;
 		if(strcmp(dir.name, de.elem) != 0){
-			if(!permParent(fid, PermW))
+			if(permParent(fid, PermW) <= 0)
 				goto error;
 			vtMemFree(de.elem);
 			de.elem = vtStrDup(dir.name);
@@ -438,7 +438,7 @@ _rTclunk(Fid* fid, int remove)
 
 	rok = 1;
 	if(remove && !(fid->qid.type & QTAUTH)){
-		if((rok = permParent(fid, PermW)) != 0)
+		if((rok = permParent(fid, PermW)) > 0)
 			rok = fileRemove(fid->file, fid->uid);
 	}
 	fidClunk(fid);
@@ -588,7 +588,7 @@ rTcreate(Msg* m)
 		vtSetError("not a directory");
 		goto error;
 	}
-	if(!permFid(fid, PermW))
+	if(permFid(fid, PermW) <= 0)
 		goto error;
 	if(!validFileName(m->t.name))
 		goto error;
@@ -696,7 +696,7 @@ rTopen(Msg* m)
 			vtSetError("read-only filesystem");
 			goto error;
 		}
-		if(!permParent(fid, PermW))
+		if(permParent(fid, PermW) <= 0)
 			goto error;
 
 		open |= FidORclose;
@@ -704,7 +704,7 @@ rTopen(Msg* m)
 
 	omode = m->t.mode & OMODE;
 	if(omode == OREAD || omode == ORDWR){
-		if(!permFid(fid, PermR))
+		if(permFid(fid, PermR) <= 0)
 			goto error;
 		open |= FidORead;
 	}
@@ -717,7 +717,7 @@ rTopen(Msg* m)
 			vtSetError("read-only filesystem");
 			goto error;
 		}
-		if(!permFid(fid, PermW))
+		if(permFid(fid, PermW) <= 0)
 			goto error;
 		open |= FidOWrite;
 	}
@@ -726,7 +726,7 @@ rTopen(Msg* m)
 			vtSetError("is a directory");
 			goto error;
 		}
-		if(!permFid(fid, PermX))
+		if(permFid(fid, PermX) <= 0)
 			goto error;
 		open |= FidORead;
 	}
@@ -848,8 +848,15 @@ rTwalk(Msg* m)
 			vtSetError("not a directory");
 			break;
 		}
-		if(!permFile(file, fid, PermX) && strcmp(t->wname[nwname], "..") != 0)
+		switch(permFile(file, fid, PermX)){
+		case 1:
 			break;
+		case 0:
+			if(strcmp(t->wname[nwname], "..") == 0)
+				break;
+		case -1:
+			goto Out;
+		}
 		if((nfile = fileWalk(file, t->wname[nwname])) == nil)
 			break;
 		fileDecRef(file);
@@ -879,6 +886,7 @@ rTwalk(Msg* m)
 		return 1;
 	}
 
+Out:
 	/*
 	 * Didn't walk all elements, 'clunk' nfid if it exists
 	 * and leave fid untouched.

+ 8 - 8
sys/src/cmd/fossil/fossil-acid

@@ -8,8 +8,8 @@ rc("cd /sys/src/cmd/fossil; mk disk.acid");
 include("/sys/src/cmd/fossil/disk.acid");
 rc("cd /sys/src/cmd/fossil; mk fs.acid");
 include("/sys/src/cmd/fossil/fs.acid");
-rc("cd /sys/src/libventi; mk plan9.acid");
-include("/sys/src/libventi/plan9.acid");
+rc("cd /sys/src/libventi; mk plan9-thread.acid");
+include("/sys/src/libventi/plan9-thread.acid");
 
 // make a list of pids from a list of Thread structures
 defn _threadlist(t)
@@ -66,12 +66,12 @@ defn vtlock(l)
 
 // try to say something intelligent about why a process is stuck.
 _pauses = {
-	open,
-	pread,
-	pwrite,
-	sleep,
-	vtSleep,
-	vtLock,
+	"open",
+	"pread",
+	"pwrite",
+	"sleep",
+	"vtSleep",
+	"vtLock",
 };
 
 defn deadlocklist(l)