From 094493115971cf3d5a3138ff10ebe02335824723 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 22 Oct 2009 00:11:34 +1030 Subject: lib/tdb: make tdbtool use tdb_check() for "check" command Also, set logging function so we get more informative messages. Signed-off-by: Rusty Russell --- lib/tdb/tools/tdbtool.c | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) (limited to 'lib/tdb') diff --git a/lib/tdb/tools/tdbtool.c b/lib/tdb/tools/tdbtool.c index e469cebf65..d646515a04 100644 --- a/lib/tdb/tools/tdbtool.c +++ b/lib/tdb/tools/tdbtool.c @@ -115,6 +115,18 @@ static double _end_timer(void) (tp2.tv_usec - tp1.tv_usec)*1.0e-6); } +#ifdef PRINTF_ATTRIBUTE +static void tdb_log(struct tdb_context *tdb, enum tdb_debug_level level, const char *format, ...) PRINTF_ATTRIBUTE(3,4); +#endif +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; @@ -207,9 +219,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)); } @@ -217,8 +232,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)); } @@ -518,25 +537,22 @@ 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) +static int count(TDB_DATA key, TDB_DATA data, void *private) { + (*(unsigned int *)private)++; 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 { + int tdbcount = 0; + if (!the_tdb) printf("Error: No database opened!\n"); - } - - if (tdbcount<0) { + else if (tdb_check(the_tdb, count, &tdbcount) == -1) printf("Integrity check for the opened database failed.\n"); - } else { - printf("Database integrity is OK and has %d records.\n", tdbcount); - } + else + printf("Database integrity is OK and has %d records.\n", + tdbcount); } static int do_command(void) -- cgit