From: Rusty Russell Date: Mon, 13 Sep 2010 09:17:14 +0000 (+0930) Subject: tdb: fix tdb_check() on other-endian tdbs. X-Git-Url: http://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=a1ace0cd114e0c588d6ce1b9e7386af11716e0bd tdb: fix tdb_check() on other-endian tdbs. We must not endian-convert the magic string, just the rest. --- diff --git a/ccan/tdb/check.c b/ccan/tdb/check.c index a9a9ece0..53fb2866 100644 --- a/ccan/tdb/check.c +++ b/ccan/tdb/check.c @@ -30,7 +30,7 @@ static bool tdb_check_header(struct tdb_context *tdb, tdb_off_t *recovery) { struct tdb_header hdr; - if (tdb->methods->tdb_read(tdb, 0, &hdr, sizeof(hdr), DOCONV()) == -1) + if (tdb->methods->tdb_read(tdb, 0, &hdr, sizeof(hdr), 0) == -1) return false; if (strcmp(hdr.magic_food, TDB_MAGIC_FOOD) != 0) goto corrupt; diff --git a/ccan/tdb/test/run-check.c b/ccan/tdb/test/run-check.c index fe0842d3..4a57eb6f 100644 --- a/ccan/tdb/test/run-check.c +++ b/ccan/tdb/test/run-check.c @@ -19,7 +19,7 @@ int main(int argc, char *argv[]) struct tdb_context *tdb; TDB_DATA key, data; - plan_tests(9); + plan_tests(13); tdb = tdb_open_ex("run-check.tdb", 1, TDB_CLEAR_IF_FIRST, O_CREAT|O_TRUNC|O_RDWR, 0600, &taplogctx, NULL); @@ -48,5 +48,18 @@ int main(int argc, char *argv[]) ok1(tdb_error(tdb) == TDB_ERR_CORRUPT); tdb_close(tdb); + /* Big and little endian should work! */ + tdb = tdb_open_ex("test/tdb-le.tdb", 1024, 0, O_RDWR, 0, + &taplogctx, NULL); + ok1(tdb); + ok1(tdb_check(tdb, NULL, NULL) == 0); + tdb_close(tdb); + + tdb = tdb_open_ex("test/tdb-be.tdb", 1024, 0, O_RDWR, 0, + &taplogctx, NULL); + ok1(tdb); + ok1(tdb_check(tdb, NULL, NULL) == 0); + tdb_close(tdb); + return exit_status(); } diff --git a/ccan/tdb/test/tdb-be.tdb b/ccan/tdb/test/tdb-be.tdb new file mode 100644 index 00000000..1c49116c Binary files /dev/null and b/ccan/tdb/test/tdb-be.tdb differ diff --git a/ccan/tdb/test/tdb-le.tdb b/ccan/tdb/test/tdb-le.tdb new file mode 100644 index 00000000..0655072d Binary files /dev/null and b/ccan/tdb/test/tdb-le.tdb differ