101 lines
3.5 KiB
C
101 lines
3.5 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401e5f40 FUN_1401e5f40
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1401e5f40(longlong *param_1)
|
|
|
|
{
|
|
ushort *puVar1;
|
|
uint uVar2;
|
|
short sVar3;
|
|
short *psVar4;
|
|
ulonglong _Size;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint uVar7;
|
|
ulonglong uVar8;
|
|
|
|
uVar2 = *(uint *)((longlong)param_1 + 0x44);
|
|
_Size = (ulonglong)uVar2;
|
|
while( true ) {
|
|
iVar5 = ((int)param_1[0xb] - *(int *)((longlong)param_1 + 0x9c)) -
|
|
*(uint *)((longlong)param_1 + 0x94);
|
|
if ((uVar2 - 0x106) + *(int *)((longlong)param_1 + 0x44) <= *(uint *)((longlong)param_1 + 0x94))
|
|
{
|
|
memcpy((void *)param_1[10],(void *)(param_1[10] + _Size),_Size);
|
|
uVar8 = (ulonglong)*(uint *)((longlong)param_1 + 0x74);
|
|
*(uint *)(param_1 + 0x13) = (int)param_1[0x13] - uVar2;
|
|
*(int *)((longlong)param_1 + 0x94) = *(int *)((longlong)param_1 + 0x94) - uVar2;
|
|
*(int *)((longlong)param_1 + 0x84) = *(int *)((longlong)param_1 + 0x84) - uVar2;
|
|
psVar4 = (short *)(param_1[0xd] + uVar8 * 2);
|
|
do {
|
|
puVar1 = (ushort *)(psVar4 + -1);
|
|
psVar4 = psVar4 + -1;
|
|
if (*puVar1 < uVar2) {
|
|
sVar3 = 0;
|
|
}
|
|
else {
|
|
sVar3 = *puVar1 - (short)uVar2;
|
|
}
|
|
uVar6 = (int)uVar8 - 1;
|
|
uVar8 = (ulonglong)uVar6;
|
|
*psVar4 = sVar3;
|
|
} while (uVar6 != 0);
|
|
psVar4 = (short *)(param_1[0xc] + _Size * 2);
|
|
uVar6 = uVar2;
|
|
do {
|
|
puVar1 = (ushort *)(psVar4 + -1);
|
|
psVar4 = psVar4 + -1;
|
|
if (*puVar1 < uVar2) {
|
|
sVar3 = 0;
|
|
}
|
|
else {
|
|
sVar3 = *puVar1 - (short)uVar2;
|
|
}
|
|
uVar6 = uVar6 - 1;
|
|
*psVar4 = sVar3;
|
|
} while (uVar6 != 0);
|
|
iVar5 = iVar5 + uVar2;
|
|
}
|
|
if (*(int *)(*param_1 + 8) == 0) break;
|
|
iVar5 = FUN_1401e5cf0(*param_1,(ulonglong)*(uint *)((longlong)param_1 + 0x9c) +
|
|
(ulonglong)*(uint *)((longlong)param_1 + 0x94) + param_1[10],
|
|
iVar5);
|
|
*(int *)((longlong)param_1 + 0x9c) = *(int *)((longlong)param_1 + 0x9c) + iVar5;
|
|
uVar6 = *(uint *)((longlong)param_1 + 0x9c);
|
|
if (2 < uVar6) {
|
|
uVar7 = (uint)*(byte *)((ulonglong)*(uint *)((longlong)param_1 + 0x94) + param_1[10]);
|
|
*(uint *)(param_1 + 0xe) = uVar7;
|
|
*(uint *)(param_1 + 0xe) =
|
|
(uVar7 << ((byte)(int)param_1[0x10] & 0x1f) ^
|
|
(uint)*(byte *)((ulonglong)(*(uint *)((longlong)param_1 + 0x94) + 1) + param_1[10])) &
|
|
*(uint *)((longlong)param_1 + 0x7c);
|
|
}
|
|
if ((0x105 < uVar6) || (*(int *)(*param_1 + 8) == 0)) {
|
|
uVar2 = *(uint *)(param_1 + 0x2e3);
|
|
uVar7 = *(uint *)(param_1 + 0xb);
|
|
if (uVar2 < uVar7) {
|
|
uVar6 = uVar6 + *(int *)((longlong)param_1 + 0x94);
|
|
if (uVar2 < uVar6) {
|
|
uVar2 = uVar7 - uVar6;
|
|
if (0x102 < uVar7 - uVar6) {
|
|
uVar2 = 0x102;
|
|
}
|
|
memset((void *)((ulonglong)uVar6 + param_1[10]),0,(ulonglong)uVar2);
|
|
*(uint *)(param_1 + 0x2e3) = uVar2 + uVar6;
|
|
}
|
|
else if (uVar2 < uVar6 + 0x102) {
|
|
uVar6 = (uVar6 - uVar2) + 0x102;
|
|
if (uVar7 - uVar2 < uVar6) {
|
|
uVar6 = uVar7 - uVar2;
|
|
}
|
|
memset((void *)((ulonglong)uVar2 + param_1[10]),0,(ulonglong)uVar6);
|
|
*(uint *)(param_1 + 0x2e3) = (int)param_1[0x2e3] + uVar6;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|