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

155 lines
5.5 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400d2050 FUN_1400d2050
* Pseudocode, not original source. */
void FUN_1400d2050(uint *param_1,uint *param_2,undefined8 param_3,ulonglong param_4)
{
longlong lVar1;
uint *puVar2;
undefined8 uVar3;
uint *puVar4;
undefined *puVar5;
int *piVar6;
uint *puVar7;
uint *puVar8;
uint *puVar9;
uint *puVar10;
uint *puVar11;
ulonglong uVar12;
ulonglong uVar13;
uint uVar14;
param_2[0xc] = param_1[0x1be];
uVar14 = param_1[0x1c5];
param_2[6] = param_1[0x1c4];
*(short *)(param_2 + 7) = (short)uVar14;
uVar12 = *(ulonglong *)(param_1 + 0x1d2);
param_2[2] = *(uint *)(uVar12 + 0x130);
*(undefined2 *)(param_2 + 3) = *(undefined2 *)(uVar12 + 0x134);
param_2[10] = param_1[0x1c8];
*(short *)(param_2 + 0xb) = (short)param_1[0x1c9];
*(undefined8 *)(param_2 + 0x28) = *(undefined8 *)(param_1 + 0x72);
param_2[0x2a] = param_1[0x7a];
*(char *)((longlong)param_2 + 0x91) = (char)param_1[0x1c0];
puVar11 = (uint *)0x0;
puVar2 = param_1;
puVar9 = param_2;
puVar10 = puVar11;
if (*(longlong *)(param_1 + 0x1a) != 0) {
puVar10 = *(uint **)(param_1 + 0x16);
}
for (; puVar10 != (uint *)0x0; puVar10 = *(uint **)(puVar10 + 4)) {
uVar12 = (ulonglong)param_2[0x18];
uVar14 = *puVar10;
param_4 = (ulonglong)uVar14;
lVar1 = *(longlong *)(param_2 + 0x10);
if (lVar1 != 0) {
puVar2 = *(uint **)(lVar1 + (param_4 % uVar12) * 8);
while ((puVar2 != (uint *)0x0 &&
(puVar9 = (uint *)((ulonglong)puVar2[6] % uVar12),
(int)(param_4 % uVar12) == (int)puVar9))) {
if (*puVar2 == uVar14) goto LAB_1400d21a1;
puVar2 = *(uint **)(puVar2 + 2);
}
}
uVar13 = param_4 % uVar12;
if (lVar1 != 0) {
puVar2 = *(uint **)(lVar1 + uVar13 * 8);
while ((puVar2 != (uint *)0x0 &&
(puVar9 = (uint *)((ulonglong)puVar2[6] % uVar12), (uint)uVar13 == (uint)puVar9))) {
if (*puVar2 == uVar14) goto LAB_1400d219d;
puVar2 = *(uint **)(puVar2 + 2);
}
}
puVar9 = puVar10;
puVar2 = FUN_1400802f0((char *)(param_2 + 0xe),puVar10,(uint)uVar13,uVar14);
uVar12 = uVar13;
LAB_1400d219d:
*(char *)(puVar2 + 1) = '\0';
LAB_1400d21a1:
}
puVar10 = puVar11;
if (0 < (int)param_1[0x96]) {
do {
if (((longlong)puVar11 < 0) || ((int)param_1[0x96] <= (int)puVar10)) {
/* WARNING: Subroutine does not return */
FUN_14006be30(puVar2,puVar9,uVar12,param_4);
}
puVar8 = (uint *)(*(longlong *)(param_1 + 0x94) + (longlong)puVar11 * 4);
puVar7 = param_2 + 0xe;
uVar14 = *puVar8;
param_4 = (ulonglong)param_2[0x18];
uVar12 = (ulonglong)uVar14 % param_4;
lVar1 = *(longlong *)(param_2 + 0x10);
if (lVar1 != 0) {
puVar2 = *(uint **)(lVar1 + uVar12 * 8);
while ((puVar2 != (uint *)0x0 &&
(puVar9 = (uint *)((ulonglong)puVar2[6] % param_4), (int)uVar12 == (int)puVar9))) {
if (*puVar2 == uVar14) goto LAB_1400d229e;
puVar2 = *(uint **)(puVar2 + 2);
}
}
uVar13 = (ulonglong)uVar14 % param_4;
if (lVar1 == 0) {
LAB_1400d225f:
uVar3 = FUN_1400a1910((longlong)puVar7,param_2[0x18],'\x01');
if ((char)uVar3 == '\0') {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x8007000e);
}
}
else {
puVar4 = *(uint **)(lVar1 + uVar13 * 8);
while ((puVar4 != (uint *)0x0 &&
((uint)uVar13 == (uint)(uint *)((ulonglong)puVar4[6] % param_4)))) {
puVar9 = (uint *)((ulonglong)puVar4[6] % param_4);
if (*puVar4 == uVar14) goto LAB_1400d2295;
puVar4 = *(uint **)(puVar4 + 2);
}
if (lVar1 == 0) goto LAB_1400d225f;
}
FUN_1400cadd0((char *)puVar7);
param_4 = (ulonglong)uVar14;
puVar4 = FUN_14007d400((char *)puVar7,puVar8,(uint)uVar13,uVar14);
FUN_1400cadd0((char *)puVar7);
puVar2 = puVar7;
puVar9 = puVar8;
uVar12 = uVar13;
LAB_1400d2295:
*(undefined1 *)(puVar4 + 1) = 0;
LAB_1400d229e:
uVar14 = (int)puVar10 + 1;
puVar10 = (uint *)(ulonglong)uVar14;
puVar11 = (uint *)((longlong)puVar11 + 1);
} while ((int)uVar14 < (int)param_1[0x96]);
}
*(undefined1 *)(param_2 + 0xd) = 0;
*(bool *)(param_2 + 0x24) = param_1[0x1c4] != param_1[0x1c8];
puVar5 = *(undefined **)(param_2 + 0x26);
if (*(undefined **)(param_2 + 0x26) == (undefined *)0x0) {
puVar5 = PTR_DAT_1401ac010;
}
*(undefined **)(param_2 + 0x26) = puVar5;
if (*(undefined **)(param_1 + 0x7c) != puVar5) {
piVar6 = (int *)FUN_14006cb70(puVar2,puVar9,uVar12,param_4);
FUN_14006b350(piVar6);
FUN_1400031e0((longlong *)(param_2 + 0x26),puVar9,uVar12,param_4);
puVar5 = *(undefined **)(param_1 + 0x7c);
*(undefined **)(param_2 + 0x26) = puVar5;
if (((puVar5 != PTR_DAT_1401ac010) && (puVar5 != (undefined *)0x0)) &&
(puVar5 != (undefined *)0x8)) {
*(int *)(puVar5 + -4) = *(int *)(puVar5 + -4) + 1;
}
FUN_14006b3e0((longlong)piVar6);
}
*(undefined8 *)(param_2 + 0x2c) = *(undefined8 *)(param_1 + 0xc);
*(undefined8 *)(param_2 + 0x2e) = *(undefined8 *)(param_1 + 0x78);
uVar14 = (**(code **)(**(longlong **)(*(longlong *)(param_1 + 0x8e) + 0x478) + 0x18))
(*(longlong **)(*(longlong *)(param_1 + 0x8e) + 0x478),param_1[0x1be]);
param_2[0x32] = uVar14;
param_2[0x30] = param_1[0x76];
param_2[0x31] = param_1[0x77];
return;
}