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