From 8c6d4505329f94446084ca93eae10cd796d79a8d Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Sat, 26 Jan 2019 22:41:05 -0500 Subject: new framework for building sources after gitlab migration --- nonstd/syscall.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 nonstd/syscall.h (limited to 'nonstd/syscall.h') diff --git a/nonstd/syscall.h b/nonstd/syscall.h new file mode 100644 index 00000000..e77ceeaa --- /dev/null +++ b/nonstd/syscall.h @@ -0,0 +1,38 @@ +#ifndef __NONSTD_SYSCALL_H__ +#define __NONSTD_SYSCALL_H__ + +#include +#include "nonstd/types.h" + +#ifndef ENOSYS +#define ENOSYS 10 +#endif + +#define SCNO(_var, _name, _notfound) static int _var = -2; do { \ + if ((_var) == -2) { (_var) = __libc.syscall_lookup((_name)); } \ + if ((_var) == -1) { errno = ENOSYS; return (_notfound); } \ + } while (0) + +#define SCNOFAIL() static int _scno = -2; \ + if (_scno == -2) { _scno = __libc.syscall_lookup(__func__); } \ + return __libc.syscall(_scno) + +#define SC(_type, ...) static int _scno = -2; \ + if (_scno == -2) { _scno = __libc.syscall_lookup(__func__); } \ + _type _ret = __libc.syscall(_scno, __VA_ARGS__); \ + if (_ret < 0) { \ + errno = -_ret; \ + return -1; \ + } \ + return _ret + +#define SC0(_type) static int _scno = -2; \ + if (_scno == -2) { _scno = __libc.syscall_lookup(__func__); } \ + _type __ret = __libc.syscall(_scno); \ + if (_ret < 0) { \ + errno = -_ret; \ + return -1; \ + } \ + return _ret + +#endif -- cgit v1.2.1