annotate cdbget.c @ 16:70f4df5a7283

add cdb_write, log basic mmap outcomes
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Thu, 27 Feb 2025 18:26:29 +0000
parents 4cc3224ebf41
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
1 #include "exit.h"
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
2 #include "scan.h"
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
3 #include "str.h"
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
4 #include "buffer.h"
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
5 #include "strerr.h"
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
6 #include "cdb.h"
13
0a35d8de4296 support profiling with gprof
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 10
diff changeset
7 #include <stdlib.h>
0
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
8
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
9 #define FATAL "cdbget: fatal: "
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
10
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
11 void die_read(void)
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
12 {
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
13 strerr_die2sys(111,FATAL,"unable to read input: ");
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
14 }
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
15 void die_write(void)
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
16 {
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
17 strerr_die2sys(111,FATAL,"unable to write output: ");
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
18 }
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
19 void die_usage(void)
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
20 {
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
21 strerr_die1x(111,"cdbget: usage: cdbget key [skip]");
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
22 }
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
23
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
24 static struct cdb c;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
25 char buf[1024];
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
26
10
3bfef1f22a97 trivial changes to get rid of compile-time warnings
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 0
diff changeset
27 int main(int argc,char **argv)
0
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
28 {
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
29 char *key;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
30 int r;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
31 uint32 pos;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
32 uint32 len;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
33 unsigned long u = 0;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
34
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
35 if (!*argv) die_usage();
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
36
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
37 if (!*++argv) die_usage();
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
38 key = *argv;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
39
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
40 if (*++argv) {
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
41 scan_ulong(*argv,&u);
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
42 }
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
43
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
44 cdb_init(&c,0);
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
45 cdb_findstart(&c);
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
46
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
47 for (;;) {
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
48 r = cdb_findnext(&c,key,str_len(key));
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
49 if (r == -1) die_read();
13
0a35d8de4296 support profiling with gprof
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 10
diff changeset
50 if (!r) exit(100);
0
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
51 if (!u) break;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
52 --u;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
53 }
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
54
15
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
55 cdb_write(&c,1);
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
56 /* pos = cdb_datapos(&c); */
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
57 /* len = cdb_datalen(&c); */
0
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
58
15
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
59 /* while (len > 0) { */
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
60 /* r = sizeof buf; */
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
61 /* if (r > len) r = len; */
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
62 /* if (cdb_read(&c,buf,r,pos) == -1) die_read(); */
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
63 /* if (buffer_put(buffer_1small,buf,r) == -1) die_write(); */
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
64 /* pos += r; */
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
65 /* len -= r; */
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
66 /* } */
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
67 /* if (buffer_flush(buffer_1small) == -1) die_write(); */
13
0a35d8de4296 support profiling with gprof
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 10
diff changeset
68 exit(0);
0
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
69 }
15
4cc3224ebf41 use cdb_write
Henry S. Thompson <ht@inf.ed.ac.uk>
parents: 13
diff changeset
70