void FUN_00401da4(void)

{
  char cVar1;
  bool bVar2;
  undefined *puVar3;
  char *pcVar4;
  char **ppcVar5;
  char *pcVar6;
  uint uVar7;
  int iVar8;
  undefined4 uVar9;
  char *pcVar10;
  uint uVar11;
  int iVar12;
  size_t __n;
  size_t sVar13;
  void *__ptr;
  char *local_d8;
  char *local_d4;
  char *local_d0;
  char *local_cc;
  char *apcStack_b8 [32];
  FILE *local_38;
  char **local_34;
  char **local_30;
  
  mrtapi_init();
  mrt_init();
  puVar3 = o_configfile;
  local_38 = fopen(o_configfile,"r")   //possible issue identified - semgrep
  if (local_38 == (FILE *)0x0) {
    verbose("%s: unable to open file (%s) for reading!\n","read_config_file",puVar3);
LAB_004021bc:
    uVar9 = mrtapi_sock();
    sopt_set_hdrincl(uVar9,1);
    uVar9 = mrtapi_sock();
    sopt_set_multicast_loop(uVar9,0);
    if (o_helperscript != 0) {
      snprintf((char *)apcStack_b8,0x7f,"sh %s flush")   //possible issue identified - semgrep
      system((char *)apcStack_b8)   //possible issue identified - semgrep
    }
    uVar9 = mrtapi_sock();
    DAT_0041b820 = sloop_register_read_sock(uVar9,FUN_0040249c,0);
    return;
  }
  local_30 = apcStack_b8;
  local_34 = &local_d8;
  iVar12 = 0;
  __ptr = (void *)0x0;
  sVar13 = 0;
LAB_0040212c:
  uVar7 = fgetc(local_38)   //possible issue identified - semgrep
  iVar8 = sVar13 - 1   //possible issue identified - semgrep
  if (uVar7 != 0xffffffff) goto LAB_00402170;
  if (iVar12 != 0) goto LAB_004021b0;
  goto LAB_004021bc;
LAB_00402170:
  while (iVar8 <= iVar12) {
    __ptr = realloc(__ptr,sVar13 + 0x50)   //possible issue identified - semgrep
    iVar8 = sVar13 + 0x4f   //possible issue identified - semgrep
    sVar13 = sVar13 + 0x50   //possible issue identified - semgrep
  }
  uVar7 = uVar7 & -(uint)(uVar7 != 10);
  *(char *)((int)__ptr + iVar12) = (char)uVar7;
  iVar12 = iVar12 + 1;
  if (uVar7 != 0) goto LAB_0040212c;
LAB_004021b0:
  *(undefined1 *)((int)__ptr + iVar12) = 0;
  if (__ptr == (void *)0x0) goto LAB_004021bc;
  pcVar4 = (char *)lxmldbc_eatwhite(__ptr);
  iVar12 = 0;
  ppcVar5 = local_34;
  if (*pcVar4 == '#') goto LAB_004020e8;
  do {
    *ppcVar5 = (char *)0x0;
    ppcVar5 = ppcVar5 + 1;
  } while (ppcVar5 != local_30);
  iVar12 = 0;
  ppcVar5 = local_34;
  while (*pcVar4 != '\0') {
    if (7 < iVar12) goto LAB_00401fc8;
    pcVar10 = (char *)lxmldbc_eatwhite(pcVar4);
    pcVar4 = pcVar10;
    if (*pcVar10 != '\0') {
      pcVar6 = pcVar10;
      sVar13 = 0;
      while( true ) {
        __n = sVar13;
        pcVar4 = pcVar6;
        cVar1 = *pcVar4;
        if (((cVar1 == '\0') || (cVar1 == ' ')) || (cVar1 == '\t')) break;
        if ((cVar1 == '\n') || (pcVar6 = pcVar4 + 1, sVar13 = __n + 1, cVar1 == '\r')) break   //possible issue identified - semgrep
      }
      pcVar6 = (char *)malloc(__n + 1)   //possible issue identified - semgrep
      memcpy(pcVar6,pcVar10,__n)   //possible issue identified - semgrep
      *ppcVar5 = pcVar6;
      iVar12 = iVar12 + 1;
      pcVar6[__n] = '\0';
      ppcVar5 = ppcVar5 + 1;
    }
  }
  if (iVar12 < 2) {
    verbose("%s: too less arguments, ignore this line!\n","read_config_file");
    goto LAB_004020e8;
  }
LAB_00401fc8:
  iVar8 = sioc_getifaddr(local_d8);
  pcVar4 = local_d4;
  if (iVar8 == 0) {
    pcVar10 = "%s: can not get the IP address of %s!\n";
    pcVar4 = local_d8;
  }
  else {
    iVar8 = strcmp(local_d4,"upstream");
    uVar7 = -(uint)(iVar8 != 0) | 1;
    iVar8 = strcmp(pcVar4,"downstream");
    pcVar10 = local_d8;
    if (iVar8 == 0) {
      uVar7 = 0;
    }
    else if (uVar7 == 0xffffffff) {
      pcVar10 = "%s: unknow argument - %s!\n";
      goto LAB_004020dc;
    }
    iVar8 = 0;
    if (iVar12 == 2) {
      uVar11 = 1;
    }
    else {
      uVar11 = atoi(local_d0);
      uVar11 = uVar11 & 0xff;
      iVar8 = 0;
      if (iVar12 != 3) {
        iVar8 = atoi(local_cc);
      }
    }
    iVar8 = vifs_add_if(uVar7,pcVar10,uVar11,iVar8);
    if (-1 < iVar8) goto LAB_004020e8;
    pcVar10 = "%s: unable to add %s into VIF!\n";
    pcVar4 = local_d8;
  }
LAB_004020dc:
  verbose(pcVar10,"read_config_file",pcVar4);
LAB_004020e8:
  iVar8 = 0;
  ppcVar5 = local_34;
  while (bVar2 = iVar8 < iVar12, iVar8 = iVar8 + 1, bVar2) {
    pcVar4 = *ppcVar5;
    ppcVar5 = ppcVar5 + 1;
    free(pcVar4);
  }
  free(__ptr);
  iVar12 = 0;
  __ptr = (void *)0x0;
  sVar13 = 0;
  goto LAB_0040212c;
}