int sigaction(int __sig,sigaction *__act,sigaction *__oact)

{
  int iVar1;
  int iVar2;
  undefined1 *puVar3;
  undefined1 auStack_a8 [4];
  code *local_a4;
  
  if ((__sig == __pthread_sig_restart) || (__sig == __pthread_sig_cancel)) {
    iVar2 = 0x16;
  }
  else if ((__sig == __pthread_sig_debug) && (0 < __sig)) {
    iVar2 = 0x16;
  }
  else {
    puVar3 = (undefined1 *)0x0;
    if (__act != (sigaction *)0x0) {
      memcpy(auStack_a8,__act,0x90)   //possible issue identified - semgrep
      if (((__act->sa_mask).__val[0] < 2) || (__sig < 1)) {
        puVar3 = auStack_a8;
      }
      else {
        puVar3 = auStack_a8;
        if (__sig < 0x80) {
          puVar3 = auStack_a8;
          if (((uint)(__act->__sigaction_handler).sa_handler & 8) == 0) {
            local_a4 = FUN_000187f4;
          }
          else {
            local_a4 = FUN_000188b0;
          }
        }
      }
    }
    iVar1 = __libc_sigaction(__sig,puVar3,__oact);
    iVar2 = -1;
    if (iVar1 != -1) {
      if (__sig - 1U < 0x7f) {
        if (__oact != (sigaction *)0x0) {
          (__oact->sa_mask).__val[0] = *(ulong *)(&DAT_00031820 + __sig * 4);
        }
        if (__act != (sigaction *)0x0) {
          *(ulong *)(&DAT_00031820 + __sig * 4) = (__act->sa_mask).__val[0];
        }
        iVar2 = 0;
      }
      else {
        iVar2 = 0;
      }
    }
  }
  return iVar2;
}