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

86 lines
2.7 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400feab0 FUN_1400feab0
* Pseudocode, not original source. */
uint FUN_1400feab0(longlong param_1,uint param_2)
{
char *pcVar1;
char *pcVar2;
uint uVar3;
longlong lVar4;
char *pcVar5;
uint uVar6;
uint uVar7;
char *pcVar8;
char *pcVar9;
int iVar10;
uint uVar11;
ulonglong uVar12;
char cVar13;
char cVar14;
uint uVar15;
uVar7 = *(uint *)(param_1 + 0x94);
uVar6 = *(uint *)(param_1 + 0xa4);
lVar4 = *(longlong *)(param_1 + 0x50);
uVar12 = (ulonglong)(int)*(uint *)(param_1 + 0xa0);
pcVar2 = (char *)((ulonglong)uVar7 + lVar4);
if (*(int *)(param_1 + 0x44) - 0x106U < uVar7) {
uVar7 = (uVar7 - *(int *)(param_1 + 0x44)) + 0x106;
}
else {
uVar7 = 0;
}
cVar13 = pcVar2[uVar12 - 1];
cVar14 = pcVar2[uVar12];
if (*(uint *)(param_1 + 0xb4) <= *(uint *)(param_1 + 0xa0)) {
uVar6 = uVar6 >> 2;
}
uVar3 = *(uint *)(param_1 + 0x9c);
uVar15 = *(uint *)(param_1 + 0xb8);
if (uVar3 < *(uint *)(param_1 + 0xb8)) {
uVar15 = uVar3;
}
do {
iVar10 = (int)uVar12;
pcVar5 = (char *)(lVar4 + (ulonglong)param_2);
if ((((pcVar5[iVar10] == cVar14) && (pcVar5[(longlong)iVar10 + -1] == cVar13)) &&
(*pcVar5 == *pcVar2)) && (pcVar5[1] == pcVar2[1])) {
pcVar5 = pcVar5 + 2;
pcVar8 = pcVar2 + 2;
while (((((pcVar9 = pcVar8 + 1, *pcVar9 == pcVar5[1] &&
(pcVar9 = pcVar8 + 2, *pcVar9 == pcVar5[2])) &&
((pcVar9 = pcVar8 + 3, *pcVar9 == pcVar5[3] &&
((pcVar9 = pcVar8 + 4, *pcVar9 == pcVar5[4] &&
(pcVar9 = pcVar8 + 5, *pcVar9 == pcVar5[5])))))) &&
(pcVar9 = pcVar8 + 6, *pcVar9 == pcVar5[6])) &&
(pcVar9 = pcVar8 + 7, *pcVar9 == pcVar5[7]))) {
pcVar1 = pcVar5 + 8;
pcVar5 = pcVar5 + 8;
pcVar9 = pcVar8 + 8;
if ((*pcVar9 != *pcVar1) || (pcVar8 = pcVar9, pcVar2 + 0x102 <= pcVar9)) break;
}
uVar11 = ((int)pcVar9 - (int)(pcVar2 + 0x102)) + 0x102;
if (iVar10 < (int)uVar11) {
*(uint *)(param_1 + 0x98) = param_2;
uVar12 = (ulonglong)uVar11;
if ((int)uVar15 <= (int)uVar11) break;
cVar13 = pcVar2[(longlong)(int)uVar11 + -1];
cVar14 = pcVar2[(int)uVar11];
}
}
uVar11 = (uint)uVar12;
param_2 = (uint)*(ushort *)
(*(longlong *)(param_1 + 0x60) +
(ulonglong)(*(uint *)(param_1 + 0x4c) & param_2) * 2);
if (param_2 <= uVar7) break;
uVar6 = uVar6 - 1;
lVar4 = *(longlong *)(param_1 + 0x50);
} while (uVar6 != 0);
if (uVar11 <= uVar3) {
uVar3 = uVar11;
}
return uVar3;
}