undefined4 FUN_0040d988(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_0040d8e0(param_3,param_2), -1 < iVar6)) {
          uVar11 = piVar16[1];
          pvVar9 = param_3;
          uVar17 = FUN_0040d8e0();
          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_0040dc50;
            }
            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_0040dc50:
                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_0040dad4;
              }
            }
          }
        }
        piVar16 = (int *)*piVar16;
      } while (piVar16 != (int *)0x0);
    }
    uVar15 = 0xffffffff;
LAB_0040dad4:
    freeifaddrs(local_80);
  }
  else {
    uVar15 = 0xffffffff;
    piVar16 = __errno_location();
    pcVar7 = strerror(*piVar16);
    dprintf(4,"getifaddr","getifaddrs failed: %s",pcVar7);
  }
  return uVar15;
}