signalfd.c 531 B

12345678910111213141516171819
  1. #include <sys/signalfd.h>
  2. #include <signal.h>
  3. #include <errno.h>
  4. #include <fcntl.h>
  5. #include "syscall.h"
  6. int signalfd(int fd, const sigset_t *sigs, int flags)
  7. {
  8. int ret = __syscall(SYS_signalfd4, fd, sigs, _NSIG/8, flags);
  9. if (ret != -ENOSYS) return __syscall_ret(ret);
  10. ret = __syscall(SYS_signalfd, fd, sigs, _NSIG/8);
  11. if (ret >= 0) {
  12. if (flags & SFD_CLOEXEC)
  13. __syscall(SYS_fcntl, ret, F_SETFD, FD_CLOEXEC);
  14. if (flags & SFD_NONBLOCK)
  15. __syscall(SYS_fcntl, ret, F_SETFL, O_NONBLOCK);
  16. }
  17. return __syscall_ret(ret);
  18. }