Less cut & paste means less patching as failtest changes.
 #include <string.h>
 #include <ccan/tap/tap.h>
 
+bool failtest_suppress = false;
+
 /* FIXME: From ccan/str */
 static inline bool strends(const char *str, const char *postfix)
 {
 {
        const struct failtest_call *i, *last = &history[num-1];
 
+       if (failtest_suppress)
+               return FAIL_DONT_FAIL;
+
        if (failmatch(last, INITIAL_TDB_MALLOC)
            || failmatch(last, URANDOM_OPEN)
            || failmatch(last, URANDOM_READ)) {
 
 enum failtest_result
 block_repeat_failures(struct failtest_call *history, unsigned num);
 
+/* Set this to suppress failure. */
+extern bool failtest_suppress;
+
 #endif /* TDB2_TEST_LOGGING_H */
 
 #include "logging.h"
 #include "failtest_helper.h"
 
-static bool failtest_suppress = false;
-
-/* Don't need to test everything here, just want expand testing. */
-static enum failtest_result
-suppress_failure(struct failtest_call *history, unsigned num)
-{
-       if (failtest_suppress)
-               return FAIL_DONT_FAIL;
-       return block_repeat_failures(history, num);
-}
-
 int main(int argc, char *argv[])
 {
        unsigned int i;
                        TDB_NOMMAP|TDB_CONVERT|TDB_VERSION1 };
 
        failtest_init(argc, argv);
-       failtest_hook = suppress_failure;
+       failtest_hook = block_repeat_failures;
        failtest_exit_check = exit_check_log;
        plan_tests(sizeof(flags) / sizeof(flags[0]) * 3);
        for (i = 0; i < sizeof(flags) / sizeof(flags[0]); i++) {
 
 #include "logging.h"
 #include "failtest_helper.h"
 
-static bool failtest_suppress = false;
-
-/* Don't need to test everything here, just want expand testing. */
-static enum failtest_result
-suppress_failure(struct failtest_call *history, unsigned num)
-{
-       if (failtest_suppress)
-               return FAIL_DONT_FAIL;
-       return block_repeat_failures(history, num);
-}
-
 int main(int argc, char *argv[])
 {
        unsigned int i;
        plan_tests(sizeof(flags) / sizeof(flags[0]) * 11 + 1);
 
        failtest_init(argc, argv);
-       failtest_hook = suppress_failure;
+       failtest_hook = block_repeat_failures;
        failtest_exit_check = exit_check_log;
 
        for (i = 0; i < sizeof(flags) / sizeof(flags[0]); i++) {
 
 #include "logging.h"
 #include "failtest_helper.h"
 
-static bool failtest_suppress = false;
-
-/* Don't need to test everything here, just want expand testing. */
-static enum failtest_result
-suppress_failure(struct failtest_call *history, unsigned num)
-{
-       if (failtest_suppress)
-               return FAIL_DONT_FAIL;
-       return block_repeat_failures(history, num);
-}
-
 int main(int argc, char *argv[])
 {
        unsigned int i;
        unsigned int msgs = 0;
 
        failtest_init(argc, argv);
-       failtest_hook = suppress_failure;
+       failtest_hook = block_repeat_failures;
        failtest_exit_check = exit_check_log;
 
        seed_attr.base.attr = TDB_ATTRIBUTE_SEED;
 
 #include "logging.h"
 #include "failtest_helper.h"
 
-static bool failtest_suppress = false;
-
-/* Don't need to test everything here, just want expand testing. */
-static enum failtest_result
-suppress_failure(struct failtest_call *history, unsigned num)
-{
-       if (failtest_suppress)
-               return FAIL_DONT_FAIL;
-       return block_repeat_failures(history, num);
-}
-
 int main(int argc, char *argv[])
 {
        unsigned int i;
        struct tdb_data data = tdb_mkdata("data", 4);
 
        failtest_init(argc, argv);
-       failtest_hook = suppress_failure;
+       failtest_hook = block_repeat_failures;
        failtest_exit_check = exit_check_log;
 
        failtest_suppress = true;
 
 #include "logging.h"
 #include "failtest_helper.h"
 
-static bool failtest_suppress = false;
-
-/* Don't need to test everything here, just want fetch testing. */
-static enum failtest_result
-suppress_failure(struct failtest_call *history, unsigned num)
-{
-       if (failtest_suppress)
-               return FAIL_DONT_FAIL;
-       return block_repeat_failures(history, num);
-}
-
 int main(int argc, char *argv[])
 {
        unsigned int i;
        struct tdb_data data = tdb_mkdata("data", 4);
 
        failtest_init(argc, argv);
-       failtest_hook = suppress_failure;
+       failtest_hook = block_repeat_failures;
        failtest_exit_check = exit_check_log;
 
        failtest_suppress = true;
 
 #include "logging.h"
 #include "failtest_helper.h"
 
-static bool failtest_suppress = false;
-
-/* Don't need to test everything here, just want expand testing. */
-static enum failtest_result
-suppress_failure(struct failtest_call *history, unsigned num)
-{
-       if (failtest_suppress)
-               return FAIL_DONT_FAIL;
-       return block_repeat_failures(history, num);
-}
-
 int main(int argc, char *argv[])
 {
        unsigned int i;
        struct tdb_data data = tdb_mkdata("data", 4);
 
        failtest_init(argc, argv);
-       failtest_hook = suppress_failure;
+       failtest_hook = block_repeat_failures;
        failtest_exit_check = exit_check_log;
 
        failtest_suppress = true;