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>