162306a36Sopenharmony_ci#pragma once
262306a36Sopenharmony_ci#undef NDEBUG
362306a36Sopenharmony_ci#include <assert.h>
462306a36Sopenharmony_ci#include <dirent.h>
562306a36Sopenharmony_ci#include <errno.h>
662306a36Sopenharmony_ci#include <stdbool.h>
762306a36Sopenharmony_ci#include <stdlib.h>
862306a36Sopenharmony_ci#include <string.h>
962306a36Sopenharmony_ci#include <unistd.h>
1062306a36Sopenharmony_ci#include <sys/syscall.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistatic inline pid_t sys_getpid(void)
1362306a36Sopenharmony_ci{
1462306a36Sopenharmony_ci	return syscall(SYS_getpid);
1562306a36Sopenharmony_ci}
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistatic inline pid_t sys_gettid(void)
1862306a36Sopenharmony_ci{
1962306a36Sopenharmony_ci	return syscall(SYS_gettid);
2062306a36Sopenharmony_ci}
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistatic inline bool streq(const char *s1, const char *s2)
2362306a36Sopenharmony_ci{
2462306a36Sopenharmony_ci	return strcmp(s1, s2) == 0;
2562306a36Sopenharmony_ci}
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistatic unsigned long long xstrtoull(const char *p, char **end)
2862306a36Sopenharmony_ci{
2962306a36Sopenharmony_ci	if (*p == '0') {
3062306a36Sopenharmony_ci		*end = (char *)p + 1;
3162306a36Sopenharmony_ci		return 0;
3262306a36Sopenharmony_ci	} else if ('1' <= *p && *p <= '9') {
3362306a36Sopenharmony_ci		unsigned long long val;
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci		errno = 0;
3662306a36Sopenharmony_ci		val = strtoull(p, end, 10);
3762306a36Sopenharmony_ci		assert(errno == 0);
3862306a36Sopenharmony_ci		return val;
3962306a36Sopenharmony_ci	} else
4062306a36Sopenharmony_ci		assert(0);
4162306a36Sopenharmony_ci}
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_cistatic struct dirent *xreaddir(DIR *d)
4462306a36Sopenharmony_ci{
4562306a36Sopenharmony_ci	struct dirent *de;
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci	errno = 0;
4862306a36Sopenharmony_ci	de = readdir(d);
4962306a36Sopenharmony_ci	assert(de || errno == 0);
5062306a36Sopenharmony_ci	return de;
5162306a36Sopenharmony_ci}
52