]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/test/external-agent.c
tdb2: rename internal hashfn and logfn to hash_fn and log_fn.
[ccan] / ccan / tdb2 / test / external-agent.c
index 353148029736ac635d456077bb0716815c92fc8a..df51a0c5197baf2a311950c757a85f6a09bec556 100644 (file)
@@ -22,6 +22,7 @@ static enum agent_return do_operation(enum operation op, const char *name)
        TDB_DATA k;
        enum agent_return ret;
        TDB_DATA data;
+       enum TDB_ERROR ecode;
 
        if (op != OPEN && !tdb) {
                diag("external: No tdb open!");
@@ -30,8 +31,7 @@ static enum agent_return do_operation(enum operation op, const char *name)
 
        diag("external: %s", operation_name(op));
 
-       k.dptr = (void *)name;
-       k.dsize = strlen(name);
+       k = tdb_mkdata(name, strlen(name));
 
        locking_would_block = 0;
        switch (op) {
@@ -50,19 +50,18 @@ static enum agent_return do_operation(enum operation op, const char *name)
                        ret = SUCCESS;
                break;
        case FETCH:
-               data = tdb_fetch(tdb, k);
-               if (data.dptr == NULL) {
-                       if (tdb_error(tdb) == TDB_ERR_NOEXIST)
-                               ret = FAILED;
-                       else
-                               ret = OTHER_FAILURE;
-               } else if (data.dsize != k.dsize
-                          || memcmp(data.dptr, k.dptr, k.dsize) != 0) {
+               ecode = tdb_fetch(tdb, k, &data);
+               if (ecode == TDB_ERR_NOEXIST) {
+                       ret = FAILED;
+               } else if (ecode < 0) {
                        ret = OTHER_FAILURE;
+               } else if (!tdb_deq(data, k)) {
+                       ret = OTHER_FAILURE;
+                       free(data.dptr);
                } else {
                        ret = SUCCESS;
+                       free(data.dptr);
                }
-               free(data.dptr);
                break;
        case STORE:
                ret = tdb_store(tdb, k, k, 0) == 0 ? SUCCESS : OTHER_FAILURE;