server-re/decomp/MessageServer_Release_x64/full/functions/0x1400eb620.c

183 lines
6.2 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400eb620 FUN_1400eb620
* Pseudocode, not original source. */
longlong *
FUN_1400eb620(undefined8 param_1,longlong *param_2,longlong *******param_3,longlong *param_4)
{
int *piVar1;
longlong *****ppppplVar2;
longlong ************pppppppppppplVar3;
char *pcVar4;
longlong ******pppppplVar5;
longlong ***********ppppppppppplVar6;
longlong ************_Str;
longlong ******_Str_00;
longlong *****_SubStr;
longlong ***********_SubStr_00;
longlong *plVar7;
uint uVar8;
uint uVar9;
int iVar10;
undefined *puVar11;
ulonglong uVar12;
ulonglong uVar13;
longlong *****local_48;
longlong ***********local_40;
undefined1 local_38;
undefined8 local_30;
local_30 = 0xfffffffffffffffe;
plVar7 = param_4;
FUN_14006cb70(param_1,param_2,param_3,param_4);
local_48 = (longlong *****)PTR_DAT_1401ac008;
puVar11 = (undefined *)*param_4;
if ((undefined *)*param_4 == (undefined *)0x0) {
puVar11 = PTR_DAT_1401ac008;
}
pppppplVar5 = &local_48;
FUN_14006e800((longlong *)pppppplVar5,"<%s>",puVar11,plVar7);
ppppplVar2 = local_48;
_SubStr = local_48;
if (local_48 == (longlong *****)0x0) {
_SubStr = (longlong *****)PTR_DAT_1401ac008;
}
if (_SubStr == (longlong *****)0x0) {
uVar8 = 0xffffffff;
}
else {
pppppplVar5 = *param_3;
_Str_00 = (longlong ******)PTR_DAT_1401ac008;
if (((pppppplVar5 == (longlong ******)0x0) ||
(_Str_00 = pppppplVar5, pppppplVar5 == (longlong ******)PTR_DAT_1401ac008)) ||
(uVar8 = 0xffffffff, -1 < *(int *)(pppppplVar5 + -1))) {
pcVar4 = strstr((char *)_Str_00,(char *)_SubStr);
if (pcVar4 == (char *)0x0) {
pppppplVar5 = _Str_00;
uVar8 = 0xffffffff;
}
else {
pppppplVar5 = *param_3;
if (*param_3 == (longlong ******)0x0) {
pppppplVar5 = (longlong ******)PTR_DAT_1401ac008;
}
uVar8 = (int)pcVar4 - (int)pppppplVar5;
pppppplVar5 = (longlong ******)PTR_DAT_1401ac008;
if (-1 < (int)uVar8) {
iVar10 = 0;
if ((ppppplVar2 != (longlong *****)0x0) &&
(iVar10 = 0, ppppplVar2 != (longlong *****)PTR_DAT_1401ac008)) {
iVar10 = *(int *)(ppppplVar2 + -1);
}
uVar8 = uVar8 + iVar10;
}
}
}
}
FUN_14006cb70(pppppplVar5,_SubStr,puVar11,plVar7);
local_40 = (longlong ***********)PTR_DAT_1401ac008;
puVar11 = (undefined *)*param_4;
if ((undefined *)*param_4 == (undefined *)0x0) {
puVar11 = PTR_DAT_1401ac008;
}
_Str = &local_40;
FUN_14006e800((longlong *)_Str,"</%s>",puVar11,plVar7);
ppppppppppplVar6 = local_40;
_SubStr_00 = local_40;
if (local_40 == (longlong ***********)0x0) {
_SubStr_00 = (longlong ***********)PTR_DAT_1401ac008;
}
uVar9 = 0xffffffff;
if ((_SubStr_00 != (longlong ***********)0x0) &&
((((_Str = (longlong ************)*param_3,
pppppppppppplVar3 = (longlong ************)PTR_DAT_1401ac008, uVar9 = 0xffffffff,
_Str == (longlong ************)0x0 ||
(pppppppppppplVar3 = _Str, _Str == (longlong ************)PTR_DAT_1401ac008)) ||
(-1 < *(int *)(_Str + -1))) &&
(_Str = pppppppppppplVar3, pcVar4 = strstr((char *)_Str,(char *)_SubStr_00),
pcVar4 != (char *)0x0)))) {
pppppplVar5 = *param_3;
if (*param_3 == (longlong ******)0x0) {
pppppplVar5 = (longlong ******)PTR_DAT_1401ac008;
}
uVar9 = (int)pcVar4 - (int)pppppplVar5;
}
if ((((int)uVar8 < 0) || ((int)uVar9 < 0)) || ((int)uVar9 <= (int)uVar8)) {
FUN_14006cb70(_Str,_SubStr_00,puVar11,plVar7);
*param_2 = (longlong)PTR_DAT_1401ac008;
if (((ppppppppppplVar6 != (longlong ***********)0x0) &&
(ppppppppppplVar6 != (longlong ***********)PTR_DAT_1401ac008)) &&
(ppppppppppplVar6 + -1 != (longlong ***********)0x0)) {
_Str = (longlong ************)FUN_14006cb70(_Str,_SubStr_00,puVar11,plVar7);
local_40 = (longlong ***********)_Str;
FUN_14006b350((int *)_Str);
local_38 = 1;
piVar1 = (int *)((longlong)ppppppppppplVar6 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14006cc60(ppppppppppplVar6 + -1);
}
FUN_14006b3e0((longlong)_Str);
}
if (ppppplVar2 == (longlong *****)0x0) {
return param_2;
}
if (ppppplVar2 == (longlong *****)PTR_DAT_1401ac008) {
return param_2;
}
if (ppppplVar2 + -1 == (longlong *****)0x0) {
return param_2;
}
ppppppppppplVar6 = (longlong ***********)FUN_14006cb70(_Str,_SubStr_00,puVar11,plVar7);
local_40 = ppppppppppplVar6;
FUN_14006b350((int *)ppppppppppplVar6);
local_38 = 1;
piVar1 = (int *)((longlong)ppppplVar2 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14006cc60(ppppplVar2 + -1);
}
}
else {
uVar13 = (ulonglong)(uVar9 - uVar8);
uVar12 = (ulonglong)uVar8;
plVar7 = param_2;
FUN_1400ea9f0((longlong *)param_3,param_2,uVar8,uVar9 - uVar8);
if (((ppppppppppplVar6 != (longlong ***********)0x0) &&
(ppppppppppplVar6 != (longlong ***********)PTR_DAT_1401ac008)) &&
(ppppppppppplVar6 + -1 != (longlong ***********)0x0)) {
param_3 = (longlong *******)FUN_14006cb70(param_3,plVar7,uVar12,uVar13);
local_40 = (longlong ***********)param_3;
FUN_14006b350((int *)param_3);
local_38 = 1;
piVar1 = (int *)((longlong)ppppppppppplVar6 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14006cc60(ppppppppppplVar6 + -1);
}
FUN_14006b3e0((longlong)param_3);
}
if (ppppplVar2 == (longlong *****)0x0) {
return param_2;
}
if (ppppplVar2 == (longlong *****)PTR_DAT_1401ac008) {
return param_2;
}
if (ppppplVar2 + -1 == (longlong *****)0x0) {
return param_2;
}
ppppppppppplVar6 = (longlong ***********)FUN_14006cb70(param_3,plVar7,uVar12,uVar13);
local_40 = ppppppppppplVar6;
FUN_14006b350((int *)ppppppppppplVar6);
local_38 = 1;
piVar1 = (int *)((longlong)ppppplVar2 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14006cc60(ppppplVar2 + -1);
}
}
FUN_14006b3e0((longlong)ppppppppppplVar6);
return param_2;
}