Blame


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"
4 a0d146ed 2005-07-12 devnull
5 a0d146ed 2005-07-12 devnull void
6 a0d146ed 2005-07-12 devnull usage(void)
7 a0d146ed 2005-07-12 devnull {
8 9ee00732 2011-06-07 rsc fprint(2, "usage: fmtisect [-1Z] [-b blocksize] name file\n");
9 a0d146ed 2005-07-12 devnull threadexitsall(0);
10 a0d146ed 2005-07-12 devnull }
11 a0d146ed 2005-07-12 devnull
12 a0d146ed 2005-07-12 devnull void
13 a0d146ed 2005-07-12 devnull threadmain(int argc, char *argv[])
14 a0d146ed 2005-07-12 devnull {
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;
20 a0d146ed 2005-07-12 devnull
21 a0d146ed 2005-07-12 devnull ventifmtinstall();
22 a0d146ed 2005-07-12 devnull statsinit();
23 a0d146ed 2005-07-12 devnull
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)
32 a0d146ed 2005-07-12 devnull usage();
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");
36 a0d146ed 2005-07-12 devnull }
37 a0d146ed 2005-07-12 devnull break;
38 a0d146ed 2005-07-12 devnull case '1':
39 a0d146ed 2005-07-12 devnull vers = ISectVersion1;
40 a0d146ed 2005-07-12 devnull break;
41 a0d146ed 2005-07-12 devnull case 'Z':
42 a0d146ed 2005-07-12 devnull zero = 0;
43 a0d146ed 2005-07-12 devnull break;
44 a0d146ed 2005-07-12 devnull default:
45 a0d146ed 2005-07-12 devnull usage();
46 a0d146ed 2005-07-12 devnull break;
47 a0d146ed 2005-07-12 devnull }ARGEND
48 a0d146ed 2005-07-12 devnull
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;
52 a0d146ed 2005-07-12 devnull else
53 a0d146ed 2005-07-12 devnull zero = 0;
54 a0d146ed 2005-07-12 devnull }
55 a0d146ed 2005-07-12 devnull
56 a0d146ed 2005-07-12 devnull if(argc != 2)
57 a0d146ed 2005-07-12 devnull usage();
58 a0d146ed 2005-07-12 devnull
59 a0d146ed 2005-07-12 devnull name = argv[0];
60 a0d146ed 2005-07-12 devnull file = argv[1];
61 a0d146ed 2005-07-12 devnull
62 a0d146ed 2005-07-12 devnull if(nameok(name) < 0)
63 a0d146ed 2005-07-12 devnull sysfatal("illegal name %s", name);
64 a0d146ed 2005-07-12 devnull
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);
68 a0d146ed 2005-07-12 devnull
69 a0d146ed 2005-07-12 devnull if(zero)
70 a0d146ed 2005-07-12 devnull zeropart(part, blocksize);
71 a0d146ed 2005-07-12 devnull
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");
75 a0d146ed 2005-07-12 devnull
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);
78 a0d146ed 2005-07-12 devnull
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);
81 a0d146ed 2005-07-12 devnull
82 a0d146ed 2005-07-12 devnull threadexitsall(0);
83 a0d146ed 2005-07-12 devnull }