return EINVAL;
{ __set_errno (EINVAL); return -1; }
int sigaction(int sig, const struct sigaction * act,              struct sigaction * oact){  struct sigaction newact;  struct sigaction *newactp;  if (sig == __pthread_sig_restart ||      sig == __pthread_sig_cancel ||      (sig == __pthread_sig_debug && __pthread_sig_debug > 0))    return EINVAL;  if (act)    {      newact = *act;      if (act->sa_handler != SIG_IGN && act->sa_handler != SIG_DFL	  && sig > 0 && sig < NSIG)	{	  if (act->sa_flags & SA_SIGINFO)	    newact.sa_handler = (__sighandler_t) pthread_sighandler_rt;	  else	    newact.sa_handler = (__sighandler_t) pthread_sighandler;	}      newactp = &newact;    }  else    newactp = NULL;  if (__sigaction(sig, newactp, oact) == -1)    return -1;  if (sig > 0 && sig < NSIG)    {      if (oact != NULL)	oact->sa_handler = (__sighandler_t) sighandler[sig].old;      if (act)	/* For the assignment is does not matter whether it's a normal	   or real-time signal.  */	sighandler[sig].old = (arch_sighandler_t) act->sa_handler;    }  return 0;}