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

111 lines
3 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x14020a4c0 FUN_14020a4c0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
undefined8 FUN_14020a4c0(int *param_1,int *param_2)
{
int iVar1;
longlong lVar2;
int iVar3;
uint uVar4;
undefined8 uVar5;
int iVar6;
uint *puVar7;
uint *puVar8;
int iVar9;
ulonglong uVar10;
ulonglong uVar11;
ulonglong uVar12;
int iVar13;
longlong lVar14;
ulonglong uVar15;
ulonglong uVar16;
ulonglong uVar17;
uint uVar18;
undefined1 auStack_878 [32];
int *local_858;
uint auStack_84c [513];
ulonglong local_48;
local_48 = DAT_1403463c0 ^ (ulonglong)auStack_878;
iVar3 = *param_1 * 2;
local_858 = param_2;
if ((iVar3 <= param_2[1]) || (uVar5 = FUN_140208db0(param_2,iVar3), (int)uVar5 == 0)) {
uVar12 = 0;
lVar14 = (longlong)iVar3;
if (0 < lVar14) {
lVar2 = *(longlong *)(param_1 + 4);
iVar1 = *param_1;
uVar11 = uVar12;
uVar15 = uVar12;
uVar17 = uVar12;
do {
iVar6 = iVar1 + -1;
iVar13 = (int)uVar11;
iVar9 = iVar13;
if (iVar6 < iVar13) {
iVar9 = iVar6;
}
iVar6 = iVar13 - iVar9;
puVar8 = (uint *)(lVar2 + (longlong)iVar6 * 4);
puVar7 = (uint *)(lVar2 + (longlong)iVar9 * 4);
uVar4 = iVar1 - iVar6;
uVar18 = iVar9 + 1U;
if ((int)uVar4 < (int)(iVar9 + 1U)) {
uVar18 = uVar4;
}
uVar4 = (iVar9 - iVar6) + 1 >> 1;
if ((int)uVar4 <= (int)uVar18) {
uVar18 = uVar4;
}
uVar16 = uVar12;
if (0 < (int)uVar18) {
uVar10 = (ulonglong)uVar18;
do {
uVar18 = *puVar7;
uVar4 = *puVar8;
puVar7 = puVar7 + -1;
puVar8 = puVar8 + 1;
uVar16 = uVar16 + (ulonglong)uVar18 * (ulonglong)uVar4;
uVar10 = uVar10 - 1;
} while (uVar10 != 0);
}
uVar16 = uVar17 + uVar16 * 2;
if ((uVar11 & 1) == 0) {
uVar11 = (ulonglong)*(uint *)(lVar2 + ((longlong)iVar13 >> 1) * 4);
uVar16 = uVar16 + uVar11 * uVar11;
}
uVar15 = uVar15 + 1;
uVar11 = (ulonglong)(iVar13 + 1);
uVar17 = uVar16 >> 0x1c;
auStack_84c[uVar15] = (uint)uVar16 & 0xfffffff;
param_2 = local_858;
} while ((longlong)uVar15 < lVar14);
}
iVar1 = *param_2;
puVar8 = *(uint **)(param_2 + 4);
*param_2 = *param_1 * 2;
puVar7 = puVar8;
iVar6 = 0;
if (0 < lVar14) {
do {
lVar2 = uVar12 + 1;
uVar12 = uVar12 + 1;
puVar8 = puVar7 + 1;
*puVar7 = auStack_84c[lVar2] & 0xfffffff;
puVar7 = puVar8;
iVar6 = iVar3;
} while ((longlong)uVar12 < lVar14);
}
if (iVar6 < iVar1) {
memset(puVar8,0,(ulonglong)(uint)(iVar1 - iVar6) << 2);
}
FUN_140208e50(param_2);
uVar5 = 0;
}
return uVar5;
}