URI: 
       tprintindex.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tprintindex.c (1746B)
       ---
            1 #include "stdinc.h"
            2 #include "dat.h"
            3 #include "fns.h"
            4 #include <bio.h>
            5 
            6 Biobuf bout;
            7 
            8 static void
            9 pie(IEntry *ie)
           10 {
           11         Bprint(&bout, "%22lld %V %3d %5d\n",
           12                 ie->ia.addr, ie->score, ie->ia.type, ie->ia.size);
           13 }
           14 
           15 void
           16 usage(void)
           17 {
           18         fprint(2, "usage: printindex [-B blockcachesize] config [isectname...]\n");
           19         threadexitsall(0);
           20 }
           21 
           22 Config conf;
           23 
           24 int
           25 shoulddump(char *name, int argc, char **argv)
           26 {
           27         int i;
           28 
           29         if(argc == 0)
           30                 return 1;
           31         for(i=0; i<argc; i++)
           32                 if(strcmp(name, argv[i]) == 0)
           33                         return 1;
           34         return 0;
           35 }
           36 
           37 void
           38 dumpisect(ISect *is)
           39 {
           40         int j;
           41         uchar *buf;
           42         u32int i;
           43         u64int off;
           44         IBucket ib;
           45         IEntry ie;
           46 
           47         buf = emalloc(is->blocksize);
           48         for(i=0; i<is->blocks; i++){
           49                 off = is->blockbase+(u64int)is->blocksize*i;
           50                 if(readpart(is->part, off, buf, is->blocksize) < 0)
           51                         fprint(2, "read %s at 0x%llux: %r\n", is->part->name, off);
           52                 else{
           53                         unpackibucket(&ib, buf, is->bucketmagic);
           54                         for(j=0; j<ib.n; j++){
           55                                 unpackientry(&ie, &ib.data[j*IEntrySize]);
           56                                 pie(&ie);
           57                         }
           58                 }
           59         }
           60 }
           61 
           62 void
           63 threadmain(int argc, char *argv[])
           64 {
           65         int i;
           66         Index *ix;
           67         u32int bcmem;
           68 
           69         bcmem = 0;
           70         ARGBEGIN{
           71         case 'B':
           72                 bcmem = unittoull(ARGF());
           73                 break;
           74         default:
           75                 usage();
           76                 break;
           77         }ARGEND
           78 
           79         if(argc < 1)
           80                 usage();
           81 
           82         fmtinstall('H', encodefmt);
           83 
           84         if(initventi(argv[0], &conf) < 0)
           85                 sysfatal("can't init venti: %r");
           86 
           87         if(bcmem < maxblocksize * (mainindex->narenas + mainindex->nsects * 4 + 16))
           88                 bcmem = maxblocksize * (mainindex->narenas + mainindex->nsects * 4 + 16);
           89         if(0) fprint(2, "initialize %d bytes of disk block cache\n", bcmem);
           90         initdcache(bcmem);
           91 
           92         ix = mainindex;
           93         Binit(&bout, 1, OWRITE);
           94         for(i=0; i<ix->nsects; i++)
           95                 if(shoulddump(ix->sects[i]->name, argc-1, argv+1))
           96                         dumpisect(ix->sects[i]);
           97         Bterm(&bout);
           98         threadexitsall(0);
           99 }