uint FUN_00402eb0(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;
}