V10/cmd/worm/poot.c

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

#include	<libc.h>
#include	"sym.h"
#include	"worm.h"

main(argc, argv)
	char **argv;
{
	Superblock s;
	char buf[1024];
	char *e;
	Inode *i;
	int c;
	char *com = 0;
	char *dev = "/dev/worm0";
	extern char *optarg;
	extern int optind;

	while((c = getopt(argc, argv, "f:c:")) != -1)
		switch(c)
		{
		case 'c':	com = optarg; break;
		case 'f':	dev = optarg; break;
		case '?':	usage();
		}
	if(optind+2 != argc)
		usage();
	dev = mapdev(dev);
	if((s.fd = open(dev, 2)) < 0){
		perror(dev);
		exit(1);
	}
	if(e = openinode(&s, SPIN_DOWN)){
		fprint(2, "%s: %s\n", dev, e);
		exit(1);
	}
	if(strcmp(s.vol_id, argv[optind])){
		fprint(2, "vol_id mismatch: wanted %s, got %s\n", argv[optind], s.vol_id);
		exit(1);
	}
	if(s.version != VBTREE){
		fprint(2, "poot: %s must be a btree disk\n", s.vol_id);
		exit(1);
	}
	memset(buf, sizeof buf, 0);
	memset(s.vol_id, sizeof s.vol_id, 0);
	strcpy(s.vol_id, argv[++optind]);
	if(com){
		memset(s.comment, sizeof s.comment, 0);
		strcpy(s.comment, com);
	}
	memcpy(buf, &s, 1024);
	lseek(s.fd, 0, 0);
	if(write(s.fd, buf, 1024) != 1024){
		perror("write of new superblock");
		exit(1);
	}
	exit(0);
}

usage()
{
	fprint(2, "Usage: poot [-fdevice] [-ccnewcomment] vol_id new_vol_id\n");
	exit(1);
}