]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/tdb.c
modules: update documentation examples so they compile under ccanlint.
[ccan] / ccan / tdb2 / tdb.c
index 1a229dc2b94c1538e5093a8df55d74b8dd8d74f8..9468e604a7f9fbb0d420ef0c0c7ff8a0e5d51e97 100644 (file)
@@ -234,8 +234,11 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
                tdb->read_only = true;
                /* read only databases don't do locking */
                tdb->flags |= TDB_NOLOCK;
-       } else
+               tdb->mmap_flags = PROT_READ;
+       } else {
                tdb->read_only = false;
+               tdb->mmap_flags = PROT_READ | PROT_WRITE;
+       }
 
        /* internal databases don't need any of the rest. */
        if (tdb->flags & TDB_INTERNAL) {
@@ -429,7 +432,7 @@ int tdb_store(struct tdb_context *tdb,
        struct tdb_used_record rec;
        int ret;
 
-       off = find_and_lock(tdb, key, F_WRLCK, &h, &rec);
+       off = find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL);
        if (unlikely(off == TDB_OFF_ERR))
                return -1;
 
@@ -491,7 +494,7 @@ int tdb_append(struct tdb_context *tdb,
        struct tdb_data new_dbuf;
        int ret;
 
-       off = find_and_lock(tdb, key, F_WRLCK, &h, &rec);
+       off = find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL);
        if (unlikely(off == TDB_OFF_ERR))
                return -1;
 
@@ -559,7 +562,7 @@ struct tdb_data tdb_fetch(struct tdb_context *tdb, struct tdb_data key)
        struct hash_info h;
        struct tdb_data ret;
 
-       off = find_and_lock(tdb, key, F_RDLCK, &h, &rec);
+       off = find_and_lock(tdb, key, F_RDLCK, &h, &rec, NULL);
        if (unlikely(off == TDB_OFF_ERR))
                return tdb_null;
 
@@ -582,7 +585,7 @@ int tdb_delete(struct tdb_context *tdb, struct tdb_data key)
        struct tdb_used_record rec;
        struct hash_info h;
 
-       off = find_and_lock(tdb, key, F_WRLCK, &h, &rec);
+       off = find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL);
        if (unlikely(off == TDB_OFF_ERR))
                return -1;
 
@@ -656,3 +659,21 @@ enum TDB_ERROR tdb_error(struct tdb_context *tdb)
 {
        return tdb->ecode;
 }
+
+const char *tdb_errorstr(struct tdb_context *tdb)
+{
+       /* Gcc warns if you miss a case in the switch, so use that. */
+       switch (tdb->ecode) {
+       case TDB_SUCCESS: return "Success";
+       case TDB_ERR_CORRUPT: return "Corrupt database";
+       case TDB_ERR_IO: return "IO Error";
+       case TDB_ERR_LOCK: return "Locking error";
+       case TDB_ERR_OOM: return "Out of memory";
+       case TDB_ERR_EXISTS: return "Record exists";
+       case TDB_ERR_NESTING: return "Transaction already started";
+       case TDB_ERR_EINVAL: return "Invalid parameter";
+       case TDB_ERR_NOEXIST: return "Record does not exist";
+       case TDB_ERR_RDONLY: return "write not permitted";
+       }
+       return "Invalid error code";
+}