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

293 lines
9.6 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400f50a0 FUN_1400f50a0
* Pseudocode, not original source. */
ulonglong FUN_1400f50a0(longlong *param_1,uint *param_2,ulonglong param_3,undefined4 *param_4)
{
undefined8 *puVar1;
longlong *plVar2;
longlong *plVar3;
undefined8 uVar4;
ulonglong uVar5;
longlong *plVar6;
longlong *plVar7;
longlong *plVar8;
uint *puVar9;
uint ***pppuVar10;
int iVar11;
SIZE_T SVar12;
undefined4 *puVar13;
uint **local_res8;
undefined8 local_d8;
uint *local_d0;
longlong *local_c8;
undefined8 local_c0;
longlong *local_b8;
longlong *local_b0;
undefined4 local_a8;
undefined4 local_a4;
longlong *local_a0;
longlong *local_98;
undefined8 local_90;
exception local_88 [80];
local_90 = 0xfffffffffffffffe;
uVar5 = param_3;
puVar13 = param_4;
local_b0 = (longlong *)(**(code **)(*param_1 + 0x38))();
plVar8 = (longlong *)0x0;
local_c0 = 0;
local_c8 = (longlong *)0x0;
local_d0 = (uint *)0x0;
local_b8 = (longlong *)0x0;
local_d8 = 0;
local_a4 = 0;
uVar4 = FUN_1400bd260(param_2,(uint *)&local_d8,uVar5,puVar13);
if ((char)uVar4 == '\0') {
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140080140((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_1400d1800((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
}
else {
if ((uint)local_d8 != 1) {
if ((uint)local_d8 == 2) {
plVar6 = (longlong *)
(**(code **)(*(longlong *)(*(longlong *)(param_1[2] + 0x670) + 0x88) + 0x18))();
plVar7 = FUN_14008a380((longlong *)&local_a0,plVar6,uVar5,puVar13);
plVar3 = local_b0;
plVar2 = local_b8;
plVar6 = (longlong *)*plVar7;
if (plVar6 != (longlong *)0x0) {
plVar6[1] = plVar6[1] + 1;
plVar8 = plVar6;
}
if (local_b8 != (longlong *)0x0) {
plVar6 = local_b8 + 1;
*plVar6 = *plVar6 + -1;
if (*plVar6 == 0) {
puVar1 = (undefined8 *)*local_b8;
*puVar1 = Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
if ((LPVOID)puVar1[2] != (LPVOID)0x0) {
if ((longlong *)puVar1[1] == (longlong *)0x0) {
FUN_14006cc60((LPVOID)puVar1[2]);
}
else {
(**(code **)(*(longlong *)puVar1[1] + 0x18))();
}
}
(**(code **)(*plVar3 + 0x18))(plVar3,puVar1);
(**(code **)(*local_b0 + 0x18))(local_b0,plVar2);
}
}
plVar6 = local_98;
local_b0 = (longlong *)plVar7[1];
local_b8 = plVar8;
if (local_a0 != (longlong *)0x0) {
plVar8 = local_a0 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
puVar1 = (undefined8 *)*local_a0;
*puVar1 = Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
if ((LPVOID)puVar1[2] != (LPVOID)0x0) {
if ((longlong *)puVar1[1] == (longlong *)0x0) {
FUN_14006cc60((LPVOID)puVar1[2]);
}
else {
(**(code **)(*(longlong *)puVar1[1] + 0x18))();
}
}
(**(code **)(*plVar6 + 0x18))(plVar6,puVar1);
(**(code **)(*local_98 + 0x18))(local_98,local_a0);
}
}
if (local_b8 == (longlong *)0x0) {
puVar9 = (uint *)0x0;
}
else {
puVar9 = (uint *)*local_b8;
}
uVar5 = FUN_1400df450(puVar9,param_2,uVar5,puVar13);
if ((char)uVar5 == '\0') {
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140080140((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_1400d1800((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
}
else {
uVar4 = FUN_1400bc930(param_2,&local_res8,4);
if ((char)uVar4 == '\0') {
local_a4 = 0;
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140080140((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_1400d1800((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
}
else {
local_a4 = local_res8._0_4_;
uVar5 = 4;
uVar4 = FUN_1400bc930(param_2,&local_res8,4);
if ((char)uVar4 != '\0') {
local_a8 = local_res8._0_4_;
goto LAB_1400f54b1;
}
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140080140((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_1400d1800((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
}
}
goto LAB_1400f55dd;
}
LAB_1400f54b1:
FUN_1400ac2e0(param_3,0,uVar5,puVar13);
FUN_1400f4680(param_1[1],&local_d8,uVar5,puVar13);
plVar8 = (longlong *)FUN_1400f45f0(param_1[1]);
uVar5 = FUN_1400dbe90(plVar8,param_3,(ulonglong)*(uint *)(param_1[2] + 0x56c),
(ulonglong)*(uint *)(*(longlong *)(param_1[2] + 0x670) + 0x6a4),param_4)
;
if ((int)uVar5 < 0) {
*(undefined1 *)(param_1 + 3) = 1;
}
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140080140((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar4 = FUN_1400d1800((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
return CONCAT71((int7)((ulonglong)uVar4 >> 8),1);
}
SVar12 = 4;
pppuVar10 = &local_res8;
puVar9 = param_2;
uVar4 = FUN_1400bc930(param_2,pppuVar10,4);
if ((char)uVar4 == '\0') {
local_d8 = local_d8 & 0xffffffff;
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140080140((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_1400d1800((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
goto LAB_1400f55dd;
}
local_d8 = CONCAT44(local_res8._0_4_,(uint)local_d8);
if (local_c8 != (longlong *)0x0) {
FUN_14006ba50(local_88,(wchar_t *)PTR_u_Cannot_use_internal_buffer_becau_1401adba0,SVar12,
puVar13);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_88,(ThrowInfo *)&DAT_1401a93e8);
}
if (local_d0 == (uint *)0x0) {
local_d0 = (uint *)FUN_1400d1840(puVar9,pppuVar10,SVar12);
local_d0[10] = 1;
local_d0[0xb] = 0;
}
puVar9 = param_2;
uVar5 = FUN_1400bcfd0(param_2,&local_res8,SVar12,puVar13);
if ((((char)uVar5 != '\0') && (iVar11 = (int)local_res8, -1 < iVar11)) &&
(iVar11 <= DAT_1401ac140)) {
if (local_c8 == (longlong *)0x0) {
puVar9 = local_d0;
if (iVar11 < 1) {
if (local_d0 == (uint *)0x0) goto LAB_1400f5550;
iVar11 = 0;
}
else if (local_d0 == (uint *)0x0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,0,SVar12,puVar13);
}
FUN_1400146f0((longlong)local_d0,iVar11,SVar12);
}
else {
if (local_c0._4_4_ < iVar11) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_c0 = CONCAT44(local_c0._4_4_,iVar11);
}
plVar6 = local_c8;
if (local_c8 == (longlong *)0x0) {
if (local_d0 == (uint *)0x0) {
LAB_1400f5550:
/* WARNING: Subroutine does not return */
FUN_1400d1900(puVar9,0,SVar12,puVar13);
}
plVar6 = plVar8;
if (local_d0[6] != 0) {
plVar6 = *(longlong **)(local_d0 + 4);
}
}
uVar5 = (ulonglong)local_res8 & 0xffffffff;
uVar4 = FUN_1400bc930(param_2,plVar6,uVar5);
if ((char)uVar4 != '\0') goto LAB_1400f54b1;
}
if (local_b8 != (longlong *)0x0) {
plVar8 = local_b8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140080140((longlong)&local_b8,local_b8);
}
}
local_res8 = &local_d0;
uVar5 = FUN_1400d1800((longlong *)&local_d0);
if ((local_c8 != (longlong *)0x0) && (local_c0 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
}
LAB_1400f55dd:
return uVar5 & 0xffffffffffffff00;
}