projects
/
ccan
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
talloc: allow replacement allocator
[ccan]
/
ccan
/
tap
/
tap.c
diff --git
a/ccan/tap/tap.c
b/ccan/tap/tap.c
index 4bbd977bbfdd6f3312295afb67a3d9e5d7832206..106da912487ba28665fc82d9f206e4c639085a34 100644
(file)
--- a/
ccan/tap/tap.c
+++ b/
ccan/tap/tap.c
@@
-23,11
+23,15
@@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
* 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 <ctype.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
+#include <unistd.h>
#include "tap.h"
#include "tap.h"
@@
-38,9
+42,10
@@
static unsigned int test_count = 0; /* Number of tests that have been run */
static unsigned int e_tests = 0; /* Expected number of tests to run */
static unsigned int failures = 0; /* Number of tests that failed */
static char *todo_msg = NULL;
static unsigned int e_tests = 0; /* Expected number of tests to run */
static unsigned int failures = 0; /* Number of tests that failed */
static char *todo_msg = NULL;
-static char *todo_msg_fixed = "libtap malloc issue";
+static c
onst c
har *todo_msg_fixed = "libtap malloc issue";
static int todo = 0;
static int test_died = 0;
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 */
/* Encapsulate the pthread code in a conditional. In the absence of
libpthread the code does nothing */
@@
-63,15
+68,15
@@
_expected_tests(unsigned int tests)
}
static void
}
static void
-diagv(char *fmt, va_list ap)
+diagv(c
onst c
har *fmt, va_list ap)
{
{
- fputs("# ", std
err
);
- vfprintf(std
err
, fmt, ap);
- fputs("\n", std
err
);
+ fputs("# ", std
out
);
+ vfprintf(std
out
, fmt, ap);
+ fputs("\n", std
out
);
}
static void
}
static void
-_diag(char *fmt, ...)
+_diag(c
onst c
har *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
{
va_list ap;
va_start(ap, fmt);
@@
-87,8
+92,8
@@
_diag(char *fmt, ...)
* test_comment -- a comment to print afterwards, may be NULL
*/
unsigned int
* test_comment -- a comment to print afterwards, may be NULL
*/
unsigned int
-_gen_result(int ok, const char *func, char *file, unsigned int line,
- char *test_name, ...)
+_gen_result(int ok, const char *func, c
onst c
har *file, unsigned int line,
+ c
onst c
har *test_name, ...)
{
va_list ap;
char *local_test_name = NULL;
{
va_list ap;
char *local_test_name = NULL;
@@
-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);
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
va_end(ap);
/* Make sure the test name contains more than digits
@@
-173,6
+179,9
@@
_gen_result(int ok, const char *func, char *file, unsigned int line,
UNLOCK;
UNLOCK;
+ if (!ok && tap_fail_callback)
+ tap_fail_callback();
+
/* We only care (when testing) that ok is positive, but here we
specifically only want to return 1 or 0 */
return ok ? 1 : 0;
/* We only care (when testing) that ok is positive, but here we
specifically only want to return 1 or 0 */
return ok ? 1 : 0;
@@
-185,6
+194,9
@@
_gen_result(int ok, const char *func, char *file, unsigned int line,
static void
_cleanup(void)
{
static void
_cleanup(void)
{
+ /* If we forked, don't do cleanup in child! */
+ if (getpid() != test_pid)
+ return;
LOCK;
LOCK;
@@
-245,12
+257,13
@@
_tap_init(void)
static int run_once = 0;
if(!run_once) {
static int run_once = 0;
if(!run_once) {
+ test_pid = getpid();
atexit(_cleanup);
/* stdout needs to be unbuffered so that the output appears
in the same place relative to stderr output as it does
with Test::Harness */
atexit(_cleanup);
/* stdout needs to be unbuffered so that the output appears
in the same place relative to stderr output as it does
with Test::Harness */
-
setbuf(stdout, 0);
+
//
setbuf(stdout, 0);
run_once = 1;
}
}
run_once = 1;
}
}
@@
-283,7
+296,7
@@
plan_no_plan(void)
* Note that the plan is to skip all tests
*/
void
* Note that the plan is to skip all tests
*/
void
-plan_skip_all(char *reason)
+plan_skip_all(c
onst c
har *reason)
{
LOCK;
{
LOCK;
@@
-335,7
+348,7
@@
plan_tests(unsigned int tests)
}
void
}
void
-diag(char *fmt, ...)
+diag(c
onst c
har *fmt, ...)
{
va_list ap;
{
va_list ap;
@@
-349,7
+362,7
@@
diag(char *fmt, ...)
}
void
}
void
-skip(unsigned int n, char *fmt, ...)
+skip(unsigned int n, c
onst c
har *fmt, ...)
{
va_list ap;
char *skip_msg;
{
va_list ap;
char *skip_msg;
@@
-357,7
+370,8
@@
skip(unsigned int n, char *fmt, ...)
LOCK;
va_start(ap, 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) {
va_end(ap);
while(n-- > 0) {
@@
-373,14
+387,15
@@
skip(unsigned int n, char *fmt, ...)
}
void
}
void
-todo_start(char *fmt, ...)
+todo_start(c
onst c
har *fmt, ...)
{
va_list ap;
LOCK;
va_start(ap, fmt);
{
va_list ap;
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;
va_end(ap);
todo = 1;