/* WARNING: Unknown calling convention -- yet parameter storage is locked */
if_nameindex * if_nameindex(void)
{
bool bVar1;
int __fd;
int iVar2;
int iVar3;
if_nameindex *__ptr;
char *pcVar4;
int *piVar5;
char *__s;
char **ppcVar6;
if_nameindex *piVar7;
uint uVar8;
uint uVar9;
undefined1 *puVar10;
undefined1 auStack_48 [16];
uint local_30;
undefined1 *local_2c;
__fd = FUN_00408250();
if (__fd < 0) {
return (if_nameindex *)0x0;
}
if (DAT_0041f9f4 == 0) {
local_2c = (undefined1 *)0x0;
local_30 = 0;
iVar2 = ioctl(__fd,0x8912,&local_30);
if ((-1 < iVar2) && (local_30 != 0)) goto LAB_00408530;
DAT_0041f9f4 = 1;
}
local_30 = 0x80;
LAB_00408530:
uVar9 = local_30;
puVar10 = auStack_48;
do {
iVar2 = -(uVar9 + 0xe & 0xfffffff8);
local_2c = puVar10 + iVar2 + 0x10;
local_30 = uVar9;
iVar3 = ioctl(__fd,0x8912,&local_30);
if (iVar3 < 0) {
close(__fd);
return (if_nameindex *)0x0;
}
} while ((local_30 == uVar9 << 1) &&
(uVar9 = local_30, puVar10 = puVar10 + iVar2, DAT_0041f9f4 != 0));
uVar9 = local_30 >> 5;
__ptr = (if_nameindex *)malloc((uVar9 + 1) * 8) //possible issue identified - semgrep
if (__ptr != (if_nameindex *)0x0) {
piVar7 = __ptr;
for (uVar8 = 0; uVar8 < uVar9; uVar8 = uVar8 + 1) {
__s = local_2c + uVar8 * 0x20;
pcVar4 = strdup(__s);
piVar7->if_name = pcVar4;
if ((pcVar4 == (char *)0x0) || (iVar2 = ioctl(__fd,0x8933,__s), iVar2 < 0)) {
ppcVar6 = &__ptr->if_name;
piVar5 = __errno_location();
iVar2 = *piVar5;
uVar9 = 0;
while (bVar1 = uVar9 < uVar8, uVar9 = uVar9 + 1, bVar1) {
pcVar4 = *ppcVar6;
ppcVar6 = ppcVar6 + 2;
free(pcVar4);
}
free(__ptr);
close(__fd);
if (iVar2 != 0x16) {
return (if_nameindex *)0x0;
}
*piVar5 = 0x59;
return (if_nameindex *)0x0;
}
piVar7->if_index = *(uint *)(__s + 0x10);
piVar7 = piVar7 + 1;
}
__ptr[uVar8].if_name = (char *)0x0;
__ptr[uVar8].if_index = 0;
}
close(__fd);
return __ptr;
}