summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2013-01-27 11:46:24 -0500
committerJeff Moyer <jmoyer@redhat.com>2013-01-31 16:38:16 -0500
commitb3a5874dfc66d16126a72a4c969075cb30aa351d (patch)
tree864b5ac3ec721a75fc4f6d2b0f807e58d8d8992a
parent59ca03a10ba7aa21c610bbe22e222c11351f1b94 (diff)
downloadlibaio-b3a5874dfc66d16126a72a4c969075cb30aa351d.tar.gz
add a generic syscall() fallback
Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
-rw-r--r--src/syscall-generic.h29
-rw-r--r--src/syscall.h3
2 files changed, 31 insertions, 1 deletions
diff --git a/src/syscall-generic.h b/src/syscall-generic.h
new file mode 100644
index 0000000..24d7c7c
--- /dev/null
+++ b/src/syscall-generic.h
@@ -0,0 +1,29 @@
+#include <errno.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+
+#define _body_io_syscall(sname, args...) \
+{ \
+ int ret = syscall(__NR_##sname, ## args); \
+ return ret < 0 ? -errno : ret; \
+}
+
+#define io_syscall1(type,fname,sname,type1,arg1) \
+type fname(type1 arg1) \
+_body_io_syscall(sname, (long)arg1)
+
+#define io_syscall2(type,fname,sname,type1,arg1,type2,arg2) \
+type fname(type1 arg1,type2 arg2) \
+_body_io_syscall(sname, (long)arg1, (long)arg2)
+
+#define io_syscall3(type,fname,sname,type1,arg1,type2,arg2,type3,arg3) \
+type fname(type1 arg1,type2 arg2,type3 arg3) \
+_body_io_syscall(sname, (long)arg1, (long)arg2, (long)arg3)
+
+#define io_syscall4(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
+type fname (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
+_body_io_syscall(sname, (long)arg1, (long)arg2, (long)arg3, (long)arg4)
+
+#define io_syscall5(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4, type5,arg5) \
+type fname (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
+_body_io_syscall(sname, (long)arg1, (long)arg2, (long)arg3, (long)arg4, (long)arg5)
diff --git a/src/syscall.h b/src/syscall.h
index 6ece660..a2da030 100644
--- a/src/syscall.h
+++ b/src/syscall.h
@@ -29,5 +29,6 @@
#elif defined(__aarch64__)
#include "syscall-arm64.h"
#else
-#error "add syscall-arch.h"
+#warning "using generic syscall method"
+#include "syscall-generic.h"
#endif