Browse Source

tdb: new command openjh for tdbtool (to use Jenkins hash)

Rusty Russell 15 years ago
parent
commit
2b2d18863f
2 changed files with 18 additions and 4 deletions
  1. 1 1
      ccan/tdb/tools/Makefile
  2. 17 3
      ccan/tdb/tools/tdbtool.c

+ 1 - 1
ccan/tdb/tools/Makefile

@@ -1,4 +1,4 @@
-LDLIBS:=../../tdb.o
+LDLIBS:=../../tdb.o ../../hash.o
 CFLAGS:=-I../../.. -Wall -O3 #-g -pg
 CFLAGS:=-I../../.. -Wall -O3 #-g -pg
 LDFLAGS:=-L../../..
 LDFLAGS:=-L../../..
 
 

+ 17 - 3
ccan/tdb/tools/tdbtool.c

@@ -21,6 +21,7 @@
 */
 */
 
 
 #include <ccan/tdb/tdb.h>
 #include <ccan/tdb/tdb.h>
+#include <ccan/hash/hash.h>
 #include <stdlib.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <stdio.h>
 #include <ctype.h>
 #include <ctype.h>
@@ -45,6 +46,7 @@ static int disable_mmap;
 enum commands {
 enum commands {
 	CMD_CREATE_TDB,
 	CMD_CREATE_TDB,
 	CMD_OPEN_TDB,
 	CMD_OPEN_TDB,
+	CMD_OPENJH_TDB,
 	CMD_TRANSACTION_START,
 	CMD_TRANSACTION_START,
 	CMD_TRANSACTION_COMMIT,
 	CMD_TRANSACTION_COMMIT,
 	CMD_TRANSACTION_CANCEL,
 	CMD_TRANSACTION_CANCEL,
@@ -78,6 +80,7 @@ typedef struct {
 COMMAND_TABLE cmd_table[] = {
 COMMAND_TABLE cmd_table[] = {
 	{"create",	CMD_CREATE_TDB},
 	{"create",	CMD_CREATE_TDB},
 	{"open",	CMD_OPEN_TDB},
 	{"open",	CMD_OPEN_TDB},
+	{"openjh",	CMD_OPENJH_TDB},
 	{"transaction_start",	CMD_TRANSACTION_START},
 	{"transaction_start",	CMD_TRANSACTION_START},
 	{"transaction_commit",	CMD_TRANSACTION_COMMIT},
 	{"transaction_commit",	CMD_TRANSACTION_COMMIT},
 	{"transaction_cancel",	CMD_TRANSACTION_CANCEL},
 	{"transaction_cancel",	CMD_TRANSACTION_CANCEL},
@@ -189,6 +192,7 @@ static void help(void)
 "tdbtool: \n"
 "tdbtool: \n"
 "  create    dbname     : create a database\n"
 "  create    dbname     : create a database\n"
 "  open      dbname     : open an existing 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_start    : start a transaction\n"
 "  transaction_commit   : commit a transaction\n"
 "  transaction_commit   : commit a transaction\n"
 "  transaction_cancel   : cancel 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;
 	struct tdb_logging_context log_ctx;
 	log_ctx.log_fn = tdb_log;
 	log_ctx.log_fn = tdb_log;
 
 
 	if (tdb) tdb_close(tdb);
 	if (tdb) tdb_close(tdb);
 	tdb = tdb_open_ex(tdbname, 0, disable_mmap?TDB_NOMMAP:0, O_RDWR, 0600,
 	tdb = tdb_open_ex(tdbname, 0, disable_mmap?TDB_NOMMAP:0, O_RDWR, 0600,
-			  &log_ctx, NULL);
+			  &log_ctx, hashfn);
 	if (!tdb) {
 	if (!tdb) {
 		printf("Could not open %s: %s\n", tdbname, strerror(errno));
 		printf("Could not open %s: %s\n", tdbname, strerror(errno));
 	}
 	}
@@ -577,7 +586,11 @@ static int do_command(void)
 		return 0;
 		return 0;
 	case CMD_OPEN_TDB:
 	case CMD_OPEN_TDB:
 		bIterate = 0;
 		bIterate = 0;
-		open_tdb(arg1);
+		open_tdb(arg1, NULL);
+		return 0;
+	case CMD_OPENJH_TDB:
+		bIterate = 0;
+		open_tdb(arg1, jenkins_hash);
 		return 0;
 		return 0;
 	case CMD_SYSTEM:
 	case CMD_SYSTEM:
 		/* Shell command */
 		/* Shell command */
@@ -673,6 +686,7 @@ static int do_command(void)
 			return 0;
 			return 0;
 		case CMD_CREATE_TDB:
 		case CMD_CREATE_TDB:
 		case CMD_OPEN_TDB:
 		case CMD_OPEN_TDB:
+		case CMD_OPENJH_TDB:
 		case CMD_SYSTEM:
 		case CMD_SYSTEM:
 		case CMD_QUIT:
 		case CMD_QUIT:
 			/*
 			/*