/* 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; }