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