epoch.c 997 B

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