-rw-r--r-- 1245 cdb-20251021/cdbget.c raw
#include <unistd.h> #include <string.h> #include "outbuf.h" #include "strerr.h" #include "cdb.h" #ifdef CDB64 #define FATAL "cdb64get: fatal: " #else #define FATAL "cdbget: fatal: " #endif static void die_read(void) { strerr_die2sys(111,FATAL,"unable to read input: "); } static void die_write(void) { strerr_die2sys(111,FATAL,"unable to write output: "); } static void die_usage(void) { strerr_die1x(111,"cdbget: usage: cdbget key [skip]"); } static struct cdb c; static char buf[1024]; int main(int argc,char **argv) { char *key; num r; num pos; num len; num u = 0; if (!*argv) die_usage(); if (!*++argv) die_usage(); key = *argv; if (*++argv) u = num_fromstring_allowoverflow(*argv); cdb_init(&c,0); cdb_findstart(&c); for (;;) { r = cdb_findnext(&c,key,strlen(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 (outbuf_put(outbuf_1small,buf,r) == -1) die_write(); pos += r; len -= r; } if (outbuf_flush(outbuf_1small) == -1) die_write(); _exit(0); return 0; }