/* 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;
}