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