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 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 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