Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "stdinc.h"
#include "dat.h"
#include "fns.h"

void
usage(void)
{
        fprint(2, "usage: fmtisect [-Z] [-b blocksize] name file\n");
        threadexitsall(0);
}

void
threadmain(int argc, char *argv[])
{
        int vers;
        ISect *is;
        Part *part;
        char *file, *name;
        int blocksize, setsize, zero;

        ventifmtinstall();
        statsinit();

        blocksize = 8 * 1024;
        setsize = 512 * 1024;
        zero = -1;
        vers = ISectVersion2;
        ARGBEGIN{
        case 'b':
                blocksize = unittoull(ARGF());
                if(blocksize == ~0)
                        usage();
                if(blocksize > MaxDiskBlock){
                        fprint(2, "block size too large, max %d\n", MaxDiskBlock);
                        threadexitsall("usage");
                }
                break;
        case '1':
                vers = ISectVersion1;
                break;
        case 'Z':
                zero = 0;
                break;
        default:
                usage();
                break;
        }ARGEND

        if(zero == -1){
                if(vers == ISectVersion1)
                        zero = 1;
                else
                        zero = 0;
        }

        if(argc != 2)
                usage();

        name = argv[0];
        file = argv[1];

        if(nameok(name) < 0)
                sysfatal("illegal name %s", name);

        part = initpart(file, ORDWR|ODIRECT);
        if(part == nil)
                sysfatal("can't open partition %s: %r", file);

        if(zero)
                zeropart(part, blocksize);

        is = newisect(part, vers, name, blocksize, setsize);
        if(is == nil)
                sysfatal("can't initialize new index: %r");

        fprint(2, "fmtisect %s: %,d buckets of %,d entries, %,d bytes for index map\n",
                file, is->blocks, is->buckmax, setsize);

        if(wbisect(is) < 0)
                fprint(2, "can't write back index section header for %s: %r\n", file);

        threadexitsall(0);
}