server-re/decomp/MessageServer_Release_x64/full/functions/0x1400db8b0.c

342 lines
10 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400db8b0 FUN_1400db8b0
* Pseudocode, not original source. */
undefined8 *
FUN_1400db8b0(longlong *param_1,undefined4 *param_2,undefined8 param_3,undefined8 param_4)
{
ulonglong uVar1;
undefined4 uVar2;
undefined8 uVar3;
ulonglong uVar4;
undefined2 *puVar5;
undefined8 *puVar6;
uint *puVar7;
undefined2 *puVar8;
longlong **pplVar9;
ulonglong *puVar10;
undefined8 *puVar11;
uint uVar12;
undefined4 uVar13;
SIZE_T SVar14;
undefined8 *puVar15;
longlong *local_res8;
ulonglong local_res10;
longlong *local_res18;
undefined2 *local_138;
undefined8 *local_130;
uint local_128;
int iStack_124;
uint local_120 [2];
longlong local_118;
longlong local_110;
undefined4 local_108;
int local_104;
undefined2 *local_f8;
undefined8 *local_f0;
undefined8 local_e8;
undefined4 local_d8 [2];
longlong local_d0;
longlong local_c8;
undefined4 local_c0;
int local_bc;
undefined4 local_b0;
undefined **local_a8;
undefined4 local_a0;
undefined2 local_9c;
undefined1 local_98;
undefined8 local_88;
exception local_80 [72];
local_88 = 0xfffffffffffffffe;
puVar6 = (undefined8 *)0x0;
*param_2 = 0;
if ((int)param_1[1] == 0) {
puVar6 = (undefined8 *)0x0;
}
else {
FUN_1400bca00(local_120);
SVar14 = (SIZE_T)*(uint *)(param_1 + 1);
FUN_1400bc680((longlong)local_120,*param_1,SVar14,param_4);
FUN_1400bcb60((int *)local_120,(ulonglong)*(uint *)(param_1 + 1),SVar14,param_4);
FUN_1400bc600((int *)local_120,0,SVar14,param_4);
puVar11 = puVar6;
puVar15 = puVar6;
while( true ) {
local_128 = 0;
iStack_124 = 0;
local_130 = (undefined8 *)0x0;
local_138 = (undefined2 *)0x0;
SVar14 = 2;
pplVar9 = &local_res8;
puVar7 = local_120;
uVar3 = FUN_1400bc930(puVar7,pplVar9,2);
uVar13 = SUB84(puVar11,0);
if ((char)uVar3 == '\0') {
*(undefined4 *)(param_1 + 4) = uVar13;
FUN_1400d1800((longlong *)&local_138);
if (local_130 != (undefined8 *)0x0) {
if (iStack_124 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_128 = 0;
}
local_res8 = &local_118;
FUN_1400d1800(&local_118);
if (local_110 == 0) {
return puVar15;
}
if (-1 < local_104) {
return puVar15;
}
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if ((short)local_res8 != 0x5713) break;
puVar10 = &local_res10;
puVar7 = local_120;
uVar4 = FUN_1400bcfd0(puVar7,puVar10,SVar14,param_4);
uVar1 = local_res10;
if ((char)uVar4 == '\0') {
*(undefined4 *)(param_1 + 4) = uVar13;
FUN_1400d1800((longlong *)&local_138);
if (local_130 != (undefined8 *)0x0) {
if (iStack_124 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_128 = 0;
}
local_res8 = &local_118;
FUN_1400d1800(&local_118);
if (local_110 == 0) {
return puVar15;
}
if (-1 < local_104) {
return puVar15;
}
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
uVar12 = (uint)local_res10;
if ((int)uVar12 < 0) {
if (local_118 == 0) {
if (local_110 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(puVar7,puVar10,SVar14,param_4);
}
}
else {
local_108 = *(undefined4 *)(local_118 + 0x18);
}
*(undefined4 *)(param_1 + 4) = local_108;
*param_2 = 0x1f;
FUN_1400d1800((longlong *)&local_138);
if (local_130 != (undefined8 *)0x0) {
if (iStack_124 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_128 = 0;
}
local_res8 = &local_118;
FUN_1400d1800(&local_118);
if ((local_110 != 0) && (local_104 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
goto LAB_1400dbe0b;
}
if (*(int *)((longlong)param_1 + 0x1c) < (int)uVar12) {
if (local_118 == 0) {
if (local_110 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(puVar7,puVar10,SVar14,param_4);
}
}
else {
local_108 = *(undefined4 *)(local_118 + 0x18);
}
*(undefined4 *)(param_1 + 4) = local_108;
*param_2 = 0x20;
FUN_1400d1800((longlong *)&local_138);
if (local_130 != (undefined8 *)0x0) {
if (iStack_124 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_128 = 0;
}
local_res8 = &local_118;
FUN_1400d1800(&local_118);
if ((local_110 != 0) && (local_104 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
goto LAB_1400dbe0b;
}
uVar4 = local_res10 & 0xffffffff;
uVar2 = FUN_1400bc990(local_120,uVar12,SVar14,param_4);
if ((char)uVar2 == '\0') {
*(undefined4 *)(param_1 + 4) = uVar13;
FUN_1400d1800((longlong *)&local_138);
if (local_130 != (undefined8 *)0x0) {
if (iStack_124 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_128 = 0;
}
local_res8 = &local_118;
FUN_1400d1800(&local_118);
if (local_110 == 0) {
return puVar15;
}
if (-1 < local_104) {
return puVar15;
}
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (local_130 != (undefined8 *)0x0) {
FUN_14006ba50(local_80,(wchar_t *)PTR_u_Cannot_use_internal_buffer_becau_1401adba0,SVar14,
param_4);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_80,(ThrowInfo *)&DAT_1401a93e8);
}
if (local_138 == (undefined2 *)0x0) {
puVar5 = FUN_1400d1840(0,uVar4,SVar14);
*(undefined8 *)(puVar5 + 0x14) = 1;
if (local_130 == (undefined8 *)0x0) {
uVar4 = 0;
local_138 = puVar5;
goto LAB_1400db9fc;
}
puVar8 = local_138;
local_138 = puVar5;
if (iStack_124 < (int)uVar12) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
}
else {
LAB_1400db9fc:
puVar8 = local_138;
if ((int)uVar12 < 1) {
if (local_138 == (undefined2 *)0x0) goto LAB_1400dbbba;
uVar12 = 0;
}
else if (local_138 == (undefined2 *)0x0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,uVar4,SVar14,param_4);
}
FUN_1400146f0((longlong)local_138,uVar12,SVar14);
uVar12 = local_128;
}
local_128 = uVar12;
puVar11 = local_130;
if (local_130 == (undefined8 *)0x0) {
uVar4 = 0;
if (local_138 == (undefined2 *)0x0) {
LAB_1400dbbba:
/* WARNING: Subroutine does not return */
FUN_1400d1900(puVar8,uVar4,SVar14,param_4);
}
puVar11 = puVar6;
if (*(int *)(local_138 + 0xc) != 0) {
puVar11 = *(undefined8 **)(local_138 + 8);
}
}
uVar3 = FUN_1400bc930(local_120,puVar11,uVar1 & 0xffffffff);
if ((char)uVar3 == '\0') {
*(undefined4 *)(param_1 + 4) = uVar13;
FUN_1400d1800((longlong *)&local_138);
if (local_130 != (undefined8 *)0x0) {
if (iStack_124 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_128 = 0;
}
local_res8 = &local_118;
FUN_1400d1800(&local_118);
if (local_110 == 0) {
return puVar15;
}
if (-1 < local_104) {
return puVar15;
}
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
FUN_1400bca00(local_d8);
local_a8 = Proud::AddrPort::vftable;
local_98 = 0;
local_a0 = DAT_1401ac3d0;
local_9c = DAT_1401ac3d4;
local_b0 = (undefined4)param_1[3];
local_e8 = 0;
local_f0 = (undefined8 *)0x0;
if (local_138 == (undefined2 *)0x0) {
local_f8 = (undefined2 *)0x0;
local_f0 = local_130;
local_e8 = CONCAT44(iStack_124,local_128);
}
else {
*(longlong *)(local_138 + 0x14) = *(longlong *)(local_138 + 0x14) + 1;
local_f8 = local_138;
}
FUN_1400bcad0(local_d8,(longlong *)&local_f8);
param_4 = 1;
FUN_1400db760(param_1[2],*(int *)(param_1[2] + 0x18),(longlong)local_d8,1);
puVar15 = (undefined8 *)(ulonglong)((int)puVar15 + 1);
puVar11 = (undefined8 *)
(ulonglong)(uint)((int)(((int)local_120[0] >> 0x1f & 7U) + local_120[0]) >> 3);
local_res18 = &local_d0;
FUN_1400d1800(&local_d0);
if (local_c8 != 0) {
if (local_bc < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_c0 = 0;
}
FUN_1400d1800((longlong *)&local_138);
if ((local_130 != (undefined8 *)0x0) && (iStack_124 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
}
if (local_118 == 0) {
if (local_110 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(puVar7,pplVar9,SVar14,param_4);
}
}
else {
local_108 = *(undefined4 *)(local_118 + 0x18);
}
*(undefined4 *)(param_1 + 4) = local_108;
*param_2 = 0x1f;
FUN_1400d1800((longlong *)&local_138);
if (local_130 != (undefined8 *)0x0) {
if (iStack_124 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_128 = 0;
}
local_res8 = &local_118;
FUN_1400d1800(&local_118);
if ((local_110 != 0) && (local_104 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
LAB_1400dbe0b:
puVar6 = (undefined8 *)0xffffffff;
}
return puVar6;
}