Commit Diff


commit - 17e9283bd8833da47aab4ccb66c3e965c947cffd
commit + a919ad8340ba788c54d34b437c347ee8b0a5e922
blob - 909bfeb6492cf2136aab87b5dd5915e796479d42
blob + bace6d09de63fc347bf310dedc4dc495db77a5c0
--- src/cmd/9p.c
+++ src/cmd/9p.c
@@ -355,13 +355,14 @@ dircmp(const void *va, const void *vb)
 void
 xls(int argc, char **argv)
 {
-	char *name, *xname, *f[4], buf[4096];
+	char *err, *name, *xname, *f[4], buf[4096];
 	int nf, i, j, l;
 	int lflag, dflag, n, len[4];
 	Dir *d;
 	CFid *fid;
 	CFsys *fs;
-	
+
+	err = nil;
 	lflag = dflag = 0;
 	ARGBEGIN{
 	case 'l':
@@ -383,6 +384,7 @@ xls(int argc, char **argv)
 		if((d = fsdirstat(fs, xname)) == nil){
 			fprint(2, "dirstat %s: %r\n", name);
 			fsunmount(fs);
+			err = "errors";
 			continue;
 		}
 		if((d->mode&DMDIR) && !dflag){
@@ -390,6 +392,7 @@ xls(int argc, char **argv)
 				fprint(2, "open %s: %r\n", name);
 				fsunmount(fs);
 				free(d);
+				err = "errors";
 				continue;
 			}
 			free(d);
@@ -398,6 +401,7 @@ xls(int argc, char **argv)
 			if(n < 0){
 				fprint(2, "dirreadall %s: %r\n", name);
 				fsunmount(fs);
+				err = "errors";
 				continue;
 			}
 			qsort(d, n, sizeof d[0], dircmp);
@@ -430,6 +434,6 @@ xls(int argc, char **argv)
 		}
 		free(d);
 	}
-	threadexitsall(0);
+	threadexitsall(err);
 }