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