Browse Source

tdb2: tdb_deq: inline helper for comparing two struct tdb_data

Everyone writes their own, so provide a standard one.
Rusty Russell 15 years ago
parent
commit
a4393df8ed

+ 2 - 0
ccan/tdb2/doc/TDB1_porting.txt

@@ -23,3 +23,5 @@ Interface differences between TDB1 and TDB2.
   already formatted, and it takes an enum tdb_log_level not a tdb_debug_level,
   and which has only three values: TDB_LOG_ERROR, TDB_LOG_USE_ERROR and
   TDB_LOG_WARNING.
+
+- tdb2 provides tdb_deq() for comparing two struct tdb_data.

+ 12 - 0
ccan/tdb2/tdb2.h

@@ -40,6 +40,8 @@ extern "C" {
 #include <stdint.h>
 /* For bool */
 #include <stdbool.h>
+/* For memcmp */
+#include <string.h>
 #endif
 #include <ccan/compiler/compiler.h>
 #include <ccan/typesafe_cb/typesafe_cb.h>
@@ -208,6 +210,16 @@ enum TDB_ERROR tdb_delete(struct tdb_context *tdb, struct tdb_data key);
  */
 bool tdb_exists(struct tdb_context *tdb, TDB_DATA key);
 
+/**
+ * tdb_deq - are struct tdb_data equal?
+ * @a: one struct tdb_data
+ * @b: another struct tdb_data
+ */
+static inline bool tdb_deq(struct tdb_data a, struct tdb_data b)
+{
+	return a.dsize == b.dsize && memcmp(a.dptr, b.dptr, a.dsize) == 0;
+}
+
 /**
  * tdb_transaction_start - start a transaction
  * @tdb: the tdb context returned from tdb_open()

+ 1 - 2
ccan/tdb2/test/external-agent.c

@@ -56,8 +56,7 @@ static enum agent_return do_operation(enum operation op, const char *name)
 			ret = FAILED;
 		} else if (ecode < 0) {
 			ret = OTHER_FAILURE;
-		} else if (data.dsize != k.dsize
-			   || memcmp(data.dptr, k.dptr, k.dsize) != 0) {
+		} else if (!tdb_deq(data, k)) {
 			ret = OTHER_FAILURE;
 			free(data.dptr);
 		} else {

+ 0 - 7
ccan/tdb2/test/logging.h

@@ -12,11 +12,4 @@ extern union tdb_attribute tap_log_attr;
 void tap_log_fn(struct tdb_context *tdb,
 		enum tdb_log_level level, void *priv,
 		const char *message);
-
-static inline bool data_equal(struct tdb_data a, struct tdb_data b)
-{
-	if (a.dsize != b.dsize)
-		return false;
-	return memcmp(a.dptr, b.dptr, a.dsize) == 0;
-}
 #endif /* TDB2_TEST_LOGGING_H */

+ 1 - 1
ccan/tdb2/test/run-11-simple-fetch.c

@@ -60,7 +60,7 @@ int main(int argc, char *argv[])
 			if (!ok1(tdb_fetch(tdb, key, &d) == TDB_SUCCESS))
 				goto fail;
 			failtest_suppress = true;
-			ok1(data_equal(d, data));
+			ok1(tdb_deq(d, data));
 			free(d.dptr);
 			ok1(tdb_check(tdb, NULL, NULL) == 0);
 			tdb_close(tdb);

+ 1 - 8
ccan/tdb2/test/run-12-store.c

@@ -16,13 +16,6 @@ static uint64_t fixedhash(const void *key, size_t len, uint64_t seed, void *p)
 			     *(uint64_t *)p);
 }
 
-static bool equal(struct tdb_data a, struct tdb_data b)
-{
-	if (a.dsize != b.dsize)
-		return false;
-	return memcmp(a.dptr, b.dptr, a.dsize) == 0;
-}
-
 int main(int argc, char *argv[])
 {
 	unsigned int i, j;
@@ -54,7 +47,7 @@ int main(int argc, char *argv[])
 			struct tdb_data d = { NULL, 0 }; /* Bogus GCC warning */
 			ok1(tdb_store(tdb, key, data, TDB_REPLACE) == 0);
 			ok1(tdb_fetch(tdb, key, &d) == TDB_SUCCESS);
-			ok1(equal(d, data));
+			ok1(tdb_deq(d, data));
 			free(d.dptr);
 		}
 		tdb_close(tdb);

+ 1 - 3
ccan/tdb2/test/run-13-delete.c

@@ -33,9 +33,7 @@ static bool store_records(struct tdb_context *tdb)
 		if (tdb_store(tdb, key, data, TDB_REPLACE) != 0)
 			return false;
 		tdb_fetch(tdb, key, &d);
-		if (d.dsize != data.dsize)
-			return false;
-		if (memcmp(d.dptr, data.dptr, d.dsize) != 0)
+		if (!tdb_deq(d, data))
 			return false;
 		free(d.dptr);
 	}

+ 1 - 3
ccan/tdb2/test/run-21-parse_record.c

@@ -11,9 +11,7 @@
 
 static enum TDB_ERROR parse(TDB_DATA key, TDB_DATA data, TDB_DATA *expected)
 {
-	if (data.dsize != expected->dsize)
-		return TDB_ERR_EINVAL;
-	if (memcmp(data.dptr, expected->dptr, data.dsize) != 0)
+	if (!tdb_deq(data, *expected))
 		return TDB_ERR_EINVAL;
 	return TDB_SUCCESS;
 }

+ 3 - 6
ccan/tdb2/test/run-open-multiple-times.c

@@ -34,8 +34,7 @@ int main(int argc, char *argv[])
 		/* Store in one, fetch in the other. */
 		ok1(tdb_store(tdb, key, data, TDB_REPLACE) == 0);
 		ok1(tdb_fetch(tdb2, key, &d) == TDB_SUCCESS);
-		ok1(d.dptr && d.dsize == data.dsize
-		    && memcmp(d.dptr, data.dptr, d.dsize) == 0);
+		ok1(tdb_deq(d, data));
 		free(d.dptr);
 
 		/* Vice versa, with delete. */
@@ -47,8 +46,7 @@ int main(int argc, char *argv[])
 
 		ok1(tdb_store(tdb2, key, data, TDB_REPLACE) == 0);
 		ok1(tdb_fetch(tdb2, key, &d) == TDB_SUCCESS);
-		ok1(d.dptr && d.dsize == data.dsize
-		    && memcmp(d.dptr, data.dptr, d.dsize) == 0);
+		ok1(tdb_deq(d, data));
 		free(d.dptr);
 
 		/* Reopen */
@@ -75,8 +73,7 @@ int main(int argc, char *argv[])
 		ok1(tdb_close(tdb2) == 0);
 
 		ok1(tdb_fetch(tdb, key, &d) == TDB_SUCCESS);
-		ok1(d.dptr && d.dsize == data.dsize
-		    && memcmp(d.dptr, data.dptr, d.dsize) == 0);
+		ok1(tdb_deq(d, data));
 		free(d.dptr);
 		ok1(tdb_close(tdb) == 0);
 		ok1(tap_log_messages == 4);