Date: Tue, 29 Oct 2002 13:33:32 -0500 (EST) From: Mike Wade <mwade@cdc.net> To: <freebsd-questions@freebsd.org> Subject: FreeBSD db problems Message-ID: <20021029133305.F19661-100000@bluehighway.net>
next in thread | raw e-mail | index | archive | help
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 (mwade@cdc.net)
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021029133305.F19661-100000>
