dbwrap: add dbwrap_check() function.
authorRusty Russell <rusty@rustcorp.com.au>
Fri, 22 Jun 2012 05:37:43 +0000 (15:07 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 22 Jun 2012 05:35:17 +0000 (07:35 +0200)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
lib/dbwrap/dbwrap.c
lib/dbwrap/dbwrap.h
lib/dbwrap/dbwrap_private.h
lib/dbwrap/dbwrap_tdb.c

index a39396042899f35d2dfdf97efdb78b9776e03682..d46044f0c4f6a7fcc3a88260c8032e95296de2f8 100644 (file)
@@ -50,6 +50,19 @@ static int dbwrap_fallback_wipe(struct db_context *db)
        return NT_STATUS_IS_OK(status) ? 0 : -1;
 }
 
+static int do_nothing(struct db_record *rec, void *unused)
+{
+       return 0;
+}
+
+/*
+ * Fallback check operation: just traverse.
+ */
+static int dbwrap_fallback_check(struct db_context *db)
+{
+       NTSTATUS status = dbwrap_traverse_read(db, do_nothing, NULL, NULL);
+       return NT_STATUS_IS_OK(status) ? 0 : -1;
+}
 
 /*
  * Wrapper functions for the backend methods
@@ -367,6 +380,14 @@ int dbwrap_wipe(struct db_context *db)
        return db->wipe(db);
 }
 
+int dbwrap_check(struct db_context *db)
+{
+       if (db->check == NULL) {
+               return dbwrap_fallback_check(db);
+       }
+       return db->check(db);
+}
+
 int dbwrap_get_seqnum(struct db_context *db)
 {
        return db->get_seqnum(db);
index 6c789e91a438c995e263ada8c09681b28b8d9bb3..23a43da019cde74eea8ca7e6ee1e0139b60235d4 100644 (file)
@@ -69,6 +69,7 @@ NTSTATUS dbwrap_parse_record(struct db_context *db, TDB_DATA key,
                                            void *private_data),
                             void *private_data);
 int dbwrap_wipe(struct db_context *db);
+int dbwrap_check(struct db_context *db);
 int dbwrap_get_seqnum(struct db_context *db);
 int dbwrap_transaction_start(struct db_context *db);
 int dbwrap_transaction_commit(struct db_context *db);
index 7f9904c8a56938c2643eb5da88863b135d80d870..af8374dbc93ab3a5b5b8b54f9bbd3abb1600bad3 100644 (file)
@@ -56,6 +56,7 @@ struct db_context {
                                 void *private_data);
        int (*exists)(struct db_context *db,TDB_DATA key);
        int (*wipe)(struct db_context *db);
+       int (*check)(struct db_context *db);
        void (*id)(struct db_context *db, const uint8_t **id, size_t *idlen);
        void *private_data;
        enum dbwrap_lock_order lock_order;
index 1452ff7e8acc1d78c371a3d14cfc2bec3604d51e..fb6841bcb67c6bd093c0cac5cf9e17c20349b426 100644 (file)
@@ -187,6 +187,13 @@ static int db_tdb_wipe(struct db_context *db)
        return tdb_wipe_all(ctx->wtdb->tdb);
 }
 
+static int db_tdb_check(struct db_context *db)
+{
+       struct db_tdb_ctx *ctx = talloc_get_type_abort(
+               db->private_data, struct db_tdb_ctx);
+       return tdb_check(ctx->wtdb->tdb, NULL, NULL);
+}
+
 struct db_tdb_parse_state {
        void (*parser)(TDB_DATA key, TDB_DATA data,
                       void *private_data);
@@ -434,6 +441,7 @@ struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
        result->exists = db_tdb_exists;
        result->wipe = db_tdb_wipe;
        result->id = db_tdb_id;
+       result->check = db_tdb_check;
        result->stored_callback = NULL;
        return result;