diff -r de663b03be21 sys/src/cmd/upas/q/runq.c --- a/sys/src/cmd/upas/q/runq.c Sat Jan 23 11:03:05 2021 -0800 +++ b/sys/src/cmd/upas/q/runq.c Sat Jan 23 11:27:11 2021 -0800 @@ -48,6 +48,7 @@ int njob = 1; /* number of concurrent jobs to invoke */ int Eflag; /* ignore E.xxxxxx dates */ int Rflag; /* no giving up, ever */ +int aflag; /* do all dirs */ void usage(void) @@ -82,27 +83,37 @@ case 'q': qdir = EARGF(usage()); break; + case 'a': + aflag++; + break; case 'n': njob = atoi(EARGF(usage())); if(njob == 0) usage(); break; + default: + usage(); + break; }ARGEND; if(argc != 2) usage(); - if(qdir == nil) + if(!aflag && qdir == nil){ qdir = getuser(); - if(qdir == nil) - error("unknown user", 0); + if(qdir == nil) + error("unknown user", 0); + } root = argv[0]; cmd = argv[1]; if(chdir(root) < 0) error("can't cd to %s", root); - dodir(qdir); + if(aflag) + doalldirs(); + else + dodir(qdir); exits(0); } @@ -129,6 +140,38 @@ } /* + * run all user directories, must be bootes (or root on unix) to do this + */ +void +doalldirs(void) +{ + Dir *db; + int fd; + long i, n; + + + fd = open(".", OREAD); + if(fd == -1){ + warning("reading %s", root); + return; + } + n = dirreadall(fd, &db); + if(n == 0){ + close(fd); + return; + } + for(i=0; i