|
|
1.1 root 1: /*
2: * Program to convert history file to dbm file. The old 3 field
3: * history file is still kept there, because we need it for expire
4: * and for a human readable copy. But we keep a dbm hashed copy
5: * around by message ID so we can answer the yes/no question "have
6: * we already seen this message". The content is the ftell offset
7: * into the real history file when we get the article - you can't
8: * really do much with this because the file gets compacted.
9: */
10:
11: #include <stdio.h>
12:
13: typedef struct {
14: char *dptr;
15: int dsize;
16: } datum;
17:
18: FILE *fd;
19:
20: char namebuf[BUFSIZ];
21: char lb[BUFSIZ];
22:
23: char *index();
24:
25: main(argc, argv)
26: char **argv;
27: {
28: register char *p, *q;
29: long fpos;
30: datum lhs, rhs;
31: int rv;
32:
33: if (argc != 2 ) {
34: fprintf(stderr, "Usage: cvt.hist /usr/lib/news\n");
35: exit(1);
36: }
37:
38: umask(0);
39: sprintf(namebuf, "%s/history.dir", argv[1]);
40: close(creat(namebuf, 0666));
41: sprintf(namebuf, "%s/history.pag", argv[1]);
42: close(creat(namebuf, 0666));
43: sprintf(namebuf, "%s/history", argv[1]);
44:
45: fd = fopen(namebuf, "r");
46: if (fd == NULL) {
47: perror(namebuf);
48: exit(2);
49: }
50:
51: dbminit(namebuf);
52: while (fpos=ftell(fd), fgets(lb, BUFSIZ, fd) != NULL) {
53: p = index(lb, '\t');
54: if (p)
55: *p = 0;
56: lhs.dptr = lb;
57: lhs.dsize = strlen(lb) + 1;
58: rhs.dptr = (char *) &fpos;
59: rhs.dsize = sizeof fpos;
60: rv = store(lhs, rhs);
61: if (rv < 0)
62: fprintf(stderr, "store(%s) failed\n", lb);
63: }
64: exit(0);
65: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.