Browse Source

failtest: enhance tracing

Do it properly, with a printf-style interface.
Rusty Russell 15 years ago
parent
commit
1ac26f3736
1 changed files with 22 additions and 25 deletions
  1. 22 25
      ccan/failtest/failtest.c

+ 22 - 25
ccan/failtest/failtest.c

@@ -1,3 +1,4 @@
+#include "config.h"
 #include <stdarg.h>
 #include <string.h>
 #include <stdio.h>
@@ -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]);