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