fmtisect.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "stdinc.h"
  2. #include "dat.h"
  3. #include "fns.h"
  4. void
  5. usage(void)
  6. {
  7. fprint(2, "usage: fmtisect [-Z] [-b blocksize] name file\n");
  8. threadexitsall(0);
  9. }
  10. void
  11. threadmain(int argc, char *argv[])
  12. {
  13. int vers;
  14. ISect *is;
  15. Part *part;
  16. char *file, *name;
  17. int blocksize, setsize, zero;
  18. ventifmtinstall();
  19. statsinit();
  20. blocksize = 8 * 1024;
  21. setsize = 512 * 1024;
  22. zero = -1;
  23. vers = ISectVersion2;
  24. ARGBEGIN{
  25. case 'b':
  26. blocksize = unittoull(ARGF());
  27. if(blocksize == ~0)
  28. usage();
  29. if(blocksize > MaxDiskBlock){
  30. fprint(2, "block size too large, max %d\n", MaxDiskBlock);
  31. threadexitsall("usage");
  32. }
  33. break;
  34. case '1':
  35. vers = ISectVersion1;
  36. break;
  37. case 'Z':
  38. zero = 0;
  39. break;
  40. default:
  41. usage();
  42. break;
  43. }ARGEND
  44. if(zero == -1){
  45. if(vers == ISectVersion1)
  46. zero = 1;
  47. else
  48. zero = 0;
  49. }
  50. if(argc != 2)
  51. usage();
  52. name = argv[0];
  53. file = argv[1];
  54. if(nameok(name) < 0)
  55. sysfatal("illegal name %s", name);
  56. part = initpart(file, ORDWR|ODIRECT);
  57. if(part == nil)
  58. sysfatal("can't open partition %s: %r", file);
  59. if(zero)
  60. zeropart(part, blocksize);
  61. is = newisect(part, vers, name, blocksize, setsize);
  62. if(is == nil)
  63. sysfatal("can't initialize new index: %r");
  64. fprint(2, "fmtisect %s: %,d buckets of %,d entries, %,d bytes for index map\n",
  65. file, is->blocks, is->buckmax, setsize);
  66. if(wbisect(is) < 0)
  67. fprint(2, "can't write back index section header for %s: %r\n", file);
  68. threadexitsall(0);
  69. }