Mercurial > hg > cdb
comparison cdbget.c @ 0:2cb46628feec
from cdb-0.75 per http://cr.yp.to/cdb.html,
retrieved 2025-01-03,
contents appear to have been create on 2000-02-19
| author | Henry S. Thompson <ht@inf.ed.ac.uk> |
|---|---|
| date | Wed, 29 Jan 2025 10:50:34 +0000 |
| parents | |
| children | 3bfef1f22a97 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:2cb46628feec |
|---|---|
| 1 #include "exit.h" | |
| 2 #include "scan.h" | |
| 3 #include "str.h" | |
| 4 #include "buffer.h" | |
| 5 #include "strerr.h" | |
| 6 #include "cdb.h" | |
| 7 | |
| 8 #define FATAL "cdbget: fatal: " | |
| 9 | |
| 10 void die_read(void) | |
| 11 { | |
| 12 strerr_die2sys(111,FATAL,"unable to read input: "); | |
| 13 } | |
| 14 void die_write(void) | |
| 15 { | |
| 16 strerr_die2sys(111,FATAL,"unable to write output: "); | |
| 17 } | |
| 18 void die_usage(void) | |
| 19 { | |
| 20 strerr_die1x(111,"cdbget: usage: cdbget key [skip]"); | |
| 21 } | |
| 22 | |
| 23 static struct cdb c; | |
| 24 char buf[1024]; | |
| 25 | |
| 26 main(int argc,char **argv) | |
| 27 { | |
| 28 char *key; | |
| 29 int r; | |
| 30 uint32 pos; | |
| 31 uint32 len; | |
| 32 unsigned long u = 0; | |
| 33 | |
| 34 if (!*argv) die_usage(); | |
| 35 | |
| 36 if (!*++argv) die_usage(); | |
| 37 key = *argv; | |
| 38 | |
| 39 if (*++argv) { | |
| 40 scan_ulong(*argv,&u); | |
| 41 } | |
| 42 | |
| 43 cdb_init(&c,0); | |
| 44 cdb_findstart(&c); | |
| 45 | |
| 46 for (;;) { | |
| 47 r = cdb_findnext(&c,key,str_len(key)); | |
| 48 if (r == -1) die_read(); | |
| 49 if (!r) _exit(100); | |
| 50 if (!u) break; | |
| 51 --u; | |
| 52 } | |
| 53 | |
| 54 pos = cdb_datapos(&c); | |
| 55 len = cdb_datalen(&c); | |
| 56 | |
| 57 while (len > 0) { | |
| 58 r = sizeof buf; | |
| 59 if (r > len) r = len; | |
| 60 if (cdb_read(&c,buf,r,pos) == -1) die_read(); | |
| 61 if (buffer_put(buffer_1small,buf,r) == -1) die_write(); | |
| 62 pos += r; | |
| 63 len -= r; | |
| 64 } | |
| 65 if (buffer_flush(buffer_1small) == -1) die_write(); | |
| 66 _exit(0); | |
| 67 } |
