aboutsummaryrefslogtreecommitdiff
path: root/sys/src/internal.h
blob: abfb72963d2caad54ea1996d38519cb37b85bfff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once

#include <u.h>
#include <syscall.h>

#define syscall1(n,a1)                   _syscall1(n,sysarg(a1))
#define syscall2(n,a1,a2)                _syscall2(n,sysarg(a1),sysarg(a2))
#define syscall3(n,a1,a2,a3)             _syscall3(n,sysarg(a1),sysarg(a2),sysarg(a3))
#define syscall4(n,a1,a2,a3,a4)          _syscall4(n,sysarg(a1),sysarg(a2),sysarg(a3),sysarg(a4))
#define syscall5(n,a1,a2,a3,a4,a5)       _syscall5(n,sysarg(a1),sysarg(a2),sysarg(a3),sysarg(a4),sysarg(a5))
#define syscall6(n,a1,a2,a3,a4,a5,a6)    _syscall6(n,sysarg(a1),sysarg(a2),sysarg(a3),sysarg(a4),sysarg(a5),sysarg(a6))
#define syscall7(n,a1,a2,a3,a4,a5,a6,a7) _syscall7(n,sysarg(a1),sysarg(a2),sysarg(a3),sysarg(a4),sysarg(a5),sysarg(a6),sysarg(a7))

#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n
#define __SYSCALL_NARGS(...) __SYSCALL_NARGS_X(__VA_ARGS__,7,6,5,4,3,2,1,0,)
#define __SYSCALL_CONCAT_X(a,b) a##b
#define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X(a,b)
#define __SYSCALL_DISP(b,...) __SYSCALL_CONCAT(b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__)

#define syscall(...) __SYSCALL_DISP(syscall,__VA_ARGS__)

#define error(ret) ((ret) < 0 && (ret) > -4096) ? (-(ret)) : 0