/* 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; }