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

78 lines
2.2 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400df7e0 FUN_1400df7e0
* Pseudocode, not original source. */
void FUN_1400df7e0(longlong param_1,longlong param_2,size_t param_3,undefined8 param_4)
{
uint uVar1;
longlong lVar2;
longlong lVar3;
void *_Src;
int iVar4;
longlong lVar5;
int iVar6;
ulonglong uVar7;
int iVar8;
longlong lVar9;
undefined4 uStackX_c;
_Src = (void *)0x0;
lVar3 = param_2;
FUN_14007b600(param_2,0,param_3);
iVar6 = *(int *)(param_1 + 0x18);
iVar8 = 0;
lVar9 = 0;
if (0 < iVar6) {
do {
if ((lVar9 < 0) || (iVar6 <= iVar8)) {
/* WARNING: Subroutine does not return */
FUN_14006be30(lVar3,_Src,param_3,param_4);
}
uVar7 = *(ulonglong *)(*(longlong *)(param_1 + 0x10) + lVar9 * 8);
uStackX_c = (int)(uVar7 >> 0x20);
uVar7 = uVar7 & 0xffffffff;
while( true ) {
iVar6 = *(int *)(param_2 + 0x18);
lVar5 = (longlong)iVar6;
if (iVar6 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
iVar4 = *(int *)(param_2 + 0x18);
uVar1 = iVar4 + 1;
_Src = (void *)(ulonglong)uVar1;
FUN_14007b600(param_2,uVar1,param_3);
iVar4 = iVar4 - iVar6;
if (0 < iVar4) {
if (*(int *)(param_2 + 0x18) == 0) {
lVar3 = 0;
lVar2 = 0;
}
else {
lVar3 = *(longlong *)(param_2 + 0x10);
lVar2 = *(longlong *)(param_2 + 0x10);
}
_Src = (void *)(lVar3 + lVar5 * 4);
param_3 = (longlong)iVar4 << 2;
memmove((void *)(lVar2 + 4 + lVar5 * 4),_Src,param_3);
}
if (*(int *)(param_2 + 0x18) == 0) {
lVar3 = 0;
}
else {
lVar3 = *(longlong *)(param_2 + 0x10);
}
iVar6 = (int)uVar7;
*(int *)(lVar3 + lVar5 * 4) = iVar6;
if (iVar6 == uStackX_c) break;
uVar7 = (ulonglong)(iVar6 + 1);
}
iVar6 = *(int *)(param_1 + 0x18);
iVar8 = iVar8 + 1;
lVar9 = lVar9 + 1;
} while (iVar8 < iVar6);
}
return;
}