From d3cbb4cbbc38c96c3a20a7e4e602be7327f25202 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Fri, 7 Dec 2012 16:26:37 +1030 Subject: [PATCH] rfc822: fix sigaction test, wean off ccan-specific talloc_set_allocator() The first ok() line was actually failing, because sigaction returns 0 on success, but because the program exit(0) out the abort handler, that wasn't being seen. So remove tap and just abort and assert our way through the test, which I think is clearer. We use macros to mug the talloc entry points, since talloc_set_allocator() is not in mainline talloc. Signed-off-by: Rusty Russell --- ccan/rfc822/test/run-default-alloc-failure.c | 43 ++++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/ccan/rfc822/test/run-default-alloc-failure.c b/ccan/rfc822/test/run-default-alloc-failure.c index 7fc0393e..c2081542 100644 --- a/ccan/rfc822/test/run-default-alloc-failure.c +++ b/ccan/rfc822/test/run-default-alloc-failure.c @@ -1,6 +1,7 @@ -#include +#include "config.h" #include #include +#include #include #include @@ -9,18 +10,32 @@ #include -#include +#include -#include "testdata.h" +static bool should_fail = false; -static void *failing_malloc(size_t size) +static void *mayfail_alloc(const void *ctx, size_t size) { - return NULL; + if (should_fail) + return NULL; + return talloc_zero_size(ctx, size); } +/* Override various tallocation functions. */ +#undef talloc +#undef talloc_zero +#undef talloc_array +#define talloc(ctx, type) mayfail_alloc((ctx), sizeof(type)) +#define talloc_zero(ctx, type) mayfail_alloc((ctx), sizeof(type)) +#define talloc_array(ctx, type, num) mayfail_alloc((ctx), sizeof(type)*(num)) + +#include + +#include "testdata.h" + static void abort_handler(int signum) { - ok(1, "Aborted"); + printf("Aborted"); exit(0); } @@ -34,23 +49,15 @@ int main(int argc, char *argv[]) }; int ret; - plan_tests(2); - ret = sigaction(SIGABRT, &sa, NULL); - ok(ret, "Couldn't install signal handler: %s", strerror(errno)); + assert(ret == 0); buf = assemble_msg(&test_msg_1, &len, 0); msg = rfc822_start(NULL, buf, len); - - talloc_set_allocator(failing_malloc, free, realloc); - + should_fail = true; (void) rfc822_next_header(msg, NULL); - ok(0, "Didn't get SIGABRT"); - - rfc822_free(msg); - talloc_free(buf); - - exit(exit_status()); + /* We should never get here! */ + abort(); } -- 2.39.2