Browse Source

Plan 9 from Bell Labs 2003-11-16

David du Colombier 20 years ago
parent
commit
4b902301a9
3 changed files with 16 additions and 9 deletions
  1. 1 1
      dist/replica/plan9.db
  2. 1 0
      dist/replica/plan9.log
  3. 14 8
      sys/src/cmd/aux/consolefs.c

+ 1 - 1
dist/replica/plan9.db

@@ -6798,7 +6798,7 @@ sys/src/cmd/aux/apm.c - 664 sys sys 1046654953 20263
 sys/src/cmd/aux/astarld.c - 664 sys sys 1015008684 4638
 sys/src/cmd/aux/cddb.c - 664 sys sys 1032059267 4303
 sys/src/cmd/aux/clog.c - 664 sys sys 1014925109 1000
-sys/src/cmd/aux/consolefs.c - 664 sys sys 1014925110 20022
+sys/src/cmd/aux/consolefs.c - 664 sys sys 1068916113 20175
 sys/src/cmd/aux/conswdir.c - 664 sys sys 1045504955 2077
 sys/src/cmd/aux/data2s.c - 664 sys sys 1032059295 796
 sys/src/cmd/aux/depend.c - 664 sys sys 1015008684 25780

+ 1 - 0
dist/replica/plan9.log

@@ -12370,3 +12370,4 @@
 1068836496 0 c sys/src/9/boot/local.c - 664 sys sys 1068835808 5355
 1068859816 0 c sys/src/cmd/ki/mkfile - 664 sys sys 1068859845 245
 1068859816 1 c sys/src/cmd/ki/stats.c - 664 sys sys 1068859845 4536
+1068917423 0 c sys/src/cmd/aux/consolefs.c - 664 sys sys 1068916113 20175

+ 14 - 8
sys/src/cmd/aux/consolefs.c

@@ -299,6 +299,8 @@ fsdirgen(Fs *fs, Qid parent, int i, Dir *d, uchar *buf, int nbuf)
 		p = fs->cons[xcons]->name;
 		switch(i%3){
 		case 0:
+			if(fs->cons[xcons]->cfd < 0)
+				return 0;
 			snprint(name, sizeof name, "%sctl", p);
 			p = name;
 			d->qid.type = QTFILE;
@@ -306,6 +308,8 @@ fsdirgen(Fs *fs, Qid parent, int i, Dir *d, uchar *buf, int nbuf)
 			d->qid.vers = 0;
 			break;
 		case 1:
+			if(fs->cons[xcons]->sfd < 0)
+				return 0;
 			snprint(name, sizeof name, "%sstat", p);
 			p = name;
 			d->qid.type = QTFILE;
@@ -326,7 +330,7 @@ fsdirgen(Fs *fs, Qid parent, int i, Dir *d, uchar *buf, int nbuf)
 	d->name = p;
 	if(buf != nil)
 		return convD2M(d, buf, nbuf);
-	return 0;
+	return 1;
 }
 
 /*
@@ -788,7 +792,7 @@ fswalk(Fs *fs, Request *r, Fid *f)
 {
 	char *name;
 	Dir d;
-	int i, nqid, nwname;
+	int i, n, nqid, nwname;
 	Qid qid, wqid[MAXWELEM];
 	Fid *nf;
 	char *err;
@@ -826,11 +830,12 @@ fswalk(Fs *fs, Request *r, Fid *f)
 				qid = parentqid(qid);
 			else if(strcmp(name, ".") != 0){
 				for(i = 0; ; i++){
-					if(fsdirgen(fs, qid, i, &d, nil, 0) < 0){
+					n = fsdirgen(fs, qid, i, &d, nil, 0);
+					if(n < 0){
 						err = Eexist;
 						break;
 					}
-					if(strcmp(name, d.name) == 0){
+					if(n > 0 && strcmp(name, d.name) == 0){
 						qid = d.qid;
 						break;
 					}
@@ -992,9 +997,9 @@ fsread(Fs *fs, Request *r, Fid *f)
 		off = 0;
 		for(i=0; p<e; i++, off+=m){
 			m = fsdirgen(fs, f->qid, i, &d, p, e-p);
-			if(m <= BIT16SZ)
+			if(m < 0)
 				break;
-			if(off >= offset)
+			if(m > BIT16SZ && off >= offset)
 				p += m;
 		}
 		r->f.data = (char*)r->buf + IOHDRSZ;
@@ -1113,11 +1118,12 @@ fsstat(Fs *fs, Request *r, Fid *f)
 	q = parentqid(f->qid);
 	for(i = 0; ; i++){
 		r->f.stat = r->buf+IOHDRSZ;
-		if((r->f.nstat = fsdirgen(fs, q, i, &d, r->f.stat, messagesize-IOHDRSZ)) <= BIT16SZ){
+		r->f.nstat = fsdirgen(fs, q, i, &d, r->f.stat, messagesize-IOHDRSZ);
+		if(r->f.nstat < 0){
 			fsreply(fs, r, Eexist);
 			return;
 		}
-		if(d.qid.path == f->qid.path)
+		if(r->f.nstat > BIT16SZ && d.qid.path == f->qid.path)
 			break;
 	}
 	fsreply(fs, r, nil);