]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/open.c
tdb2: TDB_SEQNUM and tdb_get_seqnum support.
[ccan] / ccan / tdb2 / open.c
index 6d930be14f6f4b14faeb44e0beae7dbc3a59b1e1..f2d23aed9cc2abe07cf1d1624f266c63ebd1797e 100644 (file)
@@ -107,6 +107,7 @@ static enum TDB_ERROR tdb_new_database(struct tdb_context *tdb,
                                         tdb->hash_priv);
        newdb.hdr.recovery = 0;
        newdb.hdr.features_used = newdb.hdr.features_offered = TDB_FEATURE_MASK;
+       newdb.hdr.seqnum = 0;
        memset(newdb.hdr.reserved, 0, sizeof(newdb.hdr.reserved));
        /* Initial hashes are empty. */
        memset(newdb.hdr.hashtable, 0, sizeof(newdb.hdr.hashtable));
@@ -243,7 +244,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
        }
 
        if (tdb_flags & ~(TDB_INTERNAL | TDB_NOLOCK | TDB_NOMMAP | TDB_CONVERT
-                         | TDB_NOSYNC)) {
+                         | TDB_NOSYNC | TDB_SEQNUM)) {
                ecode = tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,
                                   "tdb_open: unknown flags %u", tdb_flags);
                goto fail;
@@ -276,6 +277,16 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
                if (ecode != TDB_SUCCESS) {
                        goto fail;
                }
+               if (name) {
+                       tdb->name = strdup(name);
+                       if (!tdb->name) {
+                               ecode = tdb_logerr(tdb, TDB_ERR_OOM,
+                                                  TDB_LOG_ERROR,
+                                                  "tdb_open: failed to"
+                                                  " allocate name");
+                               goto fail;
+                       }
+               }
                tdb_convert(tdb, &hdr.hash_seed, sizeof(hdr.hash_seed));
                tdb->hash_seed = hdr.hash_seed;
                tdb_ftable_init(tdb);