1 a0d146ed 2005-07-12 devnull #include "stdinc.h"
2 a0d146ed 2005-07-12 devnull #include "dat.h"
3 a0d146ed 2005-07-12 devnull #include "fns.h"
6 a0d146ed 2005-07-12 devnull usage(void)
8 9ee00732 2011-06-07 rsc fprint(2, "usage: fmtisect [-1Z] [-b blocksize] name file\n");
9 a0d146ed 2005-07-12 devnull threadexitsall(0);
13 a0d146ed 2005-07-12 devnull threadmain(int argc, char *argv[])
15 a0d146ed 2005-07-12 devnull int vers;
16 a0d146ed 2005-07-12 devnull ISect *is;
17 a0d146ed 2005-07-12 devnull Part *part;
18 a0d146ed 2005-07-12 devnull char *file, *name;
19 a0d146ed 2005-07-12 devnull int blocksize, setsize, zero;
21 a0d146ed 2005-07-12 devnull ventifmtinstall();
22 a0d146ed 2005-07-12 devnull statsinit();
24 a0d146ed 2005-07-12 devnull blocksize = 8 * 1024;
25 a0d146ed 2005-07-12 devnull setsize = 512 * 1024;
26 a0d146ed 2005-07-12 devnull zero = -1;
27 a0d146ed 2005-07-12 devnull vers = ISectVersion2;
28 a0d146ed 2005-07-12 devnull ARGBEGIN{
29 a0d146ed 2005-07-12 devnull case 'b':
30 a0d146ed 2005-07-12 devnull blocksize = unittoull(ARGF());
31 a0d146ed 2005-07-12 devnull if(blocksize == ~0)
33 a0d146ed 2005-07-12 devnull if(blocksize > MaxDiskBlock){
34 a0d146ed 2005-07-12 devnull fprint(2, "block size too large, max %d\n", MaxDiskBlock);
35 a0d146ed 2005-07-12 devnull threadexitsall("usage");
38 a0d146ed 2005-07-12 devnull case '1':
39 a0d146ed 2005-07-12 devnull vers = ISectVersion1;
41 a0d146ed 2005-07-12 devnull case 'Z':
42 a0d146ed 2005-07-12 devnull zero = 0;
49 a0d146ed 2005-07-12 devnull if(zero == -1){
50 a0d146ed 2005-07-12 devnull if(vers == ISectVersion1)
51 a0d146ed 2005-07-12 devnull zero = 1;
53 a0d146ed 2005-07-12 devnull zero = 0;
56 a0d146ed 2005-07-12 devnull if(argc != 2)
59 a0d146ed 2005-07-12 devnull name = argv[0];
60 a0d146ed 2005-07-12 devnull file = argv[1];
62 a0d146ed 2005-07-12 devnull if(nameok(name) < 0)
63 a0d146ed 2005-07-12 devnull sysfatal("illegal name %s", name);
65 a0d146ed 2005-07-12 devnull part = initpart(file, ORDWR|ODIRECT);
66 a0d146ed 2005-07-12 devnull if(part == nil)
67 a0d146ed 2005-07-12 devnull sysfatal("can't open partition %s: %r", file);
70 a0d146ed 2005-07-12 devnull zeropart(part, blocksize);
72 a0d146ed 2005-07-12 devnull is = newisect(part, vers, name, blocksize, setsize);
73 a0d146ed 2005-07-12 devnull if(is == nil)
74 a0d146ed 2005-07-12 devnull sysfatal("can't initialize new index: %r");
76 a0d146ed 2005-07-12 devnull fprint(2, "fmtisect %s: %,d buckets of %,d entries, %,d bytes for index map\n",
77 a0d146ed 2005-07-12 devnull file, is->blocks, is->buckmax, setsize);
79 a0d146ed 2005-07-12 devnull if(wbisect(is) < 0)
80 a0d146ed 2005-07-12 devnull fprint(2, "can't write back index section header for %s: %r\n", file);
82 a0d146ed 2005-07-12 devnull threadexitsall(0);