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

87 lines
2.4 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14000c370 FUN_14000c370
* Pseudocode, not original source. */
ulonglong FUN_14000c370(longlong *param_1,char *param_2)
{
char cVar1;
undefined1 auVar2 [16];
FILE *_File;
errno_t eVar3;
__uint64 _Var4;
undefined4 extraout_var;
longlong *plVar5;
longlong *extraout_RAX;
ulonglong uVar6;
size_t sVar7;
char *pcVar8;
size_t *psVar9;
FILE *local_res8;
size_t *local_38;
uVar6 = 0xffffffffffffffff;
pcVar8 = param_2;
do {
if (uVar6 == 0) break;
uVar6 = uVar6 - 1;
cVar1 = *pcVar8;
pcVar8 = pcVar8 + 1;
} while (cVar1 != '\0');
uVar6 = ~uVar6;
sVar7 = uVar6 - 1;
if (sVar7 == 0) {
psVar9 = &DAT_1401bcf30;
}
else {
auVar2._8_8_ = 0;
auVar2._0_8_ = uVar6 + 0x1a >> 2;
_Var4 = SUB168(ZEXT816(4) * auVar2,0);
if (SUB168(ZEXT816(4) * auVar2,8) != 0) {
_Var4 = 0xffffffffffffffff;
}
local_38 = operator_new(_Var4);
*local_38 = sVar7;
*(undefined1 *)((longlong)local_38 + uVar6 + 0xf) = 0;
local_38[1] = sVar7;
psVar9 = local_38;
}
memcpy(psVar9 + 2,param_2,*psVar9);
FUN_14000af60(param_1 + 7,psVar9 + 2,*psVar9);
local_res8 = (FILE *)0x0;
eVar3 = fopen_s(&local_res8,(char *)(param_1[7] + 0x10),"rb");
_File = local_res8;
plVar5 = (longlong *)CONCAT44(extraout_var,eVar3);
if ((eVar3 == 0) && (local_res8 != (FILE *)0x0)) {
uVar6 = FUN_14000c4f0(param_1,local_res8);
fclose(_File);
if (psVar9 != &DAT_1401bcf30) {
operator_delete__(local_38);
}
uVar6 = uVar6 & 0xff;
}
else {
if ((char)param_1[0xb] == '\0') {
*(undefined1 *)(param_1 + 0xb) = 1;
*(undefined4 *)((longlong)param_1 + 0x5c) = 2;
uVar6 = 0xffffffffffffffff;
pcVar8 = PTR_s_Failed_to_open_file_1401b3370;
do {
if (uVar6 == 0) break;
uVar6 = uVar6 - 1;
cVar1 = *pcVar8;
pcVar8 = pcVar8 + 1;
} while (cVar1 != '\0');
plVar5 = FUN_14000af60(param_1 + 0xc,PTR_s_Failed_to_open_file_1401b3370,~uVar6 - 1);
*(undefined4 *)(param_1 + 0xf) = 0xffffffff;
*(undefined4 *)((longlong)param_1 + 0x74) = 0xffffffff;
}
if (psVar9 != &DAT_1401bcf30) {
operator_delete__(local_38);
plVar5 = extraout_RAX;
}
uVar6 = (ulonglong)plVar5 & 0xffffffffffffff00;
}
return uVar6;
}