Any ideas why this db code chews the data while doing a DB walk with "seq"
and replacing data with "put"?
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <db.h>
int main()
{
DB *db_p;
DBT db_key, db_val;
char buf[16];
int i, r, flags;
db_p = dbopen("test.db", O_RDWR|O_CREAT|O_TRUNC, 0644, DB_HASH, NULL);
if (!db_p)
{
printf("fatal: dbopen() failed\n");
exit(0);
}
for (i=0; i<100; i++)
{
snprintf(buf, 16, "%d", i);
db_key.data = &buf;
db_key.size = strlen(buf);
db_val.data = NULL;
db_val.size = 0;
r = (db_p->put)(db_p, &db_key, &db_val, 0);
printf("put(%d) %.*s -> ", r, (int)db_key.size, (char *)db_key.data);
printf("%.*s\n", (int)db_val.size, (char *)db_val.data);
}
for (flags = R_FIRST;; flags = R_NEXT)
{
r = (db_p->seq)(db_p, &db_key, &db_val, flags);
printf("seq(%d) %.*s -> ", r, (int)db_key.size, (char *)db_key.data);
printf("%.*s\n", (int)db_val.size, (char *)db_val.data);
if (r == -1)
{
printf("fatal: error issuing db seq command\n");
exit(0);
}
if (r == 1)
break;
db_val.data = "abc";
db_val.size = 3;
printf("1 put( ) %.*s -> ", (int)db_key.size, (char *)db_key.data);
printf("%.*s\n", (int)db_val.size, (char *)db_val.data);
r = (db_p->put)(db_p, &db_key, &db_val, 0);
printf("2 put(%d) %.*s -> ", r, (int)db_key.size, (char *)db_key.data);
printf("%.*s\n", (int)db_val.size, (char *)db_val.data);
}
db_p->close(db_p);
return(0);
}
---
Mike Wade ([EMAIL PROTECTED])
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-questions" in the body of the message