/*
 * pselect.c
 */

#include <sys/select.h>
#include <sys/syscall.h>

#if defined(__NR_pselect) && !_KLIBC_USE_RT_SIG

/* Don't need to do anything here; use syscall stub directly */

#elif defined(__NR_pselect7)

__extern int __pselect7(int, fd_set *, fd_set *, fd_set *, const struct timespec *, const sigset_t *, size_t);

int pselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
	    const struct timespec *timeout, const sigset_t *sigmask)
{
  return __pselect7(n, readfds, writefds, exceptfds,
		    timeout, sigmask, sizeof *sigmask);
}

#elif defined(__NR_pselect6)

struct __pselect6 {
  const sigset_t *sigmask;
  size_t sigsize;
};

__extern int __pselect6(int, fd_set *, fd_set *, fd_set *, const struct timespec *, const struct __pselect6 *);

int pselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
	    const struct timespec *timeout, const sigset_t *sigmask)
{
  struct __pselect6 extended_sigmask = { sigmask, sizeof *sigmask };
  return __pselect6(n, readfds, writefds, exceptfds,
		    timeout, &extended_sigmask);
}

#endif
