flchk.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include "stdinc.h"
  2. #include <bio.h>
  3. #include "dat.h"
  4. #include "fns.h"
  5. Biobuf bout;
  6. Fsck fsck;
  7. static void
  8. usage(void)
  9. {
  10. fprint(2, "usage: %s [-c cachesize] [-h host] file\n", argv0);
  11. exits("usage");
  12. }
  13. #pragma varargck argpos flprint 1
  14. static int
  15. flprint(char *fmt, ...)
  16. {
  17. int n;
  18. va_list arg;
  19. va_start(arg, fmt);
  20. n = Bvprint(&bout, fmt, arg);
  21. va_end(arg);
  22. return n;
  23. }
  24. static void
  25. flclre(Fsck*, Block *b, int o)
  26. {
  27. Bprint(&bout, "# clre 0x%ux %d\n", b->addr, o);
  28. }
  29. static void
  30. flclrp(Fsck*, Block *b, int o)
  31. {
  32. Bprint(&bout, "# clrp 0x%ux %d\n", b->addr, o);
  33. }
  34. static void
  35. flclri(Fsck*, char *name, MetaBlock*, int, Block*)
  36. {
  37. Bprint(&bout, "# clri %s\n", name);
  38. }
  39. static void
  40. flclose(Fsck*, Block *b, u32int epoch)
  41. {
  42. Bprint(&bout, "# bclose 0x%ux %ud\n", b->addr, epoch);
  43. }
  44. void
  45. main(int argc, char *argv[])
  46. {
  47. int csize = 1000;
  48. VtSession *z;
  49. char *host = nil;
  50. fsck.useventi = 1;
  51. Binit(&bout, 1, OWRITE);
  52. ARGBEGIN{
  53. default:
  54. usage();
  55. case 'c':
  56. csize = atoi(ARGF());
  57. if(csize <= 0)
  58. usage();
  59. break;
  60. case 'f':
  61. fsck.useventi = 0;
  62. break;
  63. case 'h':
  64. host = ARGF();
  65. break;
  66. case 'v':
  67. fsck.printdirs = 1;
  68. break;
  69. }ARGEND;
  70. if(argc != 1)
  71. usage();
  72. vtAttach();
  73. fmtinstall('L', labelFmt);
  74. fmtinstall('V', scoreFmt);
  75. fmtinstall('R', vtErrFmt);
  76. /*
  77. * Connect to Venti.
  78. */
  79. z = vtDial(host, 0);
  80. if(z == nil){
  81. if(fsck.useventi)
  82. vtFatal("could not connect to server: %s", vtGetError());
  83. }else if(!vtConnect(z, 0))
  84. vtFatal("vtConnect: %s", vtGetError());
  85. /*
  86. * Initialize file system.
  87. */
  88. fsck.fs = fsOpen(argv[0], z, csize, OReadOnly);
  89. if(fsck.fs == nil)
  90. vtFatal("could not open file system: %R");
  91. fsck.print = flprint;
  92. fsck.clre = flclre;
  93. fsck.clrp = flclrp;
  94. fsck.close = flclose;
  95. fsck.clri = flclri;
  96. fsCheck(&fsck);
  97. exits(0);
  98. }