undefined4 * FUN_0040c86c(int param_1,undefined4 *param_2,char *param_3)

{
  int iVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  
  if (*param_3 == '$') {
    param_3 = (char *)FUN_0040c950(param_1,param_2,param_3 + 1);
  }
  puVar2 = (undefined4 *)(param_1 + 0x18);
  if (param_2 != (undefined4 *)0x0) {
    puVar2 = param_2;
  }
  puVar3 = (undefined4 *)*puVar2;
  while( true ) {
    if (puVar3 == puVar2) {
      puVar2 = (undefined4 *)FUN_0040c744(param_1,param_2,param_3,"");
      return puVar2;
    }
    iVar1 = strcmp((char *)puVar3[2],param_3);
    if (iVar1 == 0) break;
    puVar3 = (undefined4 *)*puVar3;
  }
  return puVar3;
}