server-re/decomp/DBCServer_Release_x64/full/functions/0x1401ae070.c

518 lines
16 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401ae070 FUN_1401ae070
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_1401ae070(undefined8 *param_1)
{
longlong lVar1;
void *pvVar2;
undefined8 *puVar3;
char cVar4;
int iVar5;
DWORD DVar6;
BOOL BVar7;
errno_t eVar8;
undefined8 *puVar9;
undefined8 uVar10;
longlong *plVar11;
undefined8 *puVar12;
int *piVar13;
undefined8 uVar14;
HANDLE pvVar15;
undefined1 *puVar16;
LPCWSTR pWVar17;
undefined *puVar18;
int *piVar19;
undefined *puVar20;
int iVar21;
longlong lVar22;
undefined1 auStackY_3b8 [32];
undefined2 local_378 [4];
undefined *local_370;
undefined8 *local_368;
undefined8 *local_360;
undefined *local_358;
undefined *local_350;
longlong local_348;
undefined8 *local_340;
undefined8 *local_338;
undefined8 *local_330;
longlong local_328;
DWORD local_320;
DWORD DStack_31c;
DWORD local_318;
DWORD DStack_314;
longlong local_310;
DWORD local_308 [2];
undefined8 local_300;
__time64_t local_2f8;
undefined8 local_2f0;
DWORD local_2e8;
DWORD local_2e4;
DWORD local_2e0 [2];
longlong local_2d8;
undefined8 *local_2d0;
undefined1 local_2c8;
__time64_t local_2c0;
DWORD local_2b8 [2];
undefined8 local_2b0;
undefined8 local_2a8;
undefined1 local_2a0;
undefined8 local_298;
undefined1 local_290;
undefined8 local_288;
undefined1 local_280;
undefined8 local_278;
undefined8 *local_270;
undefined8 *local_268;
undefined1 *local_258;
undefined1 local_250 [264];
undefined1 *local_148;
undefined1 local_140 [264];
ulonglong local_38;
local_278 = 0xfffffffffffffffe;
local_38 = DAT_1403463c0 ^ (ulonglong)auStackY_3b8;
local_320 = GetFileSize((HANDLE)*param_1,&DStack_31c);
if ((local_320 != 0xffffffff) || (iVar5 = FUN_1401ad250(), local_2f0 = local_348, -1 < iVar5)) {
local_2f0 = CONCAT44(DStack_31c,local_320);
}
DVar6 = SetFilePointer((HANDLE)*param_1,(LONG)local_2f0,(PLONG)((longlong)&local_2f0 + 4),0);
if (DVar6 == 0xffffffff) {
FUN_1401ad250();
}
FUN_14016d8c0();
local_350 = PTR_DAT_1403440a0;
local_2c0 = _time64((__time64_t *)0x0);
puVar9 = (undefined8 *)FUN_1401ad910(&local_2c0,&local_310,&DAT_140283898);
pWVar17 = (LPCWSTR)*puVar9;
local_258 = local_250;
if (pWVar17 == (LPCWSTR)0x0) {
local_258 = (undefined1 *)0x0;
goto LAB_1401ae22f;
}
iVar5 = lstrlenW(pWVar17);
iVar5 = iVar5 + 1;
if (iVar5 < 0) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80070057);
}
if (local_258 == local_250) {
if (0x80 < iVar5) {
puVar16 = calloc((longlong)iVar5,2);
goto LAB_1401ae1c1;
}
LAB_1401ae1d5:
puVar16 = local_250;
}
else {
if (iVar5 < 0x81) {
free(local_258);
goto LAB_1401ae1d5;
}
puVar16 = _recalloc(local_258,(longlong)iVar5,2);
if (puVar16 == (undefined1 *)0x0) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x8007000e);
}
LAB_1401ae1c1:
if (puVar16 == (undefined1 *)0x0) {
local_258 = puVar16;
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x8007000e);
}
}
local_258 = puVar16;
eVar8 = memcpy_s(puVar16,(longlong)iVar5 * 2,pWVar17,(longlong)iVar5 * 2);
if (eVar8 != 0) {
if (eVar8 == 0xc) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x8007000e);
}
if ((eVar8 == 0x16) || (eVar8 == 0x22)) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80070057);
}
if (eVar8 != 0x50) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80004005);
}
}
LAB_1401ae22f:
piVar19 = (int *)0x0;
FUN_14004c020(&local_350,L"-------- Log start at %s --------\r\n",local_258);
if (local_258 != local_250) {
free(local_258);
}
LOCK();
piVar13 = (int *)(local_310 + -8);
iVar5 = *piVar13;
*piVar13 = *piVar13 + -1;
UNLOCK();
if (iVar5 + -1 < 1) {
(**(code **)(**(longlong **)(local_310 + -0x18) + 8))();
}
puVar20 = local_350;
puVar18 = PTR_DAT_1403440a0;
iVar5 = 0;
if (local_350 != (undefined *)0x0) {
piVar13 = piVar19;
if (local_350 != PTR_DAT_1403440a0) {
piVar13 = (int *)(ulonglong)*(uint *)(local_350 + -8);
}
puVar18 = local_350;
iVar5 = (int)piVar13;
}
BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar5 * 2,&local_2e8,(LPOVERLAPPED)0x0);
if (BVar7 == 0) {
FUN_1401ad250();
}
if (((puVar20 != (undefined *)0x0) && (puVar20 != PTR_DAT_1403440a0)) &&
(puVar20 + -8 != (undefined *)0x0)) {
uVar10 = FUN_14016d8c0();
local_2a8 = uVar10;
FUN_14016db50(uVar10);
local_2a0 = 1;
piVar13 = (int *)(puVar20 + -4);
*piVar13 = *piVar13 + -1;
if (*piVar13 == 0) {
FUN_14016d970(puVar20 + -8);
}
FUN_14016dbe0(uVar10);
local_2a0 = 0;
}
cVar4 = *(char *)(param_1 + 0x10);
local_350 = PTR_DAT_1403440a0;
lVar22 = local_348;
do {
if (cVar4 != '\0') {
return;
}
cVar4 = FUN_1401c37f0(param_1 + 2,300);
if (cVar4 != '\0') {
local_340 = (undefined8 *)0x0;
local_328 = 0;
local_338 = (undefined8 *)0x0;
local_330 = (undefined8 *)0x0;
puVar9 = param_1 + 3;
local_2d0 = puVar9;
FUN_14016db50(puVar9);
local_2c8 = 1;
if (*(char *)(param_1 + 10) == '\0') {
lVar1 = param_1[0x14];
while (lVar1 != 0) {
plVar11 = (longlong *)FUN_1401ad9b0(param_1 + 0x11,&local_360);
puVar9 = (undefined8 *)FUN_14016d940(0x18);
local_270 = puVar9;
local_268 = puVar9;
if (puVar9 != (undefined8 *)0x0) {
puVar9[2] = 0;
if (*plVar11 != 0) {
*(longlong *)(*plVar11 + 8) = *(longlong *)(*plVar11 + 8) + 1;
piVar13 = piVar19;
if ((puVar9[2] != 0) &&
(*(longlong *)(puVar9[2] + 8) = *(longlong *)(puVar9[2] + 8) + -1,
*(longlong *)(puVar9[2] + 8) == 0)) {
piVar13 = (int *)puVar9[2];
}
puVar9[2] = *plVar11;
if (piVar13 != (int *)0x0) {
pvVar2 = *(void **)piVar13;
if (pvVar2 != (void *)0x0) {
FUN_14004eb70((longlong)pvVar2 + 8);
operator_delete(pvVar2);
}
FUN_14016d970(piVar13);
}
}
}
puVar12 = local_360;
puVar9[1] = local_330;
*puVar9 = 0;
local_328 = local_328 + 1;
puVar3 = puVar9;
if (local_330 != (undefined8 *)0x0) {
*local_330 = puVar9;
puVar3 = local_338;
}
local_338 = puVar3;
local_330 = puVar9;
if ((local_360 != (undefined8 *)0x0) &&
(local_360[1] = local_360[1] + -1, local_360[1] == 0)) {
pvVar2 = (void *)*local_360;
if (pvVar2 != (void *)0x0) {
FUN_14004eb70((longlong)pvVar2 + 8);
operator_delete(pvVar2);
}
FUN_14016d970(puVar12);
}
puVar9 = local_2d0;
lVar1 = param_1[0x14];
}
}
FUN_14016dbe0(puVar9);
local_2c8 = 0;
FUN_14016d8c0();
local_370 = PTR_DAT_1403440a0;
puVar20 = PTR_DAT_1403440a0;
while (local_328 != 0) {
FUN_1401ad9b0(&local_340,&local_368);
puVar9 = local_368;
piVar13 = piVar19;
if (local_368 != (undefined8 *)0x0) {
piVar13 = (int *)*local_368;
}
iVar5 = *piVar13;
iVar21 = 0;
if (iVar5 == 0) {
if ((HANDLE)*param_1 != (HANDLE)0x0) {
CloseHandle((HANDLE)*param_1);
*param_1 = 0;
}
piVar13 = piVar19;
if (puVar9 != (undefined8 *)0x0) {
piVar13 = (int *)*puVar9;
}
pWVar17 = *(LPCWSTR *)(piVar13 + 2);
if (*(LPCWSTR *)(piVar13 + 2) == (LPCWSTR)0x0) {
pWVar17 = (LPCWSTR)PTR_DAT_1403440a0;
}
if (param_1[1] == 0) {
pvVar15 = CreateFileW(pWVar17,0x40000000,1,(LPSECURITY_ATTRIBUTES)0x0,4,0x80,(HANDLE)0x0
);
}
else {
pvVar15 = (HANDLE)FUN_1401ad270(param_1[1],pWVar17,0x40000000);
}
if (pvVar15 == (HANDLE)0xffffffffffffffff) {
iVar5 = FUN_1401ad250();
if (iVar5 < 0) {
*(undefined1 *)(param_1 + 10) = 1;
goto LAB_1401ae989;
}
}
else {
*param_1 = pvVar15;
}
local_378[0] = 0xfeff;
BVar7 = WriteFile((HANDLE)*param_1,local_378,2,local_308,(LPOVERLAPPED)0x0);
if (BVar7 == 0) {
FUN_1401ad250();
}
local_318 = GetFileSize((HANDLE)*param_1,&DStack_314);
if ((local_318 != 0xffffffff) || (iVar5 = FUN_1401ad250(), -1 < iVar5)) {
lVar22 = CONCAT44(DStack_314,local_318);
}
local_300 = lVar22;
DVar6 = SetFilePointer((HANDLE)*param_1,(LONG)lVar22,(PLONG)((longlong)&local_300 + 4),0);
if (DVar6 == 0xffffffff) {
FUN_1401ad250();
}
FUN_14016d8c0();
local_358 = PTR_DAT_1403440a0;
local_2f8 = _time64((__time64_t *)0x0);
puVar9 = (undefined8 *)FUN_1401ad910(&local_2f8,&local_348,&DAT_140283898);
pWVar17 = (LPCWSTR)*puVar9;
local_148 = local_140;
if (pWVar17 == (LPCWSTR)0x0) {
local_148 = (undefined1 *)0x0;
}
else {
iVar5 = lstrlenW(pWVar17);
iVar5 = iVar5 + 1;
if (iVar5 < 0) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80070057);
}
if (local_148 == local_140) {
if (0x80 < iVar5) {
puVar16 = calloc((longlong)iVar5,2);
goto LAB_1401ae838;
}
LAB_1401ae84a:
puVar16 = local_140;
}
else {
if (iVar5 < 0x81) {
free(local_148);
goto LAB_1401ae84a;
}
puVar16 = _recalloc(local_148,(longlong)iVar5,2);
if (puVar16 == (undefined1 *)0x0) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x8007000e);
}
LAB_1401ae838:
if (puVar16 == (undefined1 *)0x0) {
local_148 = puVar16;
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x8007000e);
}
}
local_148 = puVar16;
eVar8 = memcpy_s(puVar16,(longlong)iVar5 * 2,pWVar17,(longlong)iVar5 * 2);
if (eVar8 != 0) {
if (eVar8 == 0xc) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x8007000e);
}
if ((eVar8 == 0x16) || (eVar8 == 0x22)) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80070057);
}
if (eVar8 != 0x50) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80004005);
}
}
}
FUN_14004c020(&local_358,L"-------- Log start at %s --------\r\n",local_148);
if (local_148 != local_140) {
free(local_148);
}
LOCK();
piVar13 = (int *)(local_348 + -8);
iVar5 = *piVar13;
*piVar13 = *piVar13 + -1;
UNLOCK();
if (iVar5 + -1 < 1) {
(**(code **)(**(longlong **)(local_348 + -0x18) + 8))();
}
puVar20 = local_358;
puVar18 = PTR_DAT_1403440a0;
if (local_358 != (undefined *)0x0) {
piVar13 = piVar19;
if (local_358 != PTR_DAT_1403440a0) {
piVar13 = (int *)(ulonglong)*(uint *)(local_358 + -8);
}
iVar21 = (int)piVar13;
puVar18 = local_358;
}
BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar21 * 2,local_2b8,(LPOVERLAPPED)0x0);
if (BVar7 == 0) {
FUN_1401ad250();
}
if (((puVar20 != (undefined *)0x0) && (puVar20 != PTR_DAT_1403440a0)) &&
(puVar20 + -8 != (undefined *)0x0)) {
uVar10 = FUN_14016d8c0();
local_298 = uVar10;
FUN_14016db50(uVar10);
local_290 = 1;
piVar13 = (int *)(puVar20 + -4);
*piVar13 = *piVar13 + -1;
if (*piVar13 == 0) {
FUN_14016d970(puVar20 + -8);
}
FUN_14016dbe0(uVar10);
local_290 = 0;
}
local_358 = PTR_DAT_1403440a0;
puVar9 = local_368;
puVar20 = local_370;
}
else if (iVar5 == 1) {
piVar13 = piVar19;
if (local_368 != (undefined8 *)0x0) {
piVar13 = (int *)*local_368;
}
local_2b0 = *(undefined8 *)(piVar13 + 6);
puVar12 = (undefined8 *)FUN_1401ad910(&local_2b0,&local_2d8,&DAT_140283898);
uVar10 = *puVar12;
piVar13 = piVar19;
if (puVar9 != (undefined8 *)0x0) {
piVar13 = (int *)*puVar9;
}
uVar14 = FUN_1401bbc90(piVar13[4]);
FUN_14004c020(&local_370,L"[%s] [%s] %s\r\n",uVar14,uVar10);
LOCK();
piVar13 = (int *)(local_2d8 + -8);
iVar5 = *piVar13;
*piVar13 = *piVar13 + -1;
UNLOCK();
if (iVar5 + -1 < 1) {
(**(code **)(**(longlong **)(local_2d8 + -0x18) + 8))();
}
puVar20 = local_370;
puVar18 = PTR_DAT_1403440a0;
if (local_370 != (undefined *)0x0) {
piVar13 = piVar19;
if (local_370 != PTR_DAT_1403440a0) {
piVar13 = (int *)(ulonglong)*(uint *)(local_370 + -8);
}
iVar21 = (int)piVar13;
puVar18 = local_370;
}
BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar21 * 2,&local_2e4,(LPOVERLAPPED)0x0);
puVar9 = local_368;
if (BVar7 == 0) {
FUN_1401ad250();
puVar9 = local_368;
}
}
else if (iVar5 == 2) {
piVar13 = piVar19;
if (local_368 != (undefined8 *)0x0) {
piVar13 = (int *)*local_368;
}
puVar18 = *(undefined **)(piVar13 + 2);
iVar5 = 0;
if ((puVar18 != (undefined *)0x0) && (iVar5 = iVar21, puVar18 != PTR_DAT_1403440a0)) {
iVar5 = *(int *)(puVar18 + -8);
}
piVar13 = piVar19;
if (local_368 != (undefined8 *)0x0) {
piVar13 = (int *)*local_368;
}
puVar18 = *(undefined **)(piVar13 + 2);
if (*(undefined **)(piVar13 + 2) == (undefined *)0x0) {
puVar18 = PTR_DAT_1403440a0;
}
BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar5 * 2,local_2e0,(LPOVERLAPPED)0x0);
if (BVar7 == 0) {
FUN_1401ad250();
}
}
LAB_1401ae989:
puVar12 = local_368;
if (puVar9 != (undefined8 *)0x0) {
plVar11 = puVar9 + 1;
*plVar11 = *plVar11 + -1;
puVar20 = local_370;
if (*plVar11 == 0) {
pvVar2 = (void *)*local_368;
if (pvVar2 != (void *)0x0) {
FUN_14004eb70((longlong)pvVar2 + 8);
operator_delete(pvVar2);
}
FUN_14016d970(puVar12);
puVar20 = local_370;
}
}
}
if (((puVar20 != (undefined *)0x0) && (puVar20 != PTR_DAT_1403440a0)) &&
(puVar20 + -8 != (undefined *)0x0)) {
uVar10 = FUN_14016d8c0();
local_288 = uVar10;
FUN_14016db50(uVar10);
local_280 = 1;
piVar13 = (int *)(puVar20 + -4);
*piVar13 = *piVar13 + -1;
if (*piVar13 == 0) {
FUN_14016d970(puVar20 + -8);
}
FUN_14016dbe0(uVar10);
local_280 = 0;
}
local_370 = PTR_DAT_1403440a0;
FUN_1401ada50(&local_340);
if (local_340 != (undefined8 *)0x0) {
(**(code **)*local_340)(local_340,1);
}
}
cVar4 = *(char *)(param_1 + 0x10);
} while( true );
}