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

121 lines
3.5 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400cb030 FUN_1400cb030
* Pseudocode, not original source. */
int FUN_1400cb030(longlong *param_1,wchar_t *param_2,short *param_3)
{
undefined *puVar1;
rsize_t _DstSize;
int iVar2;
int iVar3;
int iVar4;
int iVar5;
wchar_t *pwVar6;
longlong lVar7;
int iVar8;
int iVar9;
int iVar10;
wchar_t *pwVar11;
longlong lVar12;
longlong lVar13;
wchar_t *pwVar14;
int local_58;
iVar2 = FUN_14006c9f0(param_2);
if (iVar2 != 0) {
iVar3 = FUN_14006c9f0(param_3);
pwVar14 = (wchar_t *)*param_1;
iVar4 = 0;
local_58 = 0;
iVar5 = iVar4;
pwVar11 = (wchar_t *)PTR_DAT_1401ac010;
if ((pwVar14 != (wchar_t *)0x0) && (pwVar11 = pwVar14, pwVar14 != (wchar_t *)PTR_DAT_1401ac010))
{
iVar5 = *(int *)(pwVar14 + -4);
}
pwVar14 = pwVar11 + iVar5;
if (pwVar11 < pwVar14) {
do {
pwVar6 = wcsstr(pwVar11,param_2);
while (pwVar6 != (wchar_t *)0x0) {
pwVar11 = pwVar6 + iVar2;
iVar4 = iVar4 + 1;
pwVar6 = wcsstr(pwVar11,param_2);
local_58 = iVar4;
}
iVar5 = FUN_14006c9f0(pwVar11);
pwVar11 = pwVar11 + (iVar5 + 1);
} while (pwVar11 < pwVar14);
if (0 < iVar4) {
puVar1 = (undefined *)*param_1;
iVar5 = 0;
if ((puVar1 != (undefined *)0x0) && (puVar1 != PTR_DAT_1401ac010)) {
iVar5 = *(int *)(puVar1 + -8);
}
lVar12 = (longlong)iVar3;
iVar9 = (iVar3 - iVar2) * iVar4 + iVar5;
iVar8 = iVar5;
if (iVar5 < iVar9) {
iVar8 = iVar9;
}
iVar10 = 0;
if ((puVar1 != (undefined *)0x0) && (iVar10 = 0, puVar1 != PTR_DAT_1401ac010)) {
iVar10 = *(int *)(puVar1 + -8);
}
if (iVar8 <= iVar10) {
iVar8 = 0;
if ((puVar1 != (undefined *)0x0) && (iVar8 = 0, puVar1 != PTR_DAT_1401ac010)) {
iVar8 = *(int *)(puVar1 + -8);
}
}
iVar10 = 1;
if (1 < iVar8) {
iVar10 = iVar8;
}
if (puVar1 == (undefined *)0x0) {
iVar8 = 0;
}
else if (puVar1 == PTR_DAT_1401ac010) {
iVar8 = 0;
}
else {
iVar8 = *(int *)(puVar1 + -8);
}
if (iVar8 < iVar10) {
FUN_140002d60(param_1,iVar10);
}
FUN_140002e40(param_1);
lVar7 = (longlong)iVar5;
pwVar11 = (wchar_t *)*param_1;
if ((wchar_t *)*param_1 == (wchar_t *)0x0) {
pwVar11 = (wchar_t *)PTR_DAT_1401ac010;
}
pwVar14 = pwVar11;
while (pwVar14 < pwVar11 + lVar7) {
pwVar6 = wcsstr(pwVar14,param_2);
if (pwVar6 != (wchar_t *)0x0) {
do {
pwVar14 = pwVar6 + lVar12;
lVar13 = (longlong)
((iVar5 - (int)((longlong)pwVar6 - (longlong)pwVar11 >> 1)) - iVar2);
_DstSize = lVar13 * 2;
memmove_s(pwVar14,_DstSize,pwVar6 + iVar2,_DstSize);
memcpy_s(pwVar6,lVar12 * 2,param_3,lVar12 * 2);
pwVar6[lVar12 + lVar13] = L'\0';
iVar5 = iVar5 + (iVar3 - iVar2);
pwVar6 = wcsstr(pwVar14,param_2);
} while (pwVar6 != (wchar_t *)0x0);
}
iVar4 = FUN_14006c9f0(pwVar14);
pwVar14 = pwVar14 + (iVar4 + 1);
iVar4 = local_58;
}
FUN_140002fb0(param_1,iVar9);
}
}
return iVar4;
}
return 0;
}