xref: /plan9/sys/src/cmd/fossil/epoch.c (revision 34e0422554c8e8bef66509534d2c44f4660bf678)
1*34e04225SDavid du Colombier #include "stdinc.h"
2*34e04225SDavid du Colombier #include "dat.h"
3*34e04225SDavid du Colombier #include "fns.h"
4*34e04225SDavid du Colombier 
5*34e04225SDavid du Colombier uchar buf[65536];
6*34e04225SDavid du Colombier 
7*34e04225SDavid du Colombier void
usage(void)8*34e04225SDavid du Colombier usage(void)
9*34e04225SDavid du Colombier {
10*34e04225SDavid du Colombier 	fprint(2, "usage: fossil/epoch fs [new-low-epoch]\n");
11*34e04225SDavid du Colombier 	exits("usage");
12*34e04225SDavid du Colombier }
13*34e04225SDavid du Colombier 
14*34e04225SDavid du Colombier void
main(int argc,char ** argv)15*34e04225SDavid du Colombier main(int argc, char **argv)
16*34e04225SDavid du Colombier {
17*34e04225SDavid du Colombier 	int fd;
18*34e04225SDavid du Colombier 	Header h;
19*34e04225SDavid du Colombier 	Super s;
20*34e04225SDavid du Colombier 
21*34e04225SDavid du Colombier 	ARGBEGIN{
22*34e04225SDavid du Colombier 	default:
23*34e04225SDavid du Colombier 		usage();
24*34e04225SDavid du Colombier 	}ARGEND
25*34e04225SDavid du Colombier 
26*34e04225SDavid du Colombier 	if(argc == 0 || argc > 2)
27*34e04225SDavid du Colombier 		usage();
28*34e04225SDavid du Colombier 
29*34e04225SDavid du Colombier 	if((fd = open(argv[0], argc==2 ? ORDWR : OREAD)) < 0)
30*34e04225SDavid du Colombier 		sysfatal("open %s: %r", argv[0]);
31*34e04225SDavid du Colombier 
32*34e04225SDavid du Colombier 	if(pread(fd, buf, HeaderSize, HeaderOffset) != HeaderSize)
33*34e04225SDavid du Colombier 		sysfatal("reading header: %r");
34*34e04225SDavid du Colombier 	if(!headerUnpack(&h, buf))
35*34e04225SDavid du Colombier 		sysfatal("unpacking header: %r");
36*34e04225SDavid du Colombier 
37*34e04225SDavid du Colombier 	if(pread(fd, buf, h.blockSize, (vlong)h.super*h.blockSize) != h.blockSize)
38*34e04225SDavid du Colombier 		sysfatal("reading super block: %r");
39*34e04225SDavid du Colombier 
40*34e04225SDavid du Colombier 	if(!superUnpack(&s, buf))
41*34e04225SDavid du Colombier 		sysfatal("unpacking super block: %r");
42*34e04225SDavid du Colombier 
43*34e04225SDavid du Colombier 	print("epoch %d\n", s.epochLow);
44*34e04225SDavid du Colombier 	if(argc == 2){
45*34e04225SDavid du Colombier 		s.epochLow = strtoul(argv[1], 0, 0);
46*34e04225SDavid du Colombier 		superPack(&s, buf);
47*34e04225SDavid du Colombier 		if(pwrite(fd, buf, h.blockSize, (vlong)h.super*h.blockSize) != h.blockSize)
48*34e04225SDavid du Colombier 			sysfatal("writing super block: %r");
49*34e04225SDavid du Colombier 	}
50*34e04225SDavid du Colombier 	exits(0);
51*34e04225SDavid du Colombier }
52