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

131 lines
4 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14000ee80 FUN_14000ee80
* Pseudocode, not original source. */
byte * FUN_14000ee80(longlong *param_1,byte *param_2,undefined8 param_3,int param_4)
{
char cVar1;
byte bVar2;
int iVar3;
longlong lVar4;
byte *pbVar5;
longlong *plVar6;
byte *pbVar7;
longlong *plVar8;
ulonglong uVar9;
longlong *plVar10;
char *pcVar11;
for (plVar10 = param_1; plVar10 != (longlong *)0x0; plVar10 = (longlong *)plVar10[3]) {
lVar4 = (**(code **)(*plVar10 + 0x20))(plVar10);
if (lVar4 != 0) {
lVar4 = (**(code **)(*plVar10 + 0x20))(plVar10);
goto LAB_14000eeed;
}
}
lVar4 = 0;
LAB_14000eeed:
pbVar5 = FUN_14000da10(param_2,param_4);
while (pbVar5 != (byte *)0x0) {
plVar10 = (longlong *)0x0;
if (*pbVar5 == 0) {
return pbVar5;
}
if (*pbVar5 == 0x3c) {
pbVar7 = &DAT_14015c008;
do {
if (*pbVar7 == 0) {
return pbVar5;
}
} while (((pbVar5 + -0x14015c008)[(longlong)pbVar7] == *pbVar7) &&
(pbVar7 = pbVar7 + 1, (pbVar5 + -0x14015c008)[(longlong)pbVar7] != 0));
if (*pbVar7 == 0) {
return pbVar5;
}
plVar8 = FUN_14000e4b0(param_1,pbVar5,param_4);
if (plVar8 == (longlong *)0x0) {
return (byte *)0x0;
}
param_2 = (byte *)(**(code **)(*plVar8 + 0x10))(plVar8,pbVar5,param_3,param_4);
LAB_14000f070:
FUN_14000b8b0(param_1,plVar8);
}
else {
plVar6 = operator_new(0x60);
plVar8 = plVar10;
if (plVar6 != (longlong *)0x0) {
plVar6[1] = -1;
plVar6[2] = 0;
plVar6[7] = (longlong)&DAT_1401bcf30;
plVar6[3] = 0;
*(undefined4 *)(plVar6 + 4) = 4;
plVar6[5] = 0;
plVar6[6] = 0;
plVar6[9] = 0;
plVar6[10] = 0;
*plVar6 = (longlong)TiXmlText::vftable;
FUN_14000af60(plVar6 + 7,&DAT_14015bf08,0);
*(undefined1 *)(plVar6 + 0xb) = 0;
plVar8 = plVar6;
}
if (plVar8 == (longlong *)0x0) {
if (lVar4 == 0) {
return (byte *)0x0;
}
if (*(char *)(lVar4 + 0x58) != '\0') {
return (byte *)0x0;
}
*(undefined1 *)(lVar4 + 0x58) = 1;
*(undefined4 *)(lVar4 + 0x5c) = 3;
uVar9 = 0xffffffffffffffff;
pcVar11 = PTR_s_Memory_allocation_failed__1401b3378;
goto code_r0x00014000f0b8;
}
if (DAT_1401b33e8 == '\0') {
pbVar5 = param_2;
}
param_2 = (byte *)(**(code **)(*plVar8 + 0x10))(plVar8,pbVar5,param_3,param_4);
plVar6 = (longlong *)plVar8[7];
if (*plVar6 != 0) {
do {
bVar2 = *(byte *)((longlong)(plVar6 + 2) + (longlong)plVar10);
iVar3 = isspace((uint)bVar2);
if (((iVar3 == 0) && (bVar2 != 10)) && (bVar2 != 0xd)) goto LAB_14000f070;
plVar10 = (longlong *)(ulonglong)((int)plVar10 + 1);
plVar6 = (longlong *)plVar8[7];
} while (plVar10 < (longlong *)*plVar6);
}
(**(code **)*plVar8)(plVar8,1);
}
pbVar5 = FUN_14000da10(param_2,param_4);
}
if ((lVar4 != 0) && (*(char *)(lVar4 + 0x58) == '\0')) {
*(undefined1 *)(lVar4 + 0x58) = 1;
*(undefined4 *)(lVar4 + 0x5c) = 6;
uVar9 = 0xffffffffffffffff;
pcVar11 = PTR_s_Error_reading_Element_value__1401b3390;
do {
if (uVar9 == 0) break;
uVar9 = uVar9 - 1;
cVar1 = *pcVar11;
pcVar11 = pcVar11 + 1;
} while (cVar1 != '\0');
FUN_14000af60((longlong *)(lVar4 + 0x60),PTR_s_Error_reading_Element_value__1401b3390,~uVar9 - 1
);
*(undefined8 *)(lVar4 + 0x74) = 0xffffffffffffffff;
}
return (byte *)0x0;
while( true ) {
uVar9 = uVar9 - 1;
cVar1 = *pcVar11;
pcVar11 = pcVar11 + 1;
if (cVar1 == '\0') break;
code_r0x00014000f0b8:
if (uVar9 == 0) break;
}
FUN_14000af60((longlong *)(lVar4 + 0x60),PTR_s_Memory_allocation_failed__1401b3378,~uVar9 - 1);
*(undefined8 *)(lVar4 + 0x74) = 0xffffffffffffffff;
return (byte *)0x0;
}