V10/cmd/worm/wstat.c

Compare this file to the similar file:
Show the results in this format:

#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);
}