void FUN_00404e3c(int param_1,char *param_2,char *param_3)
{
int *piVar1;
int iVar2;
char *pcVar3;
int *piVar4;
piVar4 = *(int **)(param_1 + 0x10);
while( true ) {
if (piVar4 == (int *)(param_1 + 0x10)) {
if ((*param_3 != '\0') &&
(piVar1 = (int *)FUN_00404d94(param_2,param_3), piVar1 != (int *)0x0)) {
iVar2 = *(int *)(param_1 + 0x10);
*piVar1 = iVar2;
*(int **)(iVar2 + 4) = piVar1;
*(int **)(param_1 + 0x10) = piVar1;
piVar1[1] = (int)piVar4;
}
return;
}
if (((char *)piVar4[2] != (char *)0x0) &&
(iVar2 = strcmp((char *)piVar4[2],param_2), iVar2 == 0)) break;
piVar4 = (int *)*piVar4;
}
if (*param_3 != '\0') {
if ((void *)piVar4[3] != (void *)0x0) {
free((void *)piVar4[3]);
}
pcVar3 = strdup(param_3) //possible issue identified - semgrep
piVar4[3] = (int)pcVar3;
return;
}
piVar1 = (int *)piVar4[1];
iVar2 = *piVar4;
*piVar1 = iVar2;
*(int **)(iVar2 + 4) = piVar1;
*piVar4 = 0;
piVar4[1] = 0;
FUN_0040486c(piVar4);
return;
}