/* WARNING: Heritage AFTER dead removal. Example location: r0x0041d010 : 0x00405570 */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* WARNING: Restarted to delay deadcode elimination for space: ram */
void handle_event(undefined4 param_1,int param_2,int param_3)
{
int iVar1;
undefined4 *puVar2;
undefined *puVar3;
undefined4 *puVar4;
undefined *puVar5;
char *pcVar6;
char *pcVar7;
undefined **ppuVar8;
undefined **ppuVar9;
char *pcVar10;
if (param_2 < 2) {
fputs("SERVD: invalid event command !\n",_stderr);
goto LAB_00405790;
}
pcVar10 = *(char **)(param_3 + 4);
iVar1 = strcmp(pcVar10,"dump");
puVar3 = PTR_LOOP_0041b0e0;
if (iVar1 == 0) {
FUN_00404b6c();
goto LAB_00405790;
}
ppuVar8 = (undefined **)0x0;
do {
ppuVar9 = (undefined **)puVar3;
if (ppuVar8 != (undefined **)0x0) {
ppuVar9 = (undefined **)*ppuVar8;
}
if ((ppuVar9 == &PTR_LOOP_0041b0e0) || (ppuVar9 == (undefined **)0x0)) {
ppuVar9 = (undefined **)0x0;
break;
}
iVar1 = strcmp(ppuVar9[2],pcVar10);
ppuVar8 = ppuVar9;
} while (iVar1 != 0);
if (3 < param_2) {
pcVar6 = *(char **)(param_3 + 8);
iVar1 = strcmp(pcVar6,"add");
if (iVar1 == 0) {
pcVar7 = *(char **)(param_3 + 0xc);
if (ppuVar9 == (undefined **)0x0) {
ppuVar9 = (undefined **)FUN_0040518c(pcVar10);
puVar3 = PTR_LOOP_0041b0e4;
if (ppuVar9 == (undefined **)0x0) goto LAB_00405790;
*ppuVar9 = (undefined *)&PTR_LOOP_0041b0e0;
ppuVar8 = ppuVar9;
*(undefined ***)PTR_LOOP_0041b0e4 = ppuVar9;
PTR_LOOP_0041b0e4 = (undefined *)ppuVar8;
ppuVar9[1] = puVar3;
}
else {
FUN_00404dc4(ppuVar9);
}
LAB_00405518:
pcVar6 = "default";
}
else {
iVar1 = strcmp(pcVar6,"insert");
if (iVar1 != 0) goto LAB_00405560;
pcVar6 = *(char **)(param_3 + 0xc);
if (ppuVar9 == (undefined **)0x0) {
ppuVar9 = (undefined **)FUN_0040518c(pcVar10);
puVar3 = PTR_LOOP_0041b0e4;
if (ppuVar9 == (undefined **)0x0) goto LAB_00405790;
*ppuVar9 = (undefined *)&PTR_LOOP_0041b0e0;
ppuVar8 = ppuVar9;
*(undefined ***)PTR_LOOP_0041b0e4 = ppuVar9;
PTR_LOOP_0041b0e4 = (undefined *)ppuVar8;
ppuVar9[1] = puVar3;
}
pcVar10 = strchr(pcVar6,0x3a);
pcVar7 = pcVar6;
if (pcVar10 == (char *)0x0) goto LAB_00405518;
*pcVar10 = '\0';
pcVar7 = pcVar10 + 1;
}
puVar2 = (undefined4 *)FUN_0040522c(pcVar6,pcVar7);
if (puVar2 != (undefined4 *)0x0) {
puVar4 = (undefined4 *)ppuVar9[6];
*puVar2 = ppuVar9 + 5;
ppuVar9[6] = (undefined *)puVar2;
*puVar4 = puVar2;
puVar2[1] = puVar4;
}
goto LAB_00405790;
}
LAB_00405560:
if (ppuVar9 == (undefined **)0x0) {
fprintf(_stderr,"SERVD: event [%s] not found!\n",pcVar10);
goto LAB_00405790;
}
if (param_2 < 4) {
if (param_2 != 2) goto LAB_00405698;
}
else {
iVar1 = strcmp(*(char **)(param_3 + 8),"remove");
ppuVar8 = (undefined **)0x0;
if (iVar1 == 0) {
pcVar10 = *(char **)(param_3 + 0xc);
do {
if (ppuVar8 == (undefined **)0x0) goto LAB_00405670;
ppuVar8 = (undefined **)*ppuVar8;
while( true ) {
if ((ppuVar8 == ppuVar9 + 5) || (ppuVar8 == (undefined **)0x0)) goto LAB_00405790;
iVar1 = strcmp(ppuVar8[3],pcVar10);
if (iVar1 != 0) break;
puVar2 = (undefined4 *)ppuVar8[1];
puVar3 = *ppuVar8;
puVar5 = ppuVar8[2];
*puVar2 = puVar3;
*(undefined4 **)(puVar3 + 4) = puVar2;
*ppuVar8 = (undefined *)0x0;
ppuVar8[1] = (undefined *)0x0;
if ((0 < (int)puVar5) && (iVar1 = child_running(), iVar1 == 0)) {
ppuVar8[2] = (undefined *)0x0;
}
if ((int)ppuVar8[2] < 1) {
FUN_00404c20(ppuVar8);
}
else {
ppuVar8[5] = ppuVar8[5] + 1;
}
LAB_00405670:
ppuVar8 = (undefined **)ppuVar9[5];
}
} while( true );
}
LAB_00405698:
pcVar10 = *(char **)(param_3 + 8);
iVar1 = strcmp(pcVar10,"kill");
if (iVar1 == 0) {
fprintf(_stderr,"SERVD: event [%s] was killed!\n",ppuVar9[2]);
ppuVar9[3] = (undefined *)0x0;
goto LAB_00405790;
}
iVar1 = strcmp(pcVar10,"dump");
if (iVar1 == 0) {
FUN_00404a80(ppuVar9);
goto LAB_00405790;
}
iVar1 = strcmp(pcVar10,"flush");
if (iVar1 == 0) {
FUN_00404dc4(ppuVar9);
goto LAB_00405790;
}
}
ppuVar9[3] = ppuVar9[3] + 1;
if (ppuVar9[4] != (undefined *)0x0) {
free(ppuVar9[4]);
}
pcVar10 = (char *)0x0;
if (param_2 != 2) {
pcVar10 = strdup(*(char **)(param_3 + 8)) //possible issue identified - semgrep
}
ppuVar9[4] = pcVar10;
LAB_00405790:
service_events();
return;
}