Annotation of researchv10dc/cmd/cbt/btsquash.c, revision 1.1

1.1     ! root        1: #include "stdio.h"
        !             2: #include "cbt.h"
        !             3: 
        !             4: extern int errno;
        !             5: mbuf key, value;
        !             6: char kbuf[NDSZ], vbuf[32767];
        !             7: bfile *bfd;
        !             8: FILE *pfd;
        !             9: extern FILE *popen();
        !            10: char iflag, rflag;
        !            11: char dest[FNAMELEN];
        !            12: 
        !            13: main(argc, argv)
        !            14: char **argv;
        !            15: {
        !            16:        int oflag = 0;
        !            17: 
        !            18:        dest[0] = 0;
        !            19:        if(argc > 2){
        !            20:                if(strncmp(argv[1], "-o", 2))
        !            21:                        goto usage;
        !            22:                strcpy(dest, &argv[1][2]);
        !            23:                argv[1] = argv[2];
        !            24:                argc--;
        !            25:                oflag = 1;
        !            26:        }
        !            27:        if(argc != 2) {
        !            28: usage:
        !            29:                fprintf(stderr, "usage; %s [-odest] file-name\n", argv[0]);
        !            30:                exit(1);
        !            31:        }
        !            32:        if(dest[0] == 0)
        !            33:                sprintf(dest, "TS%d", getpid());
        !            34:        bfd = bopen(argv[1], 0);
        !            35:        if(bfd == NULL)
        !            36:                fail(argv[1]);
        !            37:        strcpy(vbuf, "cbt creat ");
        !            38:        if(bfd->path[0]->htype & INDEX) {
        !            39:                iflag = 1;
        !            40:                strcat(vbuf, "-i ");
        !            41:        }
        !            42:        if(bfd->path[0]->htype & READONLY) {
        !            43:                rflag = 1;
        !            44:                strcat(vbuf, "-r");
        !            45:        }
        !            46:        sprintf(kbuf, "%s %s", vbuf, dest);
        !            47:        if(system(kbuf) != 0) {
        !            48:                fprintf(stderr, "%s failed\n", kbuf);
        !            49:                exit(1);
        !            50:        }
        !            51:        sprintf(kbuf, "cbt build -r %s", dest);
        !            52:        pfd = popen(kbuf, "w");
        !            53:        if(pfd == NULL)
        !            54:                fail(kbuf);
        !            55:        key.mdata = kbuf;
        !            56:        value.mdata = vbuf;
        !            57:        errno = 0;
        !            58:        while(bread(bfd, &key, &value) != EOF) {
        !            59:                (void) fwrite((char *)&key.mlen, 1, sizeof(key.mlen), pfd);
        !            60:                (void) fwrite(key.mdata, 1, key.mlen, pfd);
        !            61:                (void) fwrite((char *)&value.mlen, 1, sizeof(value.mlen), pfd);
        !            62:                (void) fwrite(value.mdata, 1, value.mlen, pfd);
        !            63:                if(ferror(pfd))
        !            64:                        fail("write to build");
        !            65:        }
        !            66:        if(errno)
        !            67:                fail("extracting");
        !            68:        if(pclose(pfd) != 0)
        !            69:                fail("pipe close");
        !            70:        if(oflag == 0){
        !            71:                sprintf(kbuf, "%s.T", argv[1]);
        !            72:                sprintf(vbuf, "TS%d.T", getpid());
        !            73:                unlink(kbuf);
        !            74:                link(vbuf, kbuf);
        !            75:                if(iflag)
        !            76:                        exit(0);
        !            77:                sprintf(kbuf, "%s.F", argv[1]);
        !            78:                sprintf(vbuf, "TS%d.F", getpid());
        !            79:                unlink(kbuf);
        !            80:                link(vbuf, kbuf);
        !            81:                if(errno)
        !            82:                        perror("linking");
        !            83:        }
        !            84:        exit(0);
        !            85: }
        !            86: 
        !            87: fail(s)
        !            88: char *s;
        !            89: {
        !            90:        perror(s);
        !            91:        exit(2);
        !            92: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.