|
Szabolcs Nagy |
cfa23c |
#include <stdint.h>
|
|
Szabolcs Nagy |
cfa23c |
#include <stdio.h>
|
|
Szabolcs Nagy |
cfa23c |
#include <stdarg.h>
|
|
Szabolcs Nagy |
cfa23c |
#include <unistd.h>
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
/* TODO: not thread-safe nor fork-safe */
|
|
Szabolcs Nagy |
cfa23c |
static volatile int t_status;
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
#define T_LOC2(l) __FILE__ ":" #l
|
|
Szabolcs Nagy |
cfa23c |
#define T_LOC1(l) T_LOC2(l)
|
|
Szabolcs Nagy |
cfa23c |
#define t_error(...) t_printf("ERROR " T_LOC1(__LINE__) ": " __VA_ARGS__)
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
static int t_printf(const char *s, ...)
|
|
Szabolcs Nagy |
cfa23c |
{
|
|
Szabolcs Nagy |
cfa23c |
va_list ap;
|
|
Szabolcs Nagy |
cfa23c |
char buf[512];
|
|
Szabolcs Nagy |
cfa23c |
int n;
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
t_status = 1;
|
|
Szabolcs Nagy |
cfa23c |
va_start(ap, s);
|
|
Szabolcs Nagy |
cfa23c |
n = vsnprintf(buf, sizeof buf, s, ap);
|
|
Szabolcs Nagy |
cfa23c |
va_end(ap);
|
|
Szabolcs Nagy |
cfa23c |
if (n < 0)
|
|
Szabolcs Nagy |
cfa23c |
n = 0;
|
|
Szabolcs Nagy |
cfa23c |
else if (n >= sizeof buf) {
|
|
Szabolcs Nagy |
cfa23c |
n = sizeof buf;
|
|
Szabolcs Nagy |
cfa23c |
buf[n - 1] = '\n';
|
|
Szabolcs Nagy |
cfa23c |
buf[n - 2] = '.';
|
|
Szabolcs Nagy |
cfa23c |
buf[n - 3] = '.';
|
|
Szabolcs Nagy |
cfa23c |
buf[n - 4] = '.';
|
|
Szabolcs Nagy |
cfa23c |
}
|
|
Szabolcs Nagy |
cfa23c |
return write(1, buf, n);
|
|
Szabolcs Nagy |
cfa23c |
}
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
int t_vmfill(void **, size_t *, int);
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
void t_fdfill(void);
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
void t_randseed(uint64_t s);
|
|
Szabolcs Nagy |
cfa23c |
uint64_t t_randn(uint64_t n);
|
|
Szabolcs Nagy |
cfa23c |
uint64_t t_randint(uint64_t a, uint64_t b);
|
|
Szabolcs Nagy |
cfa23c |
void t_shuffle(uint64_t *p, size_t n);
|
|
Szabolcs Nagy |
cfa23c |
void t_randrange(uint64_t *p, size_t n);
|
|
Szabolcs Nagy |
cfa23c |
int t_choose(uint64_t n, size_t k, uint64_t *p);
|
|
Szabolcs Nagy |
cfa23c |
|
|
Szabolcs Nagy |
cfa23c |
char *t_pathrel(char *buf, size_t n, char *argv0, char *p);
|
|
Szabolcs Nagy |
cfa23c |
|