undefined4 FUN_00410c18(uint *param_1,char *param_2,void *param_3,uint param_4,int param_5)
{
uint uVar1;
uint uVar2;
uint uVar3;
uint uVar4;
uint uVar5;
int iVar6;
char *pcVar7;
uint uVar8;
void *pvVar9;
uint *puVar10;
uint uVar11;
uint *puVar12;
uint uVar13;
short *psVar14;
undefined4 uVar15;
int *piVar16;
size_t __n;
undefined8 uVar17;
int *local_80;
uint local_7c;
uint local_78;
undefined4 local_74;
uint local_70;
uint local_6c [5];
uint local_58;
uint local_54;
uint local_50;
undefined4 local_4c;
uint local_48;
undefined4 local_44;
uint local_40;
uint local_3c;
int local_38;
uint *local_34;
byte *local_30;
uint *local_2c;
uVar13 = param_4;
iVar6 = getifaddrs(&local_80);
if (iVar6 == 0) {
if (local_80 != (int *)0x0) {
uVar11 = param_4;
if ((int)param_4 < 0) {
uVar11 = param_4 + 7;
}
uVar8 = param_4 & 0x80000007;
__n = (int)uVar11 >> 3 //possible issue identified - semgrep
if ((int)uVar8 < 0) {
uVar8 = (uVar8 - 1 | 0xfffffff8) + 1;
}
local_40 = 0xff00 >> (uVar8 & 0x1f) & 0xff;
local_38 = (int)&local_80 + __n //possible issue identified - semgrep
local_3c = param_4 & 7;
local_34 = &local_7c;
local_30 = (byte *)((int)param_3 + __n);
local_2c = &local_54;
piVar16 = local_80;
do {
if (((param_5 == 0) || (iVar6 = strcmp(param_2,(char *)piVar16[1]), iVar6 == 0)) &&
(iVar6 = FUN_00410b70(param_3,param_2), -1 < iVar6)) {
uVar11 = piVar16[1];
pvVar9 = param_3;
uVar17 = FUN_00410b70();
if (((-1 < (int)uVar17) && (iVar6 == (int)uVar17)) &&
(psVar14 = (short *)piVar16[3], *psVar14 == 10)) {
uVar8 = (int)psVar14 + 3U & 3;
uVar1 = (int)psVar14 + 7U & 3;
uVar2 = (int)psVar14 + 0xbU & 3;
uVar3 = (int)psVar14 + 0xfU & 3;
uVar4 = (int)psVar14 + 0x17U & 3;
local_4c = *(undefined4 *)(psVar14 + 8);
local_44 = *(undefined4 *)(psVar14 + 0xc);
uVar5 = (uint)psVar14 & 3;
local_6c[4] = (*(int *)(((int)psVar14 + 3U) - uVar8) << (3 - uVar8) * 8 |
0xffffffffU >> (uVar8 + 1) * 8 & 10) & -1 << (4 - uVar5) * 8 |
*(uint *)((int)psVar14 - uVar5) >> uVar5 * 8;
uVar8 = (uint)(psVar14 + 2) & 3;
local_58 = (*(int *)(((int)psVar14 + 7U) - uVar1) << (3 - uVar1) * 8 |
(uint)((ulonglong)uVar17 >> 0x20) & 0xffffffffU >> (uVar1 + 1) * 8) &
-1 << (4 - uVar8) * 8 | *(uint *)((int)(psVar14 + 2) - uVar8) >> uVar8 * 8;
uVar8 = (uint)(psVar14 + 4) & 3;
local_54 = (*(int *)(((int)psVar14 + 0xbU) - uVar2) << (3 - uVar2) * 8 |
(uint)pvVar9 & 0xffffffffU >> (uVar2 + 1) * 8) & -1 << (4 - uVar8) * 8 |
*(uint *)((int)(psVar14 + 4) - uVar8) >> uVar8 * 8;
uVar8 = (uint)(psVar14 + 6) & 3;
local_50 = (*(int *)(((int)psVar14 + 0xfU) - uVar3) << (3 - uVar3) * 8 |
uVar11 & 0xffffffffU >> (uVar3 + 1) * 8) & -1 << (4 - uVar8) * 8 |
*(uint *)((int)(psVar14 + 6) - uVar8) >> uVar8 * 8;
uVar11 = (uint)(psVar14 + 10) & 3;
uVar13 = (*(int *)(((int)psVar14 + 0x17U) - uVar4) << (3 - uVar4) * 8 |
uVar13 & 0xffffffffU >> (uVar4 + 1) * 8) & -1 << (4 - uVar11) * 8 |
*(uint *)((int)(psVar14 + 10) - uVar11) >> uVar11 * 8;
local_48 = uVar13;
if (local_3c == 0) {
iVar6 = memcmp(local_2c,param_3,__n) //possible issue identified - semgrep
puVar10 = local_2c;
if (iVar6 == 0) goto LAB_00410ee0;
}
else {
local_6c[0] = 0;
local_6c[1] = 0;
local_6c[2] = 0;
local_6c[3] = 0;
local_7c = local_54;
local_78 = local_50;
local_74 = local_4c;
local_70 = uVar13;
memset(local_6c,0xff,__n);
*(char *)(local_38 + 0x14) = (char)local_40;
puVar10 = local_34;
puVar12 = local_6c;
do {
*(byte *)puVar10 = (byte)*puVar12 & (byte)*puVar10;
puVar10 = (uint *)((int)puVar10 + 1);
puVar12 = (uint *)((int)puVar12 + 1);
} while (local_6c != puVar10);
iVar6 = memcmp(local_34,param_3,__n) //possible issue identified - semgrep
if ((iVar6 == 0) &&
(puVar10 = &local_54, (uint)*(byte *)(local_38 + 4) == (local_40 & *local_30))) {
LAB_00410ee0:
uVar11 = puVar10[1];
uVar13 = *puVar10;
uVar8 = puVar10[2];
param_1[3] = puVar10[3];
*param_1 = uVar13;
param_1[1] = uVar11;
param_1[2] = uVar8;
uVar15 = 0;
goto LAB_00410d64;
}
}
}
}
piVar16 = (int *)*piVar16;
} while (piVar16 != (int *)0x0);
}
uVar15 = 0xffffffff;
LAB_00410d64:
freeifaddrs(local_80);
}
else {
uVar15 = 0xffffffff;
piVar16 = __errno_location();
pcVar7 = strerror(*piVar16);
dprintf(4,"getifaddr","getifaddrs failed: %s",pcVar7);
}
return uVar15;
}