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

78 lines
2.5 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x14018baa0 FUN_14018baa0
* Pseudocode, not original source. */
undefined4 * FUN_14018baa0(undefined4 *param_1,undefined8 param_2,undefined4 param_3,char param_4)
{
longlong lVar1;
int iVar2;
int iVar3;
void *pvVar4;
undefined1 local_50 [72];
FUN_14016b470(param_1 + 2);
FUN_14018b960(param_1 + 0xc);
if (param_4 != '\0') {
if (*(longlong *)(param_1 + 4) == 0) {
if (*(longlong *)(param_1 + 6) == 0) {
/* WARNING: Subroutine does not return */
FUN_14016d1e0();
}
iVar2 = param_1[8];
}
else {
iVar2 = *(int *)(*(longlong *)(param_1 + 4) + 0x18);
}
if (1 < iVar2) {
if (*(longlong *)(param_1 + 6) == 0) {
lVar1 = *(longlong *)(param_1 + 4);
if (lVar1 == 0) {
/* WARNING: Subroutine does not return */
FUN_14016d1e0();
}
iVar2 = *(int *)(lVar1 + 0x18);
iVar3 = 1;
if (iVar2 < 2) {
iVar3 = iVar2;
}
if (0 < iVar2 - iVar3) {
pvVar4 = (void *)0x0;
if (iVar2 != 0) {
pvVar4 = *(void **)(lVar1 + 0x10);
}
memmove(pvVar4,(void *)((longlong)iVar3 + (longlong)pvVar4),(longlong)(iVar2 - iVar3));
}
FUN_14004f0e0(lVar1,*(int *)(lVar1 + 0x18) - iVar3);
}
else {
pvVar4 = *(void **)(param_1 + 6);
if (pvVar4 == (void *)0x0) {
FUN_14016d300(local_50,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_50,(ThrowInfo *)&DAT_1403417f8);
}
iVar2 = param_1[8];
iVar3 = 1;
if (iVar2 < 2) {
iVar3 = iVar2;
}
memmove(pvVar4,(void *)((longlong)iVar3 + (longlong)pvVar4),(longlong)(iVar2 - iVar3));
if (*(longlong *)(param_1 + 6) == 0) {
FUN_14016d300(local_50,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_50,(ThrowInfo *)&DAT_1403417f8);
}
iVar3 = param_1[8] - iVar3;
if ((iVar3 < 0) || ((int)param_1[9] < iVar3)) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
param_1[8] = iVar3;
}
}
}
*param_1 = param_3;
return param_1;
}