|
|
1.1 root 1: #include "stdio.h"
2: #include "cbt.h"
3:
4: /* read keys from stdin, and delete the records from argv[1] */
5: char keybuf[NDSZ];
6: char recbuf[32767];
7: mbuf key = { keybuf, 0};
8: mbuf rec = { recbuf, 0};
9: bfile *bf;
10: int cflag;
11:
12: main(argc, argv)
13: char **argv;
14: { int n;
15: if(argv[1][0] == '-') {
16: cflag++;
17: argc--;
18: argv++;
19: }
20: if(argc != 2) {
21: fprintf(stderr, "usage: btdelete bfile < recs\n");
22: exit(1);
23: }
24: if((bf = bopen(argv[1], 2)) == NULL) {
25: perror(argv[1]);
26: exit(1);
27: }
28: for(;;) {
29: get(2, (char *)&key.mlen);
30: if(key.mlen > MAXKLEN) {
31: fprintf(stderr, "key too long\n");
32: exit(1);
33: }
34: get(key.mlen, key.mdata);
35: get(2, (char *)&rec.mlen);
36: if(rec.mlen > sizeof(recbuf)) {
37: fprintf(stderr, "rec len %ud: recompile btdelete\n",
38: rec.mlen);
39: abort();
40: }
41: get(rec.mlen, rec.mdata);
42: (void)bdelete(bf, key);
43: if(cflag)
44: bcheck(bf);
45: }
46: }
47: get(n, s)
48: char *s;
49: { int m;
50: for(m = 0; n > 0; n -= m) {
51: m = read(0, s, n);
52: if(m == 0) {
53: bclose(bf);
54: exit(0);
55: }
56: if(m < 0) {
57: fprintf(stderr, "io error in btdelete\n");
58: abort();
59: }
60: s += m;
61: }
62: }
63:
64: mbuf new, old;
65: char newbuf[NDSZ], oldbuf[NDSZ];
66: bcheck(bf)
67: bfile *bf;
68: { long i;
69: int j, k;
70: char *p;
71: bfirst(bf);
72: new.mdata = newbuf;
73: old.mdata = oldbuf;
74: for(i = 0;; i++) {
75: if(bread(bf, &new, (mbuf *)NULL) == EOF)
76: break;
77: if(i > 0) {
78: k = new.mlen;
79: if(old.mlen < new.mlen)
80: k = old.mlen;
81: for(j = 0; j < k; j++)
82: if(new.mdata[j] != old.mdata[j])
83: break;
84: if(j != k) {
85: if(new.mdata[j] > old.mdata[j])
86: continue;
87: bad:
88: fprintf(stderr, "disorder at key %ld\n", i);
89: key.mdata[key.mlen] = 0;
90: fprintf(stderr, "key is:%s:\n", key.mdata);
91: abort();
92: }
93: if(old.mlen >= new.mlen)
94: goto bad;
95: }
96: p = old.mdata;
97: old = new;
98: new.mdata = p;
99: }
100: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.