fb0a7ae5573b9c1da6ccfeab48b8ce28ea867ac6
[libc-test] / src / functional / test.h
1 #include <stdio.h>
2 #include <stdarg.h>
3 #include <unistd.h>
4
5 /* TODO: not thread-safe nor fork-safe */
6 static volatile int test_status;
7
8 #define TEST_LOC2(l) __FILE__ ":" #l
9 #define TEST_LOC1(l) TEST_LOC2(l)
10 #define error(...) test_printf("ERROR " TEST_LOC1(__LINE__) ": " __VA_ARGS__)
11
12 static int test_printf(const char *s, ...)
13 {
14         va_list ap;
15         char buf[512];
16         int n;
17
18         test_status = 1;
19         va_start(ap, s);
20         n = vsnprintf(buf, sizeof buf, s, ap);
21         va_end(ap);
22         if (n < 0)
23                 n = 0;
24         else if (n >= sizeof buf) {
25                 n = sizeof buf;
26                 buf[n - 1] = '\n';
27                 buf[n - 2] = '.';
28                 buf[n - 3] = '.';
29                 buf[n - 4] = '.';
30         }
31         return write(1, buf, n);
32 }
33