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

Reply via email to