/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x14003ed40 FUN_14003ed40 * Pseudocode, not original source. */ short * FUN_14003ed40(longlong *param_1,longlong param_2,ulonglong param_3,undefined8 param_4) { undefined1 auVar1 [16]; undefined1 auVar2 [16]; ulonglong uVar3; ulonglong uVar4; longlong *plVar5; short *psVar6; short *psVar7; longlong lVar8; ulonglong uVar9; longlong *plVar10; ulonglong uVar11; exception local_68 [80]; if ((int)param_1[8] != 2) { FUN_14003e110(L"CFastHeapImpl::Realloc() is called after the allocator is already disposed!"); return (short *)0x0; } if (param_3 == 0) { (**(code **)(*param_1 + 0x18))(); return (short *)0x0; } if ((param_2 == 0) || (psVar6 = (short *)(param_2 + -0x10), *psVar6 != 0x71a)) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } uVar9 = (ulonglong)param_1[0xc] >> 7; uVar11 = ((param_3 - 1) / uVar9 + 1) * uVar9; if (*(longlong *)(param_2 + -8) == 0) { LAB_14003ee08: plVar10 = (longlong *)0x0; } else { uVar3 = *(longlong *)(param_2 + -8) - 1; auVar1._8_8_ = 0; auVar1._0_8_ = uVar9; auVar2._8_8_ = 0; auVar2._0_8_ = uVar3; uVar4 = SUB168(auVar2 / auVar1,0); if (0xffffffff < uVar4) { /* WARNING: Subroutine does not return */ FUN_14003df20(L"Proud::CFastHeapImpl::GetAllocByGroundSize",uVar3 % uVar9,param_3,param_4); } if (0x7f < uVar4) goto LAB_14003ee08; plVar10 = *(longlong **)(param_1[0xd] + (longlong)SUB164(auVar2 / auVar1,0) * 8); } plVar5 = (longlong *)FUN_14003ebf0((longlong)param_1,uVar11,param_3,param_4); if (plVar10 == (longlong *)0x0) { if (plVar5 == (longlong *)0x0) { psVar6 = (short *)(**(code **)(*(longlong *)param_1[9] + 8)) ((longlong *)param_1[9],psVar6,param_3 + 0x10); *(ulonglong *)(psVar6 + 4) = uVar11; goto LAB_14003ef1d; } psVar7 = (short *)(**(code **)(*plVar5 + 8))(plVar5,uVar11 + 0x10); uVar9 = uVar11; if (*(ulonglong *)(param_2 + -8) < uVar11) { uVar9 = *(ulonglong *)(param_2 + -8); } FUN_140006fb0((undefined8 *)psVar7,(undefined8 *)psVar6,uVar9 + 0x10); *(ulonglong *)(psVar7 + 4) = uVar11; plVar10 = (longlong *)param_1[9]; lVar8 = *plVar10; } else { if (plVar5 == (longlong *)0x0) { psVar7 = (short *)(*(code *)**(undefined8 **)param_1[9]) ((undefined8 *)param_1[9],param_3 + 0x10); if (psVar7 == (short *)0x0) { FUN_14003db10(local_68,L"CRT malloc returned NULL at %s!",L"Proud::CFastHeapImpl::Realloc", param_4); /* WARNING: Subroutine does not return */ _CxxThrowException(local_68,(ThrowInfo *)&DAT_14016c210); } if (*(ulonglong *)(param_2 + -8) < param_3) { param_3 = *(ulonglong *)(param_2 + -8); } } else { if (plVar10 == plVar5) goto LAB_14003ef1d; psVar7 = (short *)(**(code **)(*plVar5 + 8))(plVar5,uVar11 + 0x10); param_3 = uVar11; if (*(ulonglong *)(param_2 + -8) < uVar11) { param_3 = *(ulonglong *)(param_2 + -8); } } FUN_140006fb0((undefined8 *)psVar7,(undefined8 *)psVar6,param_3 + 0x10); *(ulonglong *)(psVar7 + 4) = uVar11; lVar8 = *plVar10; } (**(code **)(lVar8 + 0x10))(plVar10,psVar6); psVar6 = psVar7; LAB_14003ef1d: return psVar6 + 8; }