|
|
researchv10 Norman
#include <libc.h>
#include "worm.h"
main(argc, argv)
char **argv;
{
Superblock s;
char *e, *vol_id = 0;
char *dev = "/dev/worm0";
int c;
long nf = 0;
int vflag = 0;
extern char *optarg;
extern int optind;
extern long atol();
while((c = getopt(argc, argv, "vF:f:")) != -1)
switch(c)
{
case 'f': dev = optarg; break;
case 'F': nf = atol(optarg); break;
case 'v': vflag = 1; break;
case '?': usage();
}
if(optind < argc){
vol_id = argv[optind++];
if(optind != argc)
usage();
}
dev = mapdev(dev);
if((s.fd = open(dev, 0)) < 0){
if(!vol_id && !nf)
perror(dev);
exit(2);
}
if(e = openinode(&s, SPIN_DOWN)){
if(!vol_id && !nf)
fprint(2, "%s: %s\n", dev, e);
exit(2);
}
if(nf){
if(vol_id)
if(strcmp(vol_id, s.vol_id) != 0)
exit(1);
exit(s.nfree >= nf? 0:3);
}
if(vol_id)
exit(strcmp(vol_id, s.vol_id) != 0);
if(vflag){
Fprint(1, "%s: %s, %s\t%ldx%uhd blocks, %ld (=%.1fMB) free, zero=%ld this_sb@%ld next_sb@%ld\n",
s.vol_id, s.comment, ctime(&s.ctime), s.nblocks, s.blocksize,
s.nfree, s.nfree*(double)s.blocksize*1e-6, s.zero, s.myblock, s.nextsb);
} else
Fprint(1, "%s: %.0f%% used (%.1fMB free)\n", s.vol_id,
s.nextffree*100.0/s.nblocks, s.nfree*(double)s.blocksize*1e-6);
exit(0);
}
usage()
{
print("Usage: worm stat [-v] [-fdevice] [-Fnfree] [vol_id]\n");
exit(2);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.