-rw-r--r-- 1149 cdb-0.55/cdbdump.c raw
#include <stdio.h>
#include "cdb.h"
void format()
{
fputs("cdbdump: fatal: bad database format\n",stderr);
exit(1);
}
void readerror()
{
if (ferror(stdin)) { perror("cdbdump: fatal: unable to read"); exit(111); }
format();
}
void main()
{
uint32 eod;
uint32 pos;
uint32 klen;
uint32 dlen;
char buf[8];
int i;
int c;
if (fread(buf,1,4,stdin) < 4) readerror();
eod = cdb_unpack(buf);
for (i = 4;i < 2048;++i) if (getchar() == EOF) readerror();
pos = 2048;
while (pos < eod) {
if (eod - pos < 8) format();
pos += 8;
if (fread(buf,1,8,stdin) < 8) readerror();
klen = cdb_unpack(buf);
dlen = cdb_unpack(buf + 4);
if (eod - pos < klen) format();
pos += klen;
if (eod - pos < dlen) format();
pos += dlen;
printf("+%lu,%lu:",(unsigned long) klen,(unsigned long) dlen);
while (klen) {
--klen;
c = getchar();
if (c == EOF) readerror();
putchar(c);
}
fputs("->",stdout);
while (dlen) {
--dlen;
c = getchar();
if (c == EOF) readerror();
putchar(c);
}
fputs("\n",stdout);
}
fputs("\n",stdout);
exit(0);
}