server-re/decomp/DBCServer_Release_x64/full/functions/0x1401d1b90.c

78 lines
2.2 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401d1b90 FUN_1401d1b90
* Pseudocode, not original source. */
void FUN_1401d1b90(longlong param_1,undefined8 *param_2,int param_3,undefined4 *param_4)
{
undefined8 *_Dst;
longlong lVar1;
longlong *plVar2;
ulonglong uVar3;
size_t _Size;
ulonglong uVar4;
undefined4 local_60;
undefined4 local_5c;
undefined *local_58;
undefined4 local_50;
undefined4 local_4c;
undefined **local_48;
longlong *local_40;
undefined8 *local_38;
undefined8 local_30;
undefined8 local_28;
if (*(longlong *)(param_1 + 0x58) != 0) {
local_48 = Proud::CFastArray<Proud::HostID,0>::vftable;
local_40 = (longlong *)0x0;
local_38 = (undefined8 *)0x0;
local_30 = 0;
local_28 = 0;
FUN_14015e670(&local_48,param_3);
_Dst = local_38;
if ((int)local_30 == 0) {
_Dst = (undefined8 *)0x0;
}
_Size = (longlong)param_3 << 2;
if (_Size < 0x21) {
uVar3 = (ulonglong)((uint)_Size & 7);
for (uVar4 = ((longlong)param_3 & 0x3fffffffffffffffU) >> 1; uVar4 != 0; uVar4 = uVar4 - 1) {
*_Dst = *param_2;
_Dst = _Dst + 1;
param_2 = param_2 + 1;
}
if (uVar3 != 0) {
lVar1 = (longlong)_Dst - (longlong)param_2;
do {
*(undefined1 *)(lVar1 + (longlong)param_2) = *(undefined1 *)param_2;
param_2 = (undefined8 *)((longlong)param_2 + 1);
uVar3 = uVar3 - 1;
} while (uVar3 != 0);
}
}
else {
memcpy(_Dst,param_2,_Size);
}
FUN_14016d8c0();
local_58 = PTR_DAT_1403440a0;
local_60 = *param_4;
local_5c = param_4[1];
FUN_14004c050(&local_58,*(undefined8 *)(param_4 + 2));
local_50 = param_4[4];
local_4c = param_4[5];
plVar2 = (longlong *)(*(longlong *)(param_1 + 0x58) + 0x68);
(**(code **)(*plVar2 + 0x40))(plVar2,1,&DAT_14034c4b0,&local_48,&local_60);
FUN_14004eb70(&local_58);
local_48 = Proud::CFastArray<Proud::HostID,0>::vftable;
if (local_38 != (undefined8 *)0x0) {
if (local_40 == (longlong *)0x0) {
FUN_14016d970(local_38);
}
else {
(**(code **)(*local_40 + 0x18))();
}
}
}
return;
}