*/
#include <ccan/tdb/tdb.h>
+#include <ccan/hash/hash.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
enum commands {
CMD_CREATE_TDB,
CMD_OPEN_TDB,
+ CMD_OPENJH_TDB,
CMD_TRANSACTION_START,
CMD_TRANSACTION_COMMIT,
CMD_TRANSACTION_CANCEL,
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},
"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"
}
}
-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));
}
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 */
return 0;
case CMD_CREATE_TDB:
case CMD_OPEN_TDB:
+ case CMD_OPENJH_TDB:
case CMD_SYSTEM:
case CMD_QUIT:
/*