From owner-freebsd-questions Tue Oct 29 7:41:51 2002 Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5F94637B401 for ; Tue, 29 Oct 2002 07:41:49 -0800 (PST) Received: from fserver.bluehighway.net (pcp01060543pcs.polcht01.tn.comcast.net [68.59.253.233]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7EC5143E6E for ; Tue, 29 Oct 2002 07:41:28 -0800 (PST) (envelope-from mwade@bluehighwaylabs.com) Received: from bluehighway.net (bluehighway.net [192.168.1.10]) by fserver.bluehighway.net (Postfix) with ESMTP id 83DDB5F501 for ; Tue, 29 Oct 2002 10:42:15 -0500 (EST) Date: Tue, 29 Oct 2002 10:42:15 -0500 (EST) From: Mike Wade X-X-Sender: To: Subject: FreeBSD db problems Message-ID: <20021029103610.B19303-100000@bluehighway.net> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-questions@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Any ideas why this db code chews the data while doing a DB walk with "seq" and replacing data with "put"? #include #include #include #include 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@bluehighwaylabs.com) To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message