tdb: new command openjh for tdbtool (to use Jenkins hash)
authorRusty Russell <rusty@rustcorp.com.au>
Thu, 9 Sep 2010 11:08:13 +0000 (20:38 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Thu, 9 Sep 2010 11:08:13 +0000 (20:38 +0930)
ccan/tdb/tools/Makefile
ccan/tdb/tools/tdbtool.c

index 38899e1aa4df11eac7c507a142ddfcb87de4f191..8febc40ff77505a0128885210e0604b0af2f077f 100644 (file)
@@ -1,4 +1,4 @@
-LDLIBS:=../../tdb.o
+LDLIBS:=../../tdb.o ../../hash.o
 CFLAGS:=-I../../.. -Wall -O3 #-g -pg
 LDFLAGS:=-L../../..
 
index 2dff739586b73a434679ffb139b4d6dfdec6c256..494d1f3800fb8be5b599a1c59277fc67510be033 100644 (file)
@@ -21,6 +21,7 @@
 */
 
 #include <ccan/tdb/tdb.h>
+#include <ccan/hash/hash.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <ctype.h>
@@ -45,6 +46,7 @@ static int disable_mmap;
 enum commands {
        CMD_CREATE_TDB,
        CMD_OPEN_TDB,
+       CMD_OPENJH_TDB,
        CMD_TRANSACTION_START,
        CMD_TRANSACTION_COMMIT,
        CMD_TRANSACTION_CANCEL,
@@ -78,6 +80,7 @@ typedef struct {
 COMMAND_TABLE cmd_table[] = {
        {"create",      CMD_CREATE_TDB},
        {"open",        CMD_OPEN_TDB},
+       {"openjh",      CMD_OPENJH_TDB},
        {"transaction_start",   CMD_TRANSACTION_START},
        {"transaction_commit",  CMD_TRANSACTION_COMMIT},
        {"transaction_cancel",  CMD_TRANSACTION_CANCEL},
@@ -189,6 +192,7 @@ static void help(void)
 "tdbtool: \n"
 "  create    dbname     : create a database\n"
 "  open      dbname     : open an existing database\n"
+"  openjh    dbname     : open an existing database (jenkins hash)\n"
 "  transaction_start    : start a transaction\n"
 "  transaction_commit   : commit a transaction\n"
 "  transaction_cancel   : cancel a transaction\n"
@@ -232,14 +236,19 @@ static void create_tdb(const char *tdbname)
        }
 }
 
-static void open_tdb(const char *tdbname)
+static unsigned int jenkins_hash(TDB_DATA *key)
+{
+       return hash_any(key->dptr, key->dsize, 0);
+}
+
+static void open_tdb(const char *tdbname, tdb_hash_func hashfn)
 {
        struct tdb_logging_context log_ctx;
        log_ctx.log_fn = tdb_log;
 
        if (tdb) tdb_close(tdb);
        tdb = tdb_open_ex(tdbname, 0, disable_mmap?TDB_NOMMAP:0, O_RDWR, 0600,
-                         &log_ctx, NULL);
+                         &log_ctx, hashfn);
        if (!tdb) {
                printf("Could not open %s: %s\n", tdbname, strerror(errno));
        }
@@ -577,7 +586,11 @@ static int do_command(void)
                return 0;
        case CMD_OPEN_TDB:
                bIterate = 0;
-               open_tdb(arg1);
+               open_tdb(arg1, NULL);
+               return 0;
+       case CMD_OPENJH_TDB:
+               bIterate = 0;
+               open_tdb(arg1, jenkins_hash);
                return 0;
        case CMD_SYSTEM:
                /* Shell command */
@@ -673,6 +686,7 @@ static int do_command(void)
                        return 0;
                case CMD_CREATE_TDB:
                case CMD_OPEN_TDB:
+               case CMD_OPENJH_TDB:
                case CMD_SYSTEM:
                case CMD_QUIT:
                        /*