void run_script(int param_1,undefined4 param_2)

{
  char cVar1;
  byte bVar2;
  byte bVar3;
  byte bVar4;
  ushort uVar5;
  __pid_t __pid;
  int iVar6;
  byte *pbVar7;
  undefined4 uVar8;
  undefined *puVar9;
  uint *__src;
  int iVar10;
  uint *puVar11;
  byte bVar12;
  size_t sVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  undefined1 *puVar17;
  char *pcVar18;
  char *pcVar19;
  undefined4 *puVar20;
  int iVar21;
  int iVar22;
  int iVar23;
  double dVar24;
  uint uVar25;
  uint uVar26;
  uint in_fcsr;
  undefined *puVar27;
  int local_64;
  uint local_60 [2];
  undefined1 *local_58;
  int local_54;
  uint local_50;
  int local_4c;
  int local_48;
  undefined4 *local_44;
  undefined4 *local_40;
  uint *local_3c;
  
  if (PTR_s__usr_share_udhcpc_default_script_0041b50c == (undefined *)0x0) {
    return;
  }
  __pid = vfork()   //possible issue identified - semgrep
  if (__pid != 0) {
    waitpid(__pid,(int *)0x0,0);
    return;
  }
  if (param_1 == 0) {
    local_48 = 0;
    local_4c = 0;
    local_50 = 0;
    sVar13 = 0x14   //possible issue identified - semgrep
    goto LAB_0040754c;
  }
  iVar22 = 0;
  if (DAT_0041b675 != '\0') {
    pcVar18 = &DAT_0041b68b;
    do {
      iVar6 = get_option(param_1);
      if (iVar6 != 0) {
        iVar22 = iVar22 + 1;
      }
      cVar1 = *pcVar18;
      pcVar18 = pcVar18 + 0x16;
    } while (cVar1 != '\0');
  }
  iVar6 = get_option(param_1,0xd4);
  local_4c = iVar6 + -2;
  if ((iVar6 == 0) || (*(byte *)(iVar6 + -1) < 0x12)) {
    local_48 = 0;
    local_4c = 0;
  }
  else if (*(byte *)(iVar6 + -1) < 0x16) {
    local_48 = 0;
    iVar22 = iVar22 + 3;
  }
  else {
    local_48 = 1;
    iVar22 = iVar22 + 4;
  }
  if (*(int *)(param_1 + 0x14) != 0) {
    iVar22 = iVar22 + 1;
  }
  pbVar7 = (byte *)get_option(param_1,0x34);
  if (pbVar7 == (byte *)0x0) {
    local_50 = 0;
    bVar12 = 0;
LAB_00408250:
    if (*(char *)(param_1 + 0x6c) != '\0') {
      iVar22 = iVar22 + 1;
    }
  }
  else {
    bVar12 = *pbVar7;
    local_50 = (uint)(char)bVar12;
    if ((bVar12 & 1) == 0) {
      bVar12 = bVar12 & 2;
      goto LAB_00408250;
    }
    bVar12 = bVar12 & 2;
  }
  if ((bVar12 == 0) && (*(char *)(param_1 + 0x2c) != '\0')) {
    sVar13 = (iVar22 + 6) * 4   //possible issue identified - semgrep
  }
  else {
    sVar13 = (iVar22 + 5) * 4   //possible issue identified - semgrep
  }
LAB_0040754c:
  local_40 = (undefined4 *)malloc(sVar13)   //possible issue identified - semgrep
  sVar13 = strlen(PTR_DAT_0041b504);
  pcVar18 = (char *)malloc(sVar13 + 0xb)   //possible issue identified - semgrep
  puVar9 = PTR_DAT_0041b504;
  *local_40 = pcVar18;
  sprintf(pcVar18,"interface=%s",puVar9)   //possible issue identified - semgrep
  uVar8 = FUN_00407300(&DAT_0040a730,"PATH=/bin:/usr/bin:/sbin:/usr/sbin");
  local_40[1] = uVar8;
  uVar8 = FUN_00407300(&DAT_0040a75c,"HOME=/");
  local_40[2] = uVar8;
  local_44 = local_40;
  if (param_1 == 0) {
    local_40[3] = 0;
  }
  else {
    pcVar18 = (char *)malloc(0x13)   //possible issue identified - semgrep
    uVar15 = (uint)*(byte *)(param_1 + 0x12);
    uVar16 = (uint)*(byte *)(param_1 + 0x13);
    bVar12 = *(byte *)(param_1 + 0x10);
    uVar14 = (uint)*(byte *)(param_1 + 0x11);
    local_40[3] = pcVar18;
    puVar27 = &DAT_0040a780;
    sprintf(pcVar18,"%s%d.%d.%d.%d%s",&DAT_0040a77c,(uint)bVar12,uVar14,uVar15,uVar16,&DAT_0040a780)   //possible issue identified - semgrep
    ;
    puVar9 = &options;
    if (DAT_0041b675 == '\0') {
      local_54 = 4;
    }
    else {
      iVar22 = 0;
      uVar26 = 0x3fc00000;
      local_54 = 4;
      do {
        __src = (uint *)get_option(param_1);
        puVar20 = local_44;
        iVar6 = local_54;
        if (__src != (uint *)0x0) {
          bVar12 = *(byte *)((int)__src + -2);
          if (bVar12 == 0x79) {
            bVar12 = *(byte *)((int)__src + -1);
            if (bVar12 == 0) {
              iVar23 = 0;
            }
            else {
              iVar21 = 0;
              iVar23 = 0;
              uVar25 = 0x3fc00000;
              puVar11 = __src;
              do {
                iVar23 = iVar23 + 0x33;
                dVar24 = ceil((double)(byte)*puVar11 * (double)((ulonglong)uVar25 << 0x20));
                if ((((in_fcsr | 3) ^ 2) & 3) == 0) {
                  dVar24 = ROUND(dVar24);
                }
                else {
                  dVar24 = FLOOR(dVar24);
                }
                iVar21 = iVar21 + (int)dVar24 + 5;
                puVar11 = (uint *)((int)__src + iVar21);
              } while (iVar21 < (int)(uint)bVar12);
            }
            sVar13 = strlen(&options + iVar22 * 0x16)   //possible issue identified - semgrep
LAB_0040803c:
            pcVar18 = (char *)malloc(sVar13 + 2 + iVar23)   //possible issue identified - semgrep
            puVar20[iVar6] = pcVar18;
          }
          else {
            if (bVar12 == 0xf9) {
              bVar12 = *(byte *)((int)__src + -1);
              if (bVar12 == 0) {
                iVar23 = 0;
              }
              else {
                iVar21 = 0;
                iVar23 = 0;
                uVar25 = 0x3fc00000;
                do {
                  iVar23 = iVar23 + 0x33;
                  dVar24 = ceil((double)*(byte *)((int)__src + iVar21) *
                                (double)((ulonglong)uVar25 << 0x20));
                  if ((((in_fcsr | 3) ^ 2) & 3) == 0) {
                    dVar24 = ROUND(dVar24);
                  }
                  else {
                    dVar24 = FLOOR(dVar24);
                  }
                  iVar21 = iVar21 + (int)dVar24 + 5;
                } while (iVar21 < (int)(uint)bVar12);
              }
              sVar13 = strlen(&options + iVar22 * 0x16)   //possible issue identified - semgrep
              goto LAB_0040803c;
            }
            if (bVar12 == 0x21) {
              bVar12 = puVar9[0x14];
              sVar13 = strlen(&options + iVar22 * 0x16)   //possible issue identified - semgrep
            }
            else {
              bVar12 = puVar9[0x14];
              sVar13 = strlen(&options + iVar22 * 0x16)   //possible issue identified - semgrep
            }
            iVar6 = (bVar12 & 0xf) * 4;
            if (*(int *)(option_lengths + iVar6) == 0) {
              trap(0x1c00);
            }
            pcVar18 = (char *)malloc(sVar13 + 2 +
                                     ((int)(uint)*(byte *)((int)__src + -1) /
                                     *(int *)(option_lengths + iVar6)) *
                                     *(int *)(&UNK_0040a894 + iVar6))   //possible issue identified - semgrep
            local_44[local_54] = pcVar18;
          }
          sVar13 = (size_t)*(byte *)((int)__src + -1)   //possible issue identified - semgrep
          local_60[0] = 0;
          iVar6 = sprintf(pcVar18,"%s=",puVar9)   //possible issue identified - semgrep
          local_58 = (undefined1 *)((byte)puVar9[0x14] & 0xf);
          local_3c = &switchD_00407864::switchdataD_0040a860 + (int)local_58;
          iVar23 = *(int *)(option_lengths + (int)local_58 * 4);
          pcVar18 = pcVar18 + iVar6;
          do {
            if ((undefined1 *)0xc < local_58) {
switchD_00407864_caseD_4077e4:
              goto LAB_004077e8;
            }
            puVar17 = local_58;
            switch((uint)(&_gp + *local_3c) & 0xfffffffe) {
            case 0x4077e4:
              goto switchD_00407864_caseD_4077e4;
            case 0x40786c:
              iVar6 = sprintf(pcVar18,"%s%d.%d.%d.%d%s","",(uint)(byte)*__src,
                              (uint)*(byte *)((int)__src + 1),(uint)*(byte *)((int)__src + 2),
                              (uint)*(byte *)((int)__src + 3),&DAT_0040a780)   //possible issue identified - semgrep
              pcVar19 = pcVar18 + iVar6;
              pcVar18 = pcVar19 + 1;
              *pcVar19 = '/';
              __src = __src + 1;
              iVar23 = 4;
            case 0x4078cc:
              bVar12 = *(byte *)((int)__src + 1);
              bVar2 = (byte)*__src;
              bVar3 = *(byte *)((int)__src + 2);
              bVar4 = *(byte *)((int)__src + 3);
              goto LAB_00407908;
            case 0x407920:
              dVar24 = ceil((double)(byte)*__src * (double)((ulonglong)uVar26 << 0x20));
              if ((((in_fcsr | 3) ^ 2) & 3) == 0) {
                dVar24 = ROUND(dVar24);
              }
              else {
                dVar24 = FLOOR(dVar24);
              }
              iVar6 = (int)dVar24;
              local_60[0] = 0;
              iVar23 = iVar6 + 5;
              if (iVar6 == 0) {
                local_64 = 0;
              }
              else {
                local_64 = -1;
              }
              uVar14 = local_64 << (-(uint)(byte)*__src & 0x1f);
              uVar15 = uVar14 >> 8 & 0xff00;
              uVar16 = (uVar14 & 0xff00) << 8;
              if (0 < iVar6) {
                iVar21 = 0;
                do {
                  iVar10 = iVar21 + 1;
                  pbVar7 = (byte *)((int)local_60 + iVar21);
                  iVar21 = iVar21 + 1;
                  *pbVar7 = *(byte *)((int)__src + iVar10);
                } while (iVar21 < iVar6);
              }
              local_60[0] = local_60[0] & (uVar14 << 0x18 | uVar14 >> 0x18 | uVar15 | uVar16);
              iVar21 = sprintf(pcVar18,"%s%d.%d.%d.%d%s","",local_60[0] & 0xff,
                               local_60[0] >> 8 & 0xff,local_60[0] >> 0x10 & 0xff,
                               local_60[0] >> 0x18,&DAT_0040a7bc)   //possible issue identified - semgrep
              pcVar18 = pcVar18 + iVar21;
              iVar21 = sprintf(pcVar18,"%s%d.%d.%d.%d%s","",uVar14 >> 0x18,uVar15 >> 8,
                               uVar16 >> 0x10,uVar14 & 0xff,&DAT_0040a7bc)   //possible issue identified - semgrep
              iVar10 = sprintf(pcVar18 + iVar21,"%u,",(uint)(byte)*__src)   //possible issue identified - semgrep
              pbVar7 = (byte *)((int)__src + iVar6 + 1);
              bVar12 = pbVar7[1];
              bVar2 = *pbVar7;
              bVar3 = pbVar7[2];
              pcVar18 = pcVar18 + iVar21 + iVar10;
              bVar4 = pbVar7[3];
LAB_00407908:
              uVar16 = (uint)bVar4;
              uVar15 = (uint)bVar3;
              uVar14 = (uint)bVar12;
              puVar27 = &DAT_0040a780;
              iVar6 = sprintf(pcVar18,"%s%d.%d.%d.%d%s","",(uint)bVar2,uVar14,uVar15,uVar16,
                              &DAT_0040a780)   //possible issue identified - semgrep
              pcVar18 = pcVar18 + iVar6;
LAB_004077e8:
              sVar13 = sVar13 - iVar23   //possible issue identified - semgrep
              goto LAB_004077ec;
            case 0x407aec:
              iVar6 = sprintf(pcVar18,"%s%d.%d.%d.%d%s","",(uint)(byte)*__src,
                              (uint)*(byte *)((int)__src + 1),(uint)*(byte *)((int)__src + 2),
                              (uint)*(byte *)((int)__src + 3),&DAT_0040a7bc)   //possible issue identified - semgrep
              bVar12 = (byte)*__src;
              pcVar19 = pcVar18 + iVar6;
              if ((char)bVar12 < '\0') {
                if ((bVar12 & 0xc0) == 0x80) {
                  builtin_strncpy(pcVar18 + iVar6,"255.255.0.0,16,",0x10)   //possible issue identified - semgrep
                  pcVar19 = pcVar19 + 0xf;
                }
                else if ((bVar12 & 0xe0) == 0xc0) {
                  builtin_strncpy(pcVar18 + iVar6,"255.255.255.0,24,",0x12)   //possible issue identified - semgrep
                  pcVar19 = pcVar19 + 0x11;
                }
                else {
                  builtin_strncpy(pcVar18 + iVar6,"255.255.255.255,32,",0x14)   //possible issue identified - semgrep
                  pcVar19 = pcVar19 + 0x13;
                }
              }
              else {
                builtin_strncpy(pcVar18 + iVar6,"255.0.0.0,8,",0xd)   //possible issue identified - semgrep
                pcVar19 = pcVar19 + 0xc;
              }
              uVar14 = (uint)*(byte *)((int)__src + 5);
              uVar15 = (uint)*(byte *)((int)__src + 6);
              uVar16 = (uint)*(byte *)((int)__src + 7);
              puVar27 = &DAT_0040a780;
              iVar6 = sprintf(pcVar19,"%s%d.%d.%d.%d%s","",(uint)(byte)__src[1],uVar14,uVar15,uVar16
                              ,&DAT_0040a780)   //possible issue identified - semgrep
              pcVar18 = pcVar19 + iVar6;
              sVar13 = sVar13 - 4   //possible issue identified - semgrep
              iVar23 = 4;
              __src = __src + 1;
              goto LAB_004077e8;
            case 0x407be0:
              uVar25 = *__src;
              uVar25 = uVar25 << 0x18 | uVar25 >> 0x18 | uVar25 >> 8 & 0xff00 |
                       (uVar25 & 0xff00) << 8;
              pcVar19 = "%ld ";
              puVar17 = &DAT_00410000;
              break;
            case 0x407c38:
              uVar25 = *__src;
              uVar25 = uVar25 << 0x18 | uVar25 >> 0x18 | uVar25 >> 8 & 0xff00 |
                       (uVar25 & 0xff00) << 8;
              pcVar19 = "%u ";
              break;
            case 0x407c80:
              uVar5 = (ushort)*__src;
              pcVar19 = "%d ";
LAB_00407ca0:
              uVar25 = (uVar5 & 0xff) << 8 | (uint)(uVar5 >> 8);
              break;
            case 0x407cb8:
              uVar5 = (ushort)*__src;
              pcVar19 = "%u ";
              goto LAB_00407ca0;
            case 0x407cdc:
              uVar25 = (uint)(byte)*__src;
              pcVar19 = "%u ";
              break;
            case 0x407cf4:
              if ((byte)*__src == 0) {
                pcVar19 = "no ";
              }
              else {
                pcVar19 = "yes ";
              }
              iVar6 = sprintf(pcVar18,pcVar19)   //possible issue identified - semgrep
              pcVar18 = pcVar18 + iVar6;
              goto LAB_004077e8;
            case 0x407d2c:
              memcpy(pcVar18,__src,sVar13)   //possible issue identified - semgrep
              pcVar18[sVar13] = '\0';
              goto LAB_00407d4c;
            }
            sVar13 = sVar13 - iVar23   //possible issue identified - semgrep
            iVar6 = sprintf(pcVar18,pcVar19,uVar25,puVar17,uVar14,uVar15,uVar16,puVar27)   //possible issue identified - semgrep
            pcVar18 = pcVar18 + iVar6;
LAB_004077ec:
            __src = (uint *)((int)__src + iVar23);
          } while (0 < (int)sVar13);
LAB_00407d4c:
          local_54 = local_54 + 1;
        }
        pcVar18 = puVar9 + 0x2b;
        iVar22 = iVar22 + 1;
        puVar9 = puVar9 + 0x16;
      } while (*pcVar18 != '\0');
    }
    iVar22 = local_54;
    if (*(int *)(param_1 + 0x14) != 0) {
      pcVar18 = (char *)malloc(0x17)   //possible issue identified - semgrep
      uVar14 = (uint)*(byte *)(param_1 + 0x15);
      uVar15 = (uint)*(byte *)(param_1 + 0x16);
      uVar16 = (uint)*(byte *)(param_1 + 0x17);
      bVar12 = *(byte *)(param_1 + 0x14);
      local_40[iVar22] = pcVar18;
      local_54 = iVar22 + 1;
      puVar27 = &DAT_0040a780;
      sprintf(pcVar18,"%s%d.%d.%d.%d%s","siaddr=",(uint)bVar12,uVar14,uVar15,uVar16,&DAT_0040a780)   //possible issue identified - semgrep
    }
    uVar26 = local_50;
    if (((local_50 & 1) == 0) && (*(char *)(param_1 + 0x6c) != '\0')) {
      *(undefined1 *)(param_1 + 0xeb) = 0;
      sVar13 = strlen((char *)(param_1 + 0x6c))   //possible issue identified - semgrep
      pcVar18 = (char *)malloc(sVar13 + 0xb)   //possible issue identified - semgrep
      local_40[local_54] = pcVar18;
      local_54 = local_54 + 1;
      sprintf(pcVar18,"boot_file=%s",(char *)(param_1 + 0x6c),local_40,uVar14,uVar15,uVar16,puVar27)   //possible issue identified - semgrep
      ;
    }
    if (((uVar26 & 2) == 0) && (*(char *)(param_1 + 0x2c) != '\0')) {
      *(undefined1 *)(param_1 + 0x6b) = 0;
      sVar13 = strlen((char *)(param_1 + 0x2c))   //possible issue identified - semgrep
      pcVar18 = (char *)malloc(sVar13 + 7)   //possible issue identified - semgrep
      puVar20 = local_40 + local_54;
      local_54 = local_54 + 1;
      *puVar20 = pcVar18;
      sprintf(pcVar18,"sname=%s",(char *)(param_1 + 0x2c))   //possible issue identified - semgrep
    }
    if (local_4c != 0) {
      pcVar18 = (char *)malloc(0x18)   //possible issue identified - semgrep
      local_40[local_54] = pcVar18;
      sprintf(pcVar18,"sixrd_msklen=%u",(uint)*(byte *)(local_4c + 2))   //possible issue identified - semgrep
      iVar22 = local_54 + 1;
      pcVar18 = (char *)malloc(0x1b)   //possible issue identified - semgrep
      local_40[iVar22] = pcVar18;
      sprintf(pcVar18,"sixrd_prefixlen=%u",(uint)*(byte *)(local_4c + 3))   //possible issue identified - semgrep
      puVar20 = local_40 + local_54 + 2;
      pcVar18 = (char *)malloc(0x80)   //possible issue identified - semgrep
      builtin_strncpy(pcVar18,"sixrd_prefix",0xc)   //possible issue identified - semgrep
      *puVar20 = pcVar18;
      pcVar18[0xc] = '=';
      pcVar18[0xd] = '\0';
      inet_ntop(10,(void *)(local_4c + 4),pcVar18 + 0xd,0x73)   //possible issue identified - semgrep
      local_54 = local_54 + 3;
      if (local_48 != 0) {
        puVar20 = local_40 + local_54;
        pcVar18 = (char *)malloc(0x80)   //possible issue identified - semgrep
        builtin_strncpy(pcVar18,"sixrd_bripad",0xc)   //possible issue identified - semgrep
        *puVar20 = pcVar18;
        builtin_strncpy(pcVar18 + 0xc,"dr=",4)   //possible issue identified - semgrep
        local_54 = local_54 + 1;
        inet_ntop(2,(void *)(local_4c + 0x14),pcVar18 + 0xf,0x71)   //possible issue identified - semgrep
      }
    }
    local_40[local_54] = 0;
  }
  execle(PTR_s__usr_share_udhcpc_default_script_0041b50c,
         PTR_s__usr_share_udhcpc_default_script_0041b50c,param_2,0,local_40)   //possible issue identified - semgrep
                    /* WARNING: Subroutine does not return */
  exit(1);
}