13 clumpinfoeq(ClumpInfo *c, ClumpInfo *d)
15 return c->type == d->type
17 && c->uncsize == d->uncsize
18 && scorecmp(c->score, d->score)==0;
22 findscore(Arena *arena, uchar *score)
32 fprint(2, "reading directory for arena=%s with %d entries\n", arena->name, arena->clumps);
34 cis = MKN(ClumpInfo, ClumpChunks);
37 memset(&ie, 0, sizeof(IEntry));
38 for(clump = 0; clump < arena->clumps; clump += n){
40 if(n > arena->clumps - clump)
41 n = arena->clumps - clump;
42 if(readclumpinfos(arena, clump, cis, n) != n){
43 seterr(EOk, "arena directory read failed: %r");
47 for(i = 0; i < n; i++){
49 if(scorecmp(score, ci->score)==0){
50 fprint(2, "found at clump=%d with type=%d size=%d csize=%d position=%lld\n",
51 clump + i, ci->type, ci->uncsize, ci->size, a);
54 a += ci->size + ClumpSize;
64 fprint(2, "usage: findscore [-v] arenafile score\n");
69 threadmain(int argc, char *argv[])
74 u8int score[VtScoreSize];
77 fmtinstall('V', vtscorefmt);
95 if(strscore(argv[1], score) < 0)
96 sysfatal("bad score %s\n", argv[1]);
98 part = initpart(file, 0);
100 sysfatal("can't open partition %s: %r", file);
102 ap = initarenapart(part);
104 sysfatal("can't initialize arena partition in %s: %r", file);
107 printarenapart(2, ap);
111 initdcache(8 * MaxDiskBlock);
114 for(i = 0; i < ap->narenas; i++)
115 found += findscore(ap->arenas[i], score);
117 print("found %d occurances of %V\n", found, score);