summaryrefslogtreecommitdiff
path: root/src/nonstd/SYSCALL.c
blob: 4f4ce61a6ad3dab6b848521c1e3d16ced68ca74f (plain)
1
2
3
4
5
6
7
8
9
10
11
#include <nonstd/syscall.h>

#define SYSCALL(_name, _type, _err, _a1, _a2, _a3, _a4, _a5, _a6) \
	static int _scno = -2; \
	if (_scno == -2) { _scno = ((long (*)(const char *))__libc(SYSCALL_LOOKUP))(_name); } \
	long _ret = __syscall(_scno, _a1, _a2, _a3, _a4, _a5, _a6); \
	if (_ret < 0) { \
		errno = -_ret; \
		return _err; \
	} \
	return (_type)_ret