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