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

418 lines
13 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401b9a70 FUN_1401b9a70
* Pseudocode, not original source. */
void FUN_1401b9a70(undefined8 *param_1)
{
undefined8 *puVar1;
int iVar2;
int iVar3;
longlong lVar4;
longlong lVar5;
undefined8 uVar6;
longlong *plVar7;
uint uVar8;
undefined8 *puVar9;
int iVar10;
uint uVar11;
uint uVar12;
longlong lVar13;
longlong lVar14;
longlong *plVar15;
longlong lVar16;
int iVar17;
longlong lVar18;
longlong lVar19;
ulonglong uVar20;
bool bVar21;
bool bVar22;
undefined8 *puVar23;
longlong lVar24;
undefined *puVar25;
undefined1 uVar26;
undefined1 local_a0 [104];
puVar1 = param_1 + 1;
lVar18 = 0;
if (param_1[5] != 0) {
lVar18 = param_1[3];
}
do {
lVar19 = 0;
if (lVar18 == 0) {
return;
}
if (lVar18 == 0) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80004005);
}
lVar4 = *(longlong *)(lVar18 + 0x10);
lVar16 = lVar18;
puVar23 = puVar1;
if (*(longlong *)(lVar4 + 0x20) != 0) {
lVar19 = *(longlong *)(lVar4 + 0x10);
}
while ((uVar20 = 0, lVar19 != 0 || (lVar4 != *(longlong *)(lVar18 + 0x10)))) {
if (lVar19 == 0) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80004005);
}
lVar5 = *(longlong *)(lVar19 + 8);
puVar25 = &DAT_14034dfb8;
lVar14 = lVar19;
lVar24 = lVar4;
FUN_14016db50(&DAT_14034dfb8);
uVar26 = 1;
*(undefined4 *)(lVar5 + 0x50) = 0;
*(undefined8 *)(lVar5 + 0x58) = 0;
iVar10 = *(int *)(lVar5 + 0x18);
if (iVar10 != 0) {
iVar2 = *(int *)(lVar5 + 0x1c);
if (iVar2 < 0) {
iVar3 = *(int *)(lVar5 + 0x24);
if (iVar3 == 0) {
uVar11 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3;
uVar12 = 0x400;
if ((int)uVar11 < 0x400) {
uVar12 = uVar11;
}
uVar20 = 4;
if (4 < (int)uVar12) {
uVar20 = (ulonglong)uVar12;
}
LAB_1401b9bbe:
iVar10 = *(int *)(lVar5 + 0x20);
iVar17 = (int)uVar20;
bVar22 = SBORROW4(iVar10,iVar17);
iVar3 = iVar10 - iVar17;
bVar21 = iVar10 == iVar17;
}
else {
if (iVar3 == 1) {
uVar11 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3;
uVar12 = 0x10;
if (0x10 < (int)uVar11) {
uVar12 = uVar11;
}
uVar20 = (ulonglong)uVar12;
if (uVar12 < 0x41) {
uVar20 = 0x40;
}
goto LAB_1401b9bbe;
}
if (iVar3 != 2) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
iVar10 = *(int *)(lVar5 + 0x20);
bVar22 = false;
bVar21 = iVar10 == 0;
iVar3 = iVar10;
}
iVar17 = (int)uVar20;
if (!bVar21 && bVar22 == iVar3 < 0) {
iVar17 = iVar10;
}
plVar15 = *(longlong **)(lVar5 + 8);
if (iVar2 == 0) {
if (plVar15 == (longlong *)0x0) {
lVar13 = FUN_14016d940((longlong)iVar17);
}
else {
lVar13 = (**(code **)(*plVar15 + 8))(plVar15,(longlong)iVar17);
}
}
else {
uVar6 = *(undefined8 *)(lVar5 + 0x10);
if (plVar15 == (longlong *)0x0) {
lVar13 = FUN_14016d9a0(uVar6,(longlong)iVar17,iVar2,uVar6,lVar16,puVar23,lVar14,lVar24
,puVar25,1);
}
else {
lVar13 = (**(code **)(*plVar15 + 0x10))(plVar15,uVar6);
}
if (lVar13 == 0) {
FUN_14016d300(local_a0,L"Memory allocation failure!");
/* WARNING: Subroutine does not return */
_CxxThrowException(local_a0,(ThrowInfo *)&DAT_1403417f8);
}
}
*(longlong *)(lVar5 + 0x10) = lVar13;
*(int *)(lVar5 + 0x1c) = iVar17;
}
*(undefined4 *)(lVar5 + 0x18) = 0;
}
uVar12 = 0;
iVar10 = *(int *)(lVar5 + 0x40);
if (iVar10 != 0) {
iVar2 = *(int *)(lVar5 + 0x44);
if (iVar2 < 0) {
iVar3 = *(int *)(lVar5 + 0x4c);
if (iVar3 == 0) {
uVar12 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3;
uVar11 = 0x400;
if ((int)uVar12 < 0x400) {
uVar11 = uVar12;
}
uVar12 = 4;
if (4 < (int)uVar11) {
uVar12 = uVar11;
}
LAB_1401b9c92:
uVar11 = *(uint *)(lVar5 + 0x48);
bVar22 = SBORROW4(uVar11,uVar12);
uVar8 = uVar11 - uVar12;
bVar21 = uVar11 == uVar12;
}
else {
if (iVar3 == 1) {
uVar11 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3;
uVar12 = 0x10;
if (0x10 < (int)uVar11) {
uVar12 = uVar11;
}
if (uVar12 < 0x41) {
uVar12 = 0x40;
}
goto LAB_1401b9c92;
}
if (iVar3 != 2) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
uVar11 = *(uint *)(lVar5 + 0x48);
bVar22 = false;
bVar21 = uVar11 == 0;
uVar8 = uVar11;
}
if (!bVar21 && bVar22 == (int)uVar8 < 0) {
uVar12 = uVar11;
}
plVar15 = *(longlong **)(lVar5 + 0x30);
if (iVar2 == 0) {
if (plVar15 == (longlong *)0x0) {
lVar14 = FUN_14016d940((longlong)(int)uVar12);
}
else {
lVar14 = (**(code **)(*plVar15 + 8))(plVar15,(longlong)(int)uVar12);
}
}
else {
uVar6 = *(undefined8 *)(lVar5 + 0x38);
if (plVar15 == (longlong *)0x0) {
lVar14 = FUN_14016d9a0(uVar6,(longlong)(int)uVar12,iVar2,uVar6,lVar16,puVar23,lVar14,
lVar24,puVar25,uVar26);
}
else {
lVar14 = (**(code **)(*plVar15 + 0x10))(plVar15,uVar6);
}
if (lVar14 == 0) {
FUN_14016d300(local_a0,L"Memory allocation failure!");
/* WARNING: Subroutine does not return */
_CxxThrowException(local_a0,(ThrowInfo *)&DAT_1403417f8);
}
}
*(longlong *)(lVar5 + 0x38) = lVar14;
*(uint *)(lVar5 + 0x44) = uVar12;
}
*(undefined4 *)(lVar5 + 0x40) = 0;
}
puVar9 = DAT_14034dfb0;
if ((*(short *)(lVar5 + -8) != 0x1de6) || (*(longlong *)(lVar5 + 0x60) != 0)) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
*(undefined8 *)(lVar5 + 0x60) = *DAT_14034dfb0;
*puVar9 = (short *)(lVar5 + -8);
FUN_14016dbe0(&DAT_14034dfb8);
if (lVar4 != *(longlong *)(lVar18 + 0x10)) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
if (lVar19 == 0) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80004005);
}
lVar5 = *(longlong *)(lVar19 + 0x10);
FUN_140174c00(*(longlong *)(lVar18 + 0x10),lVar19);
lVar19 = lVar5;
}
lVar19 = *(longlong *)(lVar18 + 0x10);
plVar15 = (longlong *)(**(code **)(*(longlong *)*param_1 + 0x18))();
if (*(longlong *)(lVar19 + 0x20) != 0) {
uVar20 = *(ulonglong *)(lVar19 + 0x10);
}
for (; uVar12 = 0, uVar20 != 0; uVar20 = *(ulonglong *)(uVar20 + 0x10)) {
lVar4 = *(longlong *)(uVar20 + 8);
FUN_14016db50(&DAT_14034dfb8);
*(undefined4 *)(lVar4 + 0x50) = 0;
*(undefined8 *)(lVar4 + 0x58) = 0;
iVar10 = *(int *)(lVar4 + 0x18);
if (iVar10 != 0) {
if (*(int *)(lVar4 + 0x1c) < 0) {
iVar2 = *(int *)(lVar4 + 0x24);
if (iVar2 == 0) {
uVar12 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3;
uVar11 = 0x400;
if ((int)uVar12 < 0x400) {
uVar11 = uVar12;
}
uVar12 = 4;
if (4 < (int)uVar11) {
uVar12 = uVar11;
}
LAB_1401b9e42:
uVar11 = *(uint *)(lVar4 + 0x20);
bVar22 = SBORROW4(uVar11,uVar12);
uVar8 = uVar11 - uVar12;
bVar21 = uVar11 == uVar12;
}
else {
if (iVar2 == 1) {
uVar11 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3;
uVar12 = 0x10;
if (0x10 < (int)uVar11) {
uVar12 = uVar11;
}
if (uVar12 < 0x41) {
uVar12 = 0x40;
}
goto LAB_1401b9e42;
}
if (iVar2 != 2) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
uVar11 = *(uint *)(lVar4 + 0x20);
bVar22 = false;
bVar21 = uVar11 == 0;
uVar8 = uVar11;
}
if (!bVar21 && bVar22 == (int)uVar8 < 0) {
uVar12 = uVar11;
}
plVar7 = *(longlong **)(lVar4 + 8);
if (*(int *)(lVar4 + 0x1c) == 0) {
if (plVar7 == (longlong *)0x0) {
lVar16 = FUN_14016d940((longlong)(int)uVar12);
}
else {
lVar16 = (**(code **)(*plVar7 + 8))(plVar7,(longlong)(int)uVar12);
}
}
else {
if (plVar7 == (longlong *)0x0) {
lVar16 = FUN_14016d9a0(*(undefined8 *)(lVar4 + 0x10),(longlong)(int)uVar12);
}
else {
lVar16 = (**(code **)(*plVar7 + 0x10))(plVar7,*(undefined8 *)(lVar4 + 0x10));
}
if (lVar16 == 0) {
FUN_14016d300(local_a0,L"Memory allocation failure!");
/* WARNING: Subroutine does not return */
_CxxThrowException(local_a0,(ThrowInfo *)&DAT_1403417f8);
}
}
*(longlong *)(lVar4 + 0x10) = lVar16;
*(uint *)(lVar4 + 0x1c) = uVar12;
}
*(undefined4 *)(lVar4 + 0x18) = 0;
}
uVar12 = 0;
iVar10 = *(int *)(lVar4 + 0x40);
if (iVar10 != 0) {
if (*(int *)(lVar4 + 0x44) < 0) {
iVar2 = *(int *)(lVar4 + 0x4c);
if (iVar2 == 0) {
uVar12 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3;
uVar11 = 0x400;
if ((int)uVar12 < 0x400) {
uVar11 = uVar12;
}
uVar12 = 4;
if (4 < (int)uVar11) {
uVar12 = uVar11;
}
LAB_1401b9f16:
uVar11 = *(uint *)(lVar4 + 0x48);
bVar22 = SBORROW4(uVar11,uVar12);
uVar8 = uVar11 - uVar12;
bVar21 = uVar11 == uVar12;
}
else {
if (iVar2 == 1) {
uVar11 = (int)(iVar10 + (iVar10 >> 0x1f & 7U)) >> 3;
uVar12 = 0x10;
if (0x10 < (int)uVar11) {
uVar12 = uVar11;
}
if (uVar12 < 0x41) {
uVar12 = 0x40;
}
goto LAB_1401b9f16;
}
if (iVar2 != 2) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
uVar11 = *(uint *)(lVar4 + 0x48);
bVar22 = false;
bVar21 = uVar11 == 0;
uVar8 = uVar11;
}
if (!bVar21 && bVar22 == (int)uVar8 < 0) {
uVar12 = uVar11;
}
plVar7 = *(longlong **)(lVar4 + 0x30);
if (*(int *)(lVar4 + 0x44) == 0) {
if (plVar7 == (longlong *)0x0) {
lVar16 = FUN_14016d940((longlong)(int)uVar12);
}
else {
lVar16 = (**(code **)(*plVar7 + 8))(plVar7,(longlong)(int)uVar12);
}
}
else {
if (plVar7 == (longlong *)0x0) {
lVar16 = FUN_14016d9a0(*(undefined8 *)(lVar4 + 0x38),(longlong)(int)uVar12);
}
else {
lVar16 = (**(code **)(*plVar7 + 0x10))(plVar7,*(undefined8 *)(lVar4 + 0x38));
}
if (lVar16 == 0) {
FUN_14016d300(local_a0,L"Memory allocation failure!");
/* WARNING: Subroutine does not return */
_CxxThrowException(local_a0,(ThrowInfo *)&DAT_1403417f8);
}
}
*(longlong *)(lVar4 + 0x38) = lVar16;
*(uint *)(lVar4 + 0x44) = uVar12;
}
*(undefined4 *)(lVar4 + 0x40) = 0;
}
puVar9 = DAT_14034dfb0;
if ((*(short *)(lVar4 + -8) != 0x1de6) || (*(longlong *)(lVar4 + 0x60) != 0)) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
*(undefined8 *)(lVar4 + 0x60) = *DAT_14034dfb0;
*puVar9 = (short *)(lVar4 + -8);
FUN_14016dbe0(&DAT_14034dfb8);
}
FUN_1401b7550(lVar19);
(**(code **)(*plVar15 + 0x18))(plVar15,lVar19);
if (puVar23 != puVar1) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
if (lVar18 == 0) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80004005);
}
lVar19 = *(longlong *)(lVar18 + 0x18);
FUN_140175900(puVar1,lVar18,0);
lVar18 = lVar19;
} while( true );
}