uint FUN_00405850(uint param_1,int param_2,uint param_3)

{
  __fd_mask *p_Var1;
  int iVar2;
  ssize_t sVar3;
  uint uVar4;
  __fd_mask *p_Var5;
  uint uVar6;
  __fd_mask local_a8 [32];
  
  uVar6 = 1 << (param_1 & 0x1f);
  p_Var5 = local_a8 + (param_1 >> 5);
  uVar4 = 0;
  p_Var1 = local_a8;
  do {
    do {
      do {
        *p_Var1 = 0;
        p_Var1 = p_Var1 + 1;
      } while (p_Var1 != (__fd_mask *)&stack0xffffffd8);
      *p_Var5 = *p_Var5 | uVar6;
      iVar2 = select(param_1 + 1,(fd_set *)local_a8,(fd_set *)0x0,(fd_set *)0x0,(timeval *)0x0);
      p_Var1 = local_a8;
    } while ((iVar2 < 0) || ((uVar6 & *p_Var5) == 0));
    sVar3 = read(param_1,(void *)(param_2 + uVar4),param_3 - uVar4)   //possible issue identified - semgrep
    if (sVar3 < 1) {
      return uVar4;
    }
    uVar4 = uVar4 + sVar3;
    if (*(char *)(param_2 + uVar4 + -1) == '\0') {
      return uVar4;
    }
  } while (param_3 < uVar4);
  return uVar4;
}