# include # include # include # include struct stat sbuf; struct qstat qsbuf; int start; int fdir; int ldir; daddr_t nused; daddr_t nquot; char dotq[] ".q"; char dot[] "."; char dotdot[] ".."; char dummy1[] ".1.1.1"; char dummy2[] ".2.2.2"; char dummy3[] ".3.3.3"; extern daddr_t atol(); main(argc, argv) char *argv[]; { register i, j; int flag; fdir = 1; start = 0; for(i=1; i= ldir) { printf("no directories specified\n"); exit(1); } if(!isnumb(argv[i])) { printf("%s not a directory\n", argv[i]); exit(1); } nused = 0; flag = 1; if(i+1 < argc && isnumb(argv[i+1])) { nused = atol(argv[i]); flag = 0; i++; } nquot = atol(argv[i]); for(j=fdir; j '9') return(0); return(1); } setq(dir, flg, n, m) char *dir; int flg; daddr_t n, m; { register i; int count, f, junk[25]; if(i=fork()) { while(wait(junk) != -1) ; return; } if(chdir(dir) < 0) { printf("chdir:"); perror(dir); exit(1); } count = 0; loop: if(count > 2) { printf("attempts fail\n"); exit(1); } count++; if(qstat(dotq, &qsbuf) >= 0) { if((qsbuf.qs_mode&S_IFMT) != S_IFQUOT) { unlink(dotq); goto loop; } if(flg==1) n=qsbuf.qs_un.qs_qused; if(quota(dotq, fsbtodb(n), fsbtodb(m)) < 0) { printf("quota:"); perror(dotq); exit(1); } exit(0); } unlink(dummy1); f = open(dot, 0); if(f < 0) { printf("open:"); perror(dir); exit(1); } for(i=0; i