Mercurial > hg > cdb
view cdbget.c @ 13:0a35d8de4296
support profiling with gprof
| author | Henry S. Thompson <ht@inf.ed.ac.uk> |
|---|---|
| date | Fri, 07 Feb 2025 14:43:27 +0000 |
| parents | 3bfef1f22a97 |
| children | 4cc3224ebf41 |
line wrap: on
line source
#include "exit.h" #include "scan.h" #include "str.h" #include "buffer.h" #include "strerr.h" #include "cdb.h" #include <stdlib.h> #define FATAL "cdbget: fatal: " void die_read(void) { strerr_die2sys(111,FATAL,"unable to read input: "); } void die_write(void) { strerr_die2sys(111,FATAL,"unable to write output: "); } void die_usage(void) { strerr_die1x(111,"cdbget: usage: cdbget key [skip]"); } static struct cdb c; char buf[1024]; int main(int argc,char **argv) { char *key; int r; uint32 pos; uint32 len; unsigned long u = 0; if (!*argv) die_usage(); if (!*++argv) die_usage(); key = *argv; if (*++argv) { scan_ulong(*argv,&u); } cdb_init(&c,0); cdb_findstart(&c); for (;;) { r = cdb_findnext(&c,key,str_len(key)); if (r == -1) die_read(); if (!r) exit(100); if (!u) break; --u; } pos = cdb_datapos(&c); len = cdb_datalen(&c); while (len > 0) { r = sizeof buf; if (r > len) r = len; if (cdb_read(&c,buf,r,pos) == -1) die_read(); if (buffer_put(buffer_1small,buf,r) == -1) die_write(); pos += r; len -= r; } if (buffer_flush(buffer_1small) == -1) die_write(); exit(0); }
