]> git.ozlabs.org Git - ccan/blobdiff - ccan/tap/tap.c
Handle where _GNU_SOURCE already defined.
[ccan] / ccan / tap / tap.c
index 4bbd977bbfdd6f3312295afb67a3d9e5d7832206..0eaec9a5f852827d879553cfd50cd8bdf252f2c6 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
-#define _GNU_SOURCE
+/* FIXME: The real fix is an asprintf module. */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE 1
+#endif
 #include <ctype.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
 
 #include "tap.h"
 
@@ -41,6 +45,7 @@ static char *todo_msg = NULL;
 static char *todo_msg_fixed = "libtap malloc issue";
 static int todo = 0;
 static int test_died = 0;
+static int test_pid;
 
 /* Encapsulate the pthread code in a conditional.  In the absence of
    libpthread the code does nothing */
@@ -65,9 +70,9 @@ _expected_tests(unsigned int tests)
 static void
 diagv(char *fmt, va_list ap)
 {
-       fputs("# ", stderr);
-       vfprintf(stderr, fmt, ap);
-       fputs("\n", stderr);
+       fputs("# ", stdout);
+       vfprintf(stdout, fmt, ap);
+       fputs("\n", stdout);
 }
 
 static void
@@ -103,7 +108,8 @@ _gen_result(int ok, const char *func, char *file, unsigned int line,
           expansions on it */
        if(test_name != NULL) {
                va_start(ap, test_name);
-               vasprintf(&local_test_name, test_name, ap);
+               if (vasprintf(&local_test_name, test_name, ap) < 0)
+                       local_test_name = NULL;
                va_end(ap);
 
                /* Make sure the test name contains more than digits
@@ -185,6 +191,9 @@ _gen_result(int ok, const char *func, char *file, unsigned int line,
 static void
 _cleanup(void)
 {
+       /* If we forked, don't do cleanup in child! */
+       if (getpid() != test_pid)
+               return;
 
        LOCK;
 
@@ -245,6 +254,7 @@ _tap_init(void)
        static int run_once = 0;
 
        if(!run_once) {
+               test_pid = getpid();
                atexit(_cleanup);
 
                /* stdout needs to be unbuffered so that the output appears
@@ -357,7 +367,8 @@ skip(unsigned int n, char *fmt, ...)
        LOCK;
 
        va_start(ap, fmt);
-       vasprintf(&skip_msg, fmt, ap);
+       if (vasprintf(&skip_msg, fmt, ap) < 0)
+               skip_msg = NULL;
        va_end(ap);
 
        while(n-- > 0) {
@@ -380,7 +391,8 @@ todo_start(char *fmt, ...)
        LOCK;
 
        va_start(ap, fmt);
-       vasprintf(&todo_msg, fmt, ap);
+       if (vasprintf(&todo_msg, fmt, ap) < 0)
+               todo_msg = NULL;
        va_end(ap);
 
        todo = 1;