int pthread_setspecific(pthread_key_t __key,void *__pointer)

{
  int iVar1;
  void *pvVar2;
  int iVar3;
  
  if ((__key < 0x400) && ((&DAT_00031a20)[__key * 2] != 0)) {
    iVar1 = FUN_00018f80();
    iVar3 = iVar1 + ((__key >> 5) + 0x38) * 4;
    if (*(int *)(iVar3 + 0xc) == 0) {
      pvVar2 = calloc(0x20,4)   //possible issue identified - semgrep
      if (pvVar2 == (void *)0x0) {
        return 0xc;
      }
      *(void **)(iVar3 + 0xc) = pvVar2;
    }
    *(void **)(*(int *)(iVar1 + ((__key >> 5) + 0x38) * 4 + 0xc) + (__key & 0x1f) * 4) = __pointer;
    iVar1 = 0;
  }
  else {
    iVar1 = 0x16;
  }
  return iVar1;
}