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

264 lines
9.4 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14000c4f0 FUN_14000c4f0
* Pseudocode, not original source. */
/* WARNING: Type propagation algorithm not settling */
ulonglong FUN_14000c4f0(longlong *param_1,FILE *param_2)
{
char cVar1;
ulonglong uVar2;
ulonglong uVar3;
undefined1 auVar4 [16];
undefined1 auVar5 [16];
undefined1 auVar6 [16];
ulonglong *puVar7;
long lVar8;
int iVar9;
longlong *in_RAX;
undefined4 extraout_var;
char *pcVar10;
size_t sVar11;
longlong *extraout_RAX;
longlong *extraout_RAX_00;
__uint64 _Var12;
ulonglong *puVar13;
ulonglong *puVar14;
longlong *extraout_RAX_01;
ulonglong uVar15;
ulonglong uVar16;
char *pcVar17;
char *_Src;
char *pcVar18;
ulonglong *local_res10;
ulonglong *local_res18;
ulonglong *local_res20;
ulonglong *local_a8;
ulonglong *local_88;
ulonglong *local_80;
ulonglong *local_78;
ulonglong *local_70;
ulonglong *local_68;
ulonglong *local_60;
ulonglong *local_58;
ulonglong *local_50;
if (param_2 == (FILE *)0x0) {
if ((char)param_1[0xb] != '\0') goto LAB_14000c55a;
*(undefined1 *)(param_1 + 0xb) = 1;
*(undefined4 *)((longlong)param_1 + 0x5c) = 2;
pcVar10 = PTR_s_Failed_to_open_file_1401b3370;
}
else {
FUN_14000b850((longlong)param_1);
param_1[1] = -1;
fseek(param_2,0,2);
lVar8 = ftell(param_2);
uVar15 = (ulonglong)lVar8;
iVar9 = fseek(param_2,0,0);
in_RAX = (longlong *)CONCAT44(extraout_var,iVar9);
if (0 < lVar8) {
local_88 = &DAT_1401bcf30;
if (DAT_1401bcf38 < uVar15) {
FUN_14000ae90((longlong *)&local_88,uVar15);
}
puVar14 = local_88;
pcVar10 = operator_new((longlong)(lVar8 + 1));
*pcVar10 = '\0';
sVar11 = fread(pcVar10,uVar15,1,param_2);
if (sVar11 == 1) {
pcVar10[uVar15] = '\0';
pcVar18 = pcVar10;
_Src = pcVar10;
if (*pcVar10 != '\0') {
local_res18 = local_70;
local_res20 = local_60;
local_a8 = local_50;
pcVar17 = pcVar10;
do {
puVar13 = &DAT_1401bcf30;
if (*pcVar17 == '\n') {
pcVar18 = pcVar17 + (1 - (longlong)_Src) + *puVar14;
puVar7 = puVar14;
if (((char *)puVar14[1] < pcVar18) &&
(uVar15 = puVar14[1] + (longlong)pcVar18, puVar14[1] < uVar15)) {
local_78 = &DAT_1401bcf30;
local_res10 = (ulonglong *)*puVar14;
if (uVar15 != 0) {
auVar4._8_8_ = 0;
auVar4._0_8_ = uVar15 + 0x1b >> 2;
_Var12 = SUB168(ZEXT816(4) * auVar4,0);
if (SUB168(ZEXT816(4) * auVar4,8) != 0) {
_Var12 = 0xffffffffffffffff;
}
puVar13 = operator_new(_Var12);
*puVar13 = (ulonglong)local_res10;
*(undefined1 *)((longlong)(puVar13 + 2) + (longlong)local_res10) = 0;
puVar13[1] = uVar15;
local_res18 = puVar13;
}
memcpy(puVar13 + 2,puVar14 + 2,*puVar14);
local_70 = local_80;
local_80 = local_res18;
local_res18 = local_70;
puVar7 = puVar13;
local_88 = puVar13;
local_78 = puVar14;
if (puVar14 != &DAT_1401bcf30) {
operator_delete__(local_70);
}
}
puVar14 = puVar7;
memmove((void *)(*puVar14 + 0x10 + (longlong)puVar14),_Src,
(size_t)(pcVar17 + (1 - (longlong)_Src)));
*puVar14 = (ulonglong)pcVar18;
*(char *)((longlong)puVar14 + (longlong)(pcVar18 + 0x10)) = '\0';
pcVar18 = pcVar17 + 1;
_Src = pcVar18;
}
else if (*pcVar17 == '\r') {
sVar11 = (longlong)pcVar17 - (longlong)_Src;
puVar13 = puVar14;
if (0 < (longlong)sVar11) {
uVar15 = sVar11 + *puVar14;
if ((puVar14[1] < uVar15) && (uVar16 = puVar14[1] + uVar15, puVar14[1] < uVar16)) {
local_68 = &DAT_1401bcf30;
uVar2 = *puVar14;
if (uVar16 == 0) {
local_res10 = &DAT_1401bcf30;
}
else {
auVar5._8_8_ = 0;
auVar5._0_8_ = uVar16 + 0x1b >> 2;
_Var12 = SUB168(ZEXT816(4) * auVar5,0);
if (SUB168(ZEXT816(4) * auVar5,8) != 0) {
_Var12 = 0xffffffffffffffff;
}
local_res10 = operator_new(_Var12);
*local_res10 = uVar2;
*(undefined1 *)((longlong)local_res10 + uVar2 + 0x10) = 0;
local_res10[1] = uVar16;
local_res20 = local_res10;
}
memcpy(local_res10 + 2,puVar14 + 2,*puVar14);
local_60 = local_80;
puVar13 = local_res10;
local_88 = local_res10;
local_80 = local_res20;
local_res20 = local_60;
local_68 = puVar14;
if (puVar14 != &DAT_1401bcf30) {
operator_delete__(local_60);
}
}
memmove((void *)(*puVar13 + 0x10 + (longlong)puVar13),_Src,sVar11);
*puVar13 = uVar15;
*(undefined1 *)(uVar15 + 0x10 + (longlong)puVar13) = 0;
}
local_res10 = (ulonglong *)CONCAT71(local_res10._1_7_,10);
uVar15 = *puVar13;
uVar16 = uVar15 + 1;
puVar14 = puVar13;
if ((puVar13[1] < uVar16) && (uVar2 = puVar13[1] + uVar16, puVar13[1] < uVar2)) {
local_58 = &DAT_1401bcf30;
uVar3 = *puVar13;
if (uVar2 == 0) {
puVar14 = &DAT_1401bcf30;
}
else {
auVar6._8_8_ = 0;
auVar6._0_8_ = uVar2 + 0x1b >> 2;
_Var12 = SUB168(ZEXT816(4) * auVar6,0);
if (SUB168(ZEXT816(4) * auVar6,8) != 0) {
_Var12 = 0xffffffffffffffff;
}
puVar14 = operator_new(_Var12);
*puVar14 = uVar3;
*(undefined1 *)((longlong)puVar14 + uVar3 + 0x10) = 0;
puVar14[1] = uVar2;
local_a8 = puVar14;
}
memcpy(puVar14 + 2,puVar13 + 2,*puVar13);
local_50 = local_80;
local_80 = local_a8;
local_a8 = local_50;
local_88 = puVar14;
local_58 = puVar13;
if (puVar13 != &DAT_1401bcf30) {
operator_delete__(local_50);
}
}
memmove((void *)(*puVar14 + 0x10 + (longlong)puVar14),&local_res10,1);
*puVar14 = uVar16;
*(undefined1 *)(uVar15 + 0x11 + (longlong)puVar14) = 0;
pcVar18 = pcVar17 + 1;
_Src = pcVar18;
if (*pcVar18 == '\n') {
pcVar18 = pcVar17 + 2;
_Src = pcVar18;
}
}
else {
pcVar18 = pcVar17 + 1;
}
pcVar17 = pcVar18;
} while (*pcVar18 != '\0');
}
if ((longlong)pcVar18 - (longlong)_Src != 0) {
FUN_14000b060((longlong *)&local_88,_Src,(longlong)pcVar18 - (longlong)_Src);
puVar14 = local_88;
}
operator_delete(pcVar10);
in_RAX = (longlong *)(**(code **)(*param_1 + 0x10))(param_1,puVar14 + 2,0,0);
if ((char)param_1[0xb] == '\0') {
if (puVar14 != &DAT_1401bcf30) {
operator_delete__(local_80);
in_RAX = extraout_RAX_01;
}
return CONCAT71((int7)((ulonglong)in_RAX >> 8),1);
}
}
else {
operator_delete(pcVar10);
in_RAX = extraout_RAX;
if ((char)param_1[0xb] == '\0') {
*(undefined1 *)(param_1 + 0xb) = 1;
*(undefined4 *)((longlong)param_1 + 0x5c) = 2;
uVar15 = 0xffffffffffffffff;
pcVar10 = PTR_s_Failed_to_open_file_1401b3370;
do {
if (uVar15 == 0) break;
uVar15 = uVar15 - 1;
cVar1 = *pcVar10;
pcVar10 = pcVar10 + 1;
} while (cVar1 != '\0');
in_RAX = FUN_14000af60(param_1 + 0xc,PTR_s_Failed_to_open_file_1401b3370,~uVar15 - 1);
*(undefined8 *)((longlong)param_1 + 0x74) = 0xffffffffffffffff;
}
}
if (puVar14 != &DAT_1401bcf30) {
operator_delete__(local_80);
in_RAX = extraout_RAX_00;
}
goto LAB_14000c55a;
}
if ((char)param_1[0xb] != '\0') goto LAB_14000c55a;
*(undefined1 *)(param_1 + 0xb) = 1;
*(undefined4 *)((longlong)param_1 + 0x5c) = 0xd;
pcVar10 = PTR_s_Error_document_empty__1401b33c8;
}
uVar15 = 0xffffffffffffffff;
pcVar18 = pcVar10;
do {
if (uVar15 == 0) break;
uVar15 = uVar15 - 1;
cVar1 = *pcVar18;
pcVar18 = pcVar18 + 1;
} while (cVar1 != '\0');
in_RAX = FUN_14000af60(param_1 + 0xc,pcVar10,~uVar15 - 1);
*(undefined8 *)((longlong)param_1 + 0x74) = 0xffffffffffffffff;
LAB_14000c55a:
return (ulonglong)in_RAX & 0xffffffffffffff00;
}