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

88 lines
2.3 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14000bd00 FUN_14000bd00
* Pseudocode, not original source. */
void FUN_14000bd00(longlong *param_1,char *param_2,char *param_3)
{
char cVar1;
char cVar2;
longlong *plVar3;
char *pcVar4;
undefined8 *puVar5;
ulonglong uVar6;
longlong lVar7;
for (plVar3 = (longlong *)param_1[0x14]; plVar3 != param_1 + 0xb; plVar3 = (longlong *)plVar3[9])
{
pcVar4 = (char *)(plVar3[4] + 0x10);
lVar7 = (longlong)param_2 - (longlong)pcVar4;
do {
cVar1 = *pcVar4;
cVar2 = pcVar4[lVar7];
if (cVar1 != cVar2) break;
pcVar4 = pcVar4 + 1;
} while (cVar2 != '\0');
if (cVar1 == cVar2) {
if (plVar3 != (longlong *)0x0) {
uVar6 = 0xffffffffffffffff;
pcVar4 = param_3;
goto code_r0x00014000bd80;
}
break;
}
}
puVar5 = operator_new(0x50);
if (puVar5 == (undefined8 *)0x0) {
puVar5 = (undefined8 *)0x0;
}
else {
puVar5 = FUN_14000b1d0(puVar5,param_2,param_3);
}
if (puVar5 != (undefined8 *)0x0) {
puVar5[9] = param_1 + 0xb;
puVar5[8] = param_1[0x13];
*(undefined8 **)(param_1[0x13] + 0x48) = puVar5;
param_1[0x13] = (longlong)puVar5;
return;
}
while( true ) {
if (param_1 == (longlong *)0x0) {
return;
}
lVar7 = (**(code **)(*param_1 + 0x20))(param_1);
if (lVar7 != 0) break;
param_1 = (longlong *)param_1[3];
}
lVar7 = (**(code **)(*param_1 + 0x20))();
if (lVar7 == 0) {
return;
}
if (*(char *)(lVar7 + 0x58) != '\0') {
return;
}
*(undefined1 *)(lVar7 + 0x58) = 1;
*(undefined4 *)(lVar7 + 0x5c) = 3;
uVar6 = 0xffffffffffffffff;
pcVar4 = PTR_s_Memory_allocation_failed__1401b3378;
do {
if (uVar6 == 0) break;
uVar6 = uVar6 - 1;
cVar1 = *pcVar4;
pcVar4 = pcVar4 + 1;
} while (cVar1 != '\0');
FUN_14000af60((longlong *)(lVar7 + 0x60),PTR_s_Memory_allocation_failed__1401b3378,~uVar6 - 1);
*(undefined8 *)(lVar7 + 0x74) = 0xffffffffffffffff;
return;
while( true ) {
uVar6 = uVar6 - 1;
cVar1 = *pcVar4;
pcVar4 = pcVar4 + 1;
if (cVar1 == '\0') break;
code_r0x00014000bd80:
if (uVar6 == 0) break;
}
FUN_14000af60(plVar3 + 6,param_3,~uVar6 - 1);
return;
}