Annotation of researchv10no/libcbt/btexer.c, revision 1.1

1.1     ! root        1: #include "cbt.h"
        !             2: extern char *malloc();
        !             3: 
        !             4: bfile *bt;
        !             5: mbuf *key;
        !             6: char *state;
        !             7: #define IN     1
        !             8: #define OUT    2
        !             9: int cnt, keysz;
        !            10: char *buf;
        !            11: char cmdbuf[128];
        !            12: mbuf rec = {"", 0};
        !            13: extern char *outkey();
        !            14: char *filename;
        !            15: 
        !            16: main(argc, argv)
        !            17: char **argv;
        !            18: {      int i;
        !            19:        if(argc != 3)
        !            20:                error("usage: file key-cnt");
        !            21:        bt = bopen(filename = argv[1], 2);
        !            22:        if(bt == 0)
        !            23:                error("bopen");
        !            24:        sprintf(cmdbuf, "btdiag %s", argv[1]);
        !            25:        cnt = atoi(argv[2]);
        !            26:        printf("cnt = %d\n", cnt);
        !            27:        key = (mbuf *)malloc(cnt * sizeof(mbuf));
        !            28:        keysz = NDSZ/5;
        !            29:        if(keysz > MAXKLEN)
        !            30:                keysz = MAXKLEN;
        !            31:        printf("keysz %d\n", keysz);
        !            32:        buf = malloc((keysz + 1) * cnt);
        !            33:        state = malloc(cnt);
        !            34:        if(buf == 0 || state == 0)
        !            35:                error("key malloc");
        !            36:        for(i = 0; i < cnt; i++)
        !            37:                state[i] = OUT;
        !            38:        for(i = 0; i < cnt; i++)
        !            39:                key[i].mlen = keysz;
        !            40:        for(i = 0; i < cnt; i++)
        !            41:                key[i].mdata = buf + i * (keysz + 1);
        !            42:        srand(0);
        !            43:        for(i = 0; i < cnt * (keysz + 1); i++)
        !            44:                buf[i] = rand() % 94 + ' ' + 1;
        !            45:        for(i = 0; i < cnt; i++)
        !            46:                buf[i * (keysz + 1) + keysz] = 0;
        !            47:        doit();
        !            48:        printf("sbrk %d\n", sbrk(0));
        !            49:        exit(0);
        !            50: }
        !            51: 
        !            52: doit()
        !            53: {
        !            54:        allin();
        !            55:        test("allin ok\n");
        !            56:        checkseek();
        !            57:        out(500);
        !            58:        test("out 500 ok\n");
        !            59:        checkseek();
        !            60:        in(500);
        !            61:        test("in 500 ok\n");
        !            62:        checkseek();
        !            63:        out(700);
        !            64:        test("out 700 ok\n");
        !            65:        checkseek();
        !            66:        in(700);
        !            67:        test("in 700 ok\n");
        !            68:        checkseek();
        !            69:        out(1000);
        !            70:        test("out 1000 ok\n");
        !            71:        checkseek();
        !            72:        in(100);
        !            73:        test("in 100 ok\n");
        !            74:        checkseek();
        !            75:        in(200);
        !            76:        test("in 200 ok\n");
        !            77:        checkseek();
        !            78:        in(300);
        !            79:        test("in 300 ok\n");
        !            80:        checkseek();
        !            81: }
        !            82: 
        !            83: test(s)
        !            84: char *s;
        !            85: {      int n;
        !            86:        bclose(bt);
        !            87:        n = system(cmdbuf);
        !            88:        if(n) {
        !            89:                printf("%s returned %d\n", cmdbuf, n);
        !            90:                exit(1);
        !            91:        }
        !            92:        else
        !            93:                printf(s);
        !            94:        bt = bopen(filename, 2);
        !            95:        if(bt == NULL)
        !            96:                error(filename);
        !            97: }
        !            98: 
        !            99: error(s)
        !           100: char *s;
        !           101: {
        !           102:        perror(s);
        !           103:        exit(1);
        !           104: }
        !           105: 
        !           106: allin()
        !           107: {      int i;
        !           108:        for(i = 0; i < cnt; i++) {
        !           109:                if(state[i] == IN)
        !           110:                        continue;
        !           111:                if(bwrite(bt, key[i], rec) == EOF)
        !           112:                        printf("write error %d on key %d\n", errno, i);
        !           113:                else
        !           114:                        state[i] = IN;
        !           115:        }
        !           116: }
        !           117: 
        !           118: in(n)
        !           119: {      int i;
        !           120:        for(i = 0; i < cnt; i++) {
        !           121:                if(state[i] == IN || (rand() % 1007) >= n)
        !           122:                        continue;
        !           123:                else if(bwrite(bt, key[i], rec) == EOF)
        !           124:                        printf("write error %d on key %d\n", errno, i);
        !           125:                else
        !           126:                        state[i] = IN;
        !           127:        }
        !           128: }
        !           129: 
        !           130: out(n)
        !           131: {      int i, count = 0;
        !           132:        for(i = 0; i < cnt; i++) {
        !           133:                if(state[i] == OUT || (rand() % 1007) >= n)
        !           134:                        continue;
        !           135:                if(bdelete(bt, key[i], rec) != 1) {
        !           136:                        printf("bdelete error %d on key %s\n", errno, outkey(i));
        !           137:                        printf("out(%d) deleted %d\n", n, count);
        !           138:                        bflush(bt);
        !           139:                        exit(1);
        !           140:                }
        !           141:                else if(bt->fatal)
        !           142:                        printf("set fatal flag, bdelete key %d %s err %d\n", i, outkey(i), errno);
        !           143:                else {
        !           144:                        count++;
        !           145:                        state[i] = OUT;
        !           146:                }
        !           147:        }
        !           148: }
        !           149: 
        !           150: checkseek()
        !           151: {      int i, j, count = 0;
        !           152:        mbuf x;
        !           153:        printf("\tcheckseek");
        !           154:        for(i = 0; i < cnt; i++) {
        !           155:                if(state[i] == OUT)
        !           156:                        continue;
        !           157:                if(bseek(bt, key[i]) != FOUND) {
        !           158:                        printf("sought key %s, not found\n", key[i].mdata);
        !           159:                        continue;
        !           160:                }
        !           161:                x = bkey(bt);
        !           162:                for(j = 0; j < keysz; j++)
        !           163:                        if(key[i].mdata[j] != x.mdata[j]) {
        !           164:                                printf("bkey mismatch at key %d\n", i);
        !           165:                                break;
        !           166:                        }
        !           167:                count++;
        !           168:        }
        !           169:        printf(" saw %d\n", count);
        !           170: }
        !           171: 
        !           172: char *
        !           173: outkey(n)
        !           174: {      static char kb[MAXKLEN + 1];
        !           175:        int i;
        !           176:        strncpy(kb, key[n].mdata, keysz);
        !           177:        return(kb);
        !           178: }

unix.superglobalmegacorp.com

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