121 lines
3.5 KiB
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;
|
|
}
|
|
|