Blame src/functional/test.h
|
nsz |
462b4f |
#include <stdio.h>
|
|
nsz |
462b4f |
#include <stdarg.h>
|
|
Szabolcs Nagy |
7cf875 |
#include <unistd.h>
|
|
nsz |
462b4f |
|
|
Szabolcs Nagy |
dc1a7e |
/* TODO: not thread-safe nor fork-safe */
|
|
Szabolcs Nagy |
7cf875 |
static volatile int test_status;
|
|
Szabolcs Nagy |
7cf875 |
|
|
Szabolcs Nagy |
7cf875 |
#define error(...) test_error(__FILE__, __LINE__, __VA_ARGS__)
|
|
Szabolcs Nagy |
7cf875 |
|
|
Szabolcs Nagy |
7cf875 |
static int test_error(const char *fn, int l, const char *s, ...)
|
|
Szabolcs Nagy |
7cf875 |
{
|
|
Szabolcs Nagy |
7cf875 |
va_list ap;
|
|
Szabolcs Nagy |
7cf875 |
char buf[512];
|
|
Szabolcs Nagy |
7cf875 |
int n, k;
|
|
Szabolcs Nagy |
7cf875 |
|
|
Szabolcs Nagy |
7cf875 |
test_status = 1;
|
|
Szabolcs Nagy |
7cf875 |
n = snprintf(buf, sizeof buf, "ERROR %s:%d: ", fn, l);
|
|
Szabolcs Nagy |
7cf875 |
if (n < 0)
|
|
Szabolcs Nagy |
7cf875 |
n = 0;
|
|
Szabolcs Nagy |
7cf875 |
else if (n >= sizeof buf)
|
|
Szabolcs Nagy |
7cf875 |
n = sizeof buf;
|
|
Szabolcs Nagy |
7cf875 |
va_start(ap, s);
|
|
Szabolcs Nagy |
7cf875 |
k = vsnprintf(buf + n, sizeof buf - n, s, ap);
|
|
Szabolcs Nagy |
7cf875 |
va_end(ap);
|
|
Szabolcs Nagy |
7cf875 |
if (k < 0)
|
|
Szabolcs Nagy |
7cf875 |
k = 0;
|
|
Szabolcs Nagy |
7cf875 |
else if (k >= sizeof buf - n) {
|
|
Szabolcs Nagy |
7cf875 |
k = sizeof buf - n;
|
|
Szabolcs Nagy |
7cf875 |
buf[n + k - 1] = '\n';
|
|
Szabolcs Nagy |
7cf875 |
buf[n + k - 2] = '.';
|
|
Szabolcs Nagy |
7cf875 |
buf[n + k - 3] = '.';
|
|
Szabolcs Nagy |
7cf875 |
buf[n + k - 4] = '.';
|
|
Szabolcs Nagy |
7cf875 |
}
|
|
Szabolcs Nagy |
7cf875 |
return write(1, buf, n + k);
|
|
Szabolcs Nagy |
7cf875 |
}
|
|
nsz |
462b4f |
|
|
Szabolcs Nagy |
7cf875 |
static int test_printf(const char *s, ...)
|
|
nsz |
462b4f |
{
|
|
nsz |
462b4f |
va_list ap;
|
|
Szabolcs Nagy |
7cf875 |
char buf[512];
|
|
Szabolcs Nagy |
7cf875 |
int n;
|
|
nsz |
462b4f |
|
|
nsz |
462b4f |
test_status = 1;
|
|
nsz |
462b4f |
va_start(ap, s);
|
|
Szabolcs Nagy |
7cf875 |
n = vsnprintf(buf, sizeof buf, s, ap);
|
|
nsz |
462b4f |
va_end(ap);
|
|
Szabolcs Nagy |
7cf875 |
if (n < 0)
|
|
Szabolcs Nagy |
7cf875 |
n = 0;
|
|
Szabolcs Nagy |
7cf875 |
else if (n >= sizeof buf) {
|
|
Szabolcs Nagy |
7cf875 |
n = sizeof buf;
|
|
Szabolcs Nagy |
7cf875 |
buf[n - 1] = '\n';
|
|
Szabolcs Nagy |
7cf875 |
buf[n - 2] = '.';
|
|
Szabolcs Nagy |
7cf875 |
buf[n - 3] = '.';
|
|
Szabolcs Nagy |
7cf875 |
buf[n - 4] = '.';
|
|
Szabolcs Nagy |
7cf875 |
}
|
|
Szabolcs Nagy |
7cf875 |
return write(1, buf, n);
|
|
nsz |
462b4f |
}
|
|
nsz |
462b4f |
|