X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb%2Ftools%2Ftdbtool.c;h=3093efa3c34da8f0ad06c14f842669fcd62bfbc6;hp=ce712e0e83863013a99d627feccfc040139f3b04;hb=98b8ada203137a324f1712c042f7f6f3a5ef9ea0;hpb=6065776a15d6a54a2b5af9752226e5128cb13fe4 diff --git a/ccan/tdb/tools/tdbtool.c b/ccan/tdb/tools/tdbtool.c index ce712e0e..3093efa3 100644 --- a/ccan/tdb/tools/tdbtool.c +++ b/ccan/tdb/tools/tdbtool.c @@ -30,6 +30,7 @@ #include #include #include +#include static int do_command(void); const char *cmdname; @@ -119,6 +120,15 @@ static double _end_timer(void) (tp2.tv_usec - tp1.tv_usec)*1.0e-6); } +static void tdb_log(struct tdb_context *tdb, enum tdb_debug_level level, const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); +} + /* a tdb tool for manipulating a tdb database */ static TDB_CONTEXT *tdb; @@ -179,6 +189,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" @@ -211,9 +222,12 @@ static void terror(const char *why) static void create_tdb(const char *tdbname) { + struct tdb_logging_context log_ctx; + log_ctx.log_fn = tdb_log; + if (tdb) tdb_close(tdb); - tdb = tdb_open(tdbname, 0, TDB_CLEAR_IF_FIRST | (disable_mmap?TDB_NOMMAP:0), - O_RDWR | O_CREAT | O_TRUNC, 0600); + tdb = tdb_open_ex(tdbname, 0, TDB_CLEAR_IF_FIRST | (disable_mmap?TDB_NOMMAP:0), + O_RDWR | O_CREAT | O_TRUNC, 0600, &log_ctx, NULL); if (!tdb) { printf("Could not create %s: %s\n", tdbname, strerror(errno)); } @@ -221,8 +235,12 @@ static void create_tdb(const char *tdbname) static void open_tdb(const char *tdbname) { + struct tdb_logging_context log_ctx; + log_ctx.log_fn = tdb_log; + if (tdb) tdb_close(tdb); - tdb = tdb_open(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); if (!tdb) { printf("Could not open %s: %s\n", tdbname, strerror(errno)); } @@ -394,12 +412,14 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf, void * static void info_tdb(void) { - int count; - total_bytes = 0; - if ((count = tdb_traverse(tdb, traverse_fn, NULL)) == -1) + char *summary = tdb_summary(tdb); + + if (!summary) { printf("Error = %s\n", tdb_errorstr(tdb)); - else - printf("%d records totalling %d bytes\n", count, total_bytes); + } else { + printf("%s", summary); + free(summary); + } } static void speed_tdb(const char *tlimit) @@ -522,24 +542,15 @@ static void next_record(TDB_CONTEXT *the_tdb, TDB_DATA *pkey) print_rec(the_tdb, *pkey, dbuf, NULL); } -static int test_fn(TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf, void *state) -{ - return 0; -} - static void check_db(TDB_CONTEXT *the_tdb) { - int tdbcount=-1; - if (the_tdb) { - tdbcount = tdb_traverse(the_tdb, test_fn, NULL); - } else { + if (!the_tdb) { printf("Error: No database opened!\n"); - } - - if (tdbcount<0) { - printf("Integrity check for the opened database failed.\n"); } else { - printf("Database integrity is OK and has %d records.\n", tdbcount); + if (tdb_check(the_tdb, NULL, NULL) == -1) + printf("Integrity check for the opened database failed.\n"); + else + printf("Database integrity is OK.\n"); } }