diff options
Diffstat (limited to 'src/linux')
-rw-r--r-- | src/linux/epoll.c | 16 | ||||
-rw-r--r-- | src/linux/eventfd.c | 6 | ||||
-rw-r--r-- | src/linux/inotify.c | 8 | ||||
-rw-r--r-- | src/linux/signalfd.c | 2 | ||||
-rw-r--r-- | src/linux/utimes.c | 5 |
5 files changed, 29 insertions, 8 deletions
diff --git a/src/linux/epoll.c b/src/linux/epoll.c index 030786d3..b45344fb 100644 --- a/src/linux/epoll.c +++ b/src/linux/epoll.c @@ -4,12 +4,16 @@ int epoll_create(int size) { - return syscall(SYS_epoll_create, size); + return epoll_create1(0); } int epoll_create1(int flags) { - return syscall(SYS_epoll_create1, flags); + int r = __syscall(SYS_epoll_create1, flags); +#ifdef SYS_epoll_create + if (r==-ENOSYS && !flags) r = __syscall(SYS_epoll_create, 1); +#endif + return __syscall_ret(r); } int epoll_ctl(int fd, int op, int fd2, struct epoll_event *ev) @@ -19,10 +23,14 @@ int epoll_ctl(int fd, int op, int fd2, struct epoll_event *ev) int epoll_pwait(int fd, struct epoll_event *ev, int cnt, int to, const sigset_t *sigs) { - return syscall(SYS_epoll_pwait, fd, ev, cnt, to, sigs, _NSIG/8); + int r = __syscall(SYS_epoll_pwait, fd, ev, cnt, to, sigs, _NSIG/8); +#ifdef SYS_epoll_wait + if (r==-ENOSYS && !sigs) r = __syscall(SYS_epoll_wait, fd, ev, cnt, to); +#endif + return __syscall_ret(r); } int epoll_wait(int fd, struct epoll_event *ev, int cnt, int to) { - return syscall(SYS_epoll_wait, fd, ev, cnt, to); + return epoll_pwait(fd, ev, cnt, to, 0); } diff --git a/src/linux/eventfd.c b/src/linux/eventfd.c index 53066487..39968034 100644 --- a/src/linux/eventfd.c +++ b/src/linux/eventfd.c @@ -4,7 +4,11 @@ int eventfd(unsigned int count, int flags) { - return syscall(flags ? SYS_eventfd2 : SYS_eventfd, count, flags); + int r = __syscall(SYS_eventfd2, count, flags); +#ifdef SYS_eventfd + if (r==-ENOSYS && !flags) r = __syscall(SYS_eventfd, count); +#endif + return __syscall_ret(r); } int eventfd_read(int fd, eventfd_t *value) diff --git a/src/linux/inotify.c b/src/linux/inotify.c index a417c891..84a56154 100644 --- a/src/linux/inotify.c +++ b/src/linux/inotify.c @@ -3,11 +3,15 @@ int inotify_init() { - return syscall(SYS_inotify_init); + return inotify_init1(0); } int inotify_init1(int flags) { - return syscall(SYS_inotify_init1, flags); + int r = __syscall(SYS_inotify_init1, flags); +#ifdef SYS_inotify_init + if (r==-ENOSYS && !flags) r = __syscall(SYS_inotify_init); +#endif + return __syscall_ret(r); } int inotify_add_watch(int fd, const char *pathname, uint32_t mask) diff --git a/src/linux/signalfd.c b/src/linux/signalfd.c index da6bcedb..4bf43326 100644 --- a/src/linux/signalfd.c +++ b/src/linux/signalfd.c @@ -7,6 +7,7 @@ int signalfd(int fd, const sigset_t *sigs, int flags) { int ret = __syscall(SYS_signalfd4, fd, sigs, _NSIG/8, flags); +#ifdef SYS_signalfd if (ret != -ENOSYS) return __syscall_ret(ret); ret = __syscall(SYS_signalfd, fd, sigs, _NSIG/8); if (ret >= 0) { @@ -15,5 +16,6 @@ int signalfd(int fd, const sigset_t *sigs, int flags) if (flags & SFD_NONBLOCK) __syscall(SYS_fcntl, ret, F_SETFL, O_NONBLOCK); } +#endif return __syscall_ret(ret); } diff --git a/src/linux/utimes.c b/src/linux/utimes.c index 70c0695f..b814c88b 100644 --- a/src/linux/utimes.c +++ b/src/linux/utimes.c @@ -1,7 +1,10 @@ #include <sys/time.h> +#include "fcntl.h" #include "syscall.h" +int __futimesat(int, const char *, const struct timeval [2]); + int utimes(const char *path, const struct timeval times[2]) { - return syscall(SYS_utimes, path, times); + return __futimesat(AT_FDCWD, path, times); } |