mirror of
https://github.com/stefanocasazza/ULib.git
synced 2025-09-28 19:05:55 +08:00
52 lines
891 B
C
52 lines
891 B
C
#include "exit.h"
|
|
#include "scan.h"
|
|
#include "str.h"
|
|
#include "buffer.h"
|
|
#include "strerr.h"
|
|
#include "cdb.h"
|
|
|
|
#define FATAL "cdbnext: 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: ");
|
|
}
|
|
|
|
static struct cdb c;
|
|
char buf[1024];
|
|
|
|
main(int argc,char **argv)
|
|
{
|
|
char *key;
|
|
int r;
|
|
uint32 pos;
|
|
uint32 len;
|
|
unsigned long u = 0;
|
|
|
|
key = argv[1];
|
|
|
|
cdb_init(&c,0);
|
|
|
|
r=cdb_successor(&c,key,key?strlen(key):0);
|
|
if (r == -1) die_read();
|
|
if (!r) _exit(100);
|
|
|
|
pos = cdb_keypos(&c);
|
|
len = cdb_keylen(&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);
|
|
}
|