/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401ad3c0 FUN_1401ad3c0 * Pseudocode, not original source. */ ulonglong FUN_1401ad3c0(longlong *param_1,wchar_t *param_2,void *param_3) { undefined *puVar1; rsize_t _DstSize; int iVar2; int iVar3; uint uVar4; int iVar5; int iVar6; int iVar7; ulonglong uVar8; wchar_t *pwVar9; longlong lVar10; uint uVar11; int iVar12; int iVar13; int iVar14; wchar_t *pwVar15; longlong lVar16; longlong lVar17; wchar_t *pwVar18; uint local_58; uVar8 = FUN_14016d740(param_2); iVar2 = (int)uVar8; if (iVar2 != 0) { iVar3 = FUN_14016d740(param_3); pwVar18 = (wchar_t *)*param_1; uVar4 = 0; local_58 = 0; uVar11 = uVar4; pwVar15 = (wchar_t *)PTR_DAT_1403440a0; if ((pwVar18 != (wchar_t *)0x0) && (pwVar15 = pwVar18, pwVar18 != (wchar_t *)PTR_DAT_1403440a0)) { uVar11 = *(uint *)(pwVar18 + -4); } pwVar18 = pwVar15 + (int)uVar11; if (pwVar15 < pwVar18) { do { pwVar9 = wcsstr(pwVar15,param_2); while (pwVar9 != (wchar_t *)0x0) { pwVar15 = pwVar9 + iVar2; uVar4 = uVar4 + 1; pwVar9 = wcsstr(pwVar15,param_2); local_58 = uVar4; } iVar5 = FUN_14016d740(pwVar15); pwVar15 = pwVar15 + (iVar5 + 1); } while (pwVar15 < pwVar18); if (0 < (int)uVar4) { puVar1 = (undefined *)*param_1; iVar5 = 0; if ((puVar1 != (undefined *)0x0) && (iVar5 = 0, puVar1 != PTR_DAT_1403440a0)) { iVar5 = *(int *)(puVar1 + -8); } lVar16 = (longlong)iVar3; iVar12 = (iVar3 - iVar2) * uVar4 + iVar5; iVar7 = iVar5; if (iVar5 < iVar12) { iVar7 = iVar12; } iVar13 = 0; iVar14 = iVar13; if ((puVar1 != (undefined *)0x0) && (puVar1 != PTR_DAT_1403440a0)) { iVar14 = *(int *)(puVar1 + -8); } iVar6 = 0; if (((iVar7 <= iVar14) && (iVar7 = iVar13, puVar1 != (undefined *)0x0)) && (iVar7 = iVar6, puVar1 != PTR_DAT_1403440a0)) { iVar7 = *(int *)(puVar1 + -8); } iVar14 = 1; if (1 < iVar7) { iVar14 = iVar7; } if ((puVar1 != (undefined *)0x0) && (puVar1 != PTR_DAT_1403440a0)) { iVar6 = *(int *)(puVar1 + -8); } if (iVar6 < iVar14) { FUN_14004e770(param_1); } FUN_14004e850(param_1); lVar10 = (longlong)iVar5; pwVar15 = (wchar_t *)*param_1; if ((wchar_t *)*param_1 == (wchar_t *)0x0) { pwVar15 = (wchar_t *)PTR_DAT_1403440a0; } for (pwVar18 = pwVar15; pwVar18 < pwVar15 + lVar10; pwVar18 = pwVar18 + (iVar7 + 1)) { pwVar9 = wcsstr(pwVar18,param_2); if (pwVar9 != (wchar_t *)0x0) { do { pwVar18 = pwVar9 + lVar16; lVar17 = (longlong) ((iVar5 - (int)((longlong)pwVar9 - (longlong)pwVar15 >> 1)) - iVar2); _DstSize = lVar17 * 2; memmove_s(pwVar18,_DstSize,pwVar9 + iVar2,_DstSize); memcpy_s(pwVar9,lVar16 * 2,param_3,lVar16 * 2); pwVar9[lVar16 + lVar17] = L'\0'; iVar5 = iVar5 + (iVar3 - iVar2); pwVar9 = wcsstr(pwVar18,param_2); } while (pwVar9 != (wchar_t *)0x0); } iVar7 = FUN_14016d740(pwVar18); uVar4 = local_58; } FUN_14004e9c0(param_1,iVar12); } } return (ulonglong)uVar4; } return uVar8; }