From 1ac26f37368b33e0952e19df05184776c80159c8 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 1 Mar 2011 23:19:20 +1030 Subject: [PATCH] failtest: enhance tracing Do it properly, with a printf-style interface. --- ccan/failtest/failtest.c | 47 +++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/ccan/failtest/failtest.c b/ccan/failtest/failtest.c index e2e6c64f..4f7542f5 100644 --- a/ccan/failtest/failtest.c +++ b/ccan/failtest/failtest.c @@ -1,3 +1,4 @@ +#include "config.h" #include #include #include @@ -142,11 +143,23 @@ static void child_fail(const char *out, size_t outlen, const char *fmt, ...) exit(1); } +static void trace(const char *fmt, ...) +{ + va_list ap; + + if (tracefd == -1) + return; + + va_start(ap, fmt); + vdprintf(tracefd, fmt, ap); + va_end(ap); +} + static pid_t child; -static void hand_down(int signal) +static void hand_down(int signum) { - kill(child, signal); + kill(child, signum); } static void release_locks(void) @@ -215,18 +228,6 @@ static void get_locks(void) lock_owner = getpid(); } -static void trace_str(const char *str) -{ - ssize_t ret; - - while ((ret = write(tracefd, str, strlen(str))) > 0) { - str += ret; - if (!*str) - return; - } - err(1, "Writing trace."); -} - struct saved_file { struct saved_file *next; int fd; @@ -429,7 +430,7 @@ static bool should_fail(struct failtest_call *call) if (child == 0) { if (tracefd != -1) { struct timeval now; - char str[50], *p; + char *p; gettimeofday(&now, NULL); if (now.tv_usec < start.tv_usec) { now.tv_sec--; @@ -437,20 +438,16 @@ static bool should_fail(struct failtest_call *call) } now.tv_usec -= start.tv_usec; now.tv_sec -= start.tv_sec; - sprintf(str, "%u (%u.%02u): ", getpid(), - (int)now.tv_sec, (int)now.tv_usec / 10000); - trace_str(str); p = failpath_string(); - trace_str(p); + trace("%u->%u (%u.%02u): %s (", getppid(), getpid(), + (int)now.tv_sec, (int)now.tv_usec / 10000, p); free(p); - trace_str("("); - p = strchr(history[history_num-1].file, '/'); + p = strrchr(history[history_num-1].file, '/'); if (p) - trace_str(p+1); + trace("%s", p+1); else - trace_str(history[history_num-1].file); - sprintf(str, ":%u)\n", history[history_num-1].line); - trace_str(str); + trace("%s", history[history_num-1].file); + trace(":%u)\n", history[history_num-1].line); } close(control[0]); close(output[0]); -- 2.39.2