* 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"
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 */
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
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
static void
_cleanup(void)
{
+ /* If we forked, don't do cleanup in child! */
+ if (getpid() != test_pid)
+ return;
LOCK;
static int run_once = 0;
if(!run_once) {
+ test_pid = getpid();
atexit(_cleanup);
/* stdout needs to be unbuffered so that the output appears
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) {
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;