/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14016b6a0 FUN_14016b6a0 * Pseudocode, not original source. */ undefined8 FUN_14016b6a0(int *param_1,int *param_2,int param_3) { int iVar1; longlong lVar2; int iVar3; undefined1 local_58 [80]; lVar2 = *(longlong *)(param_1 + 2); if (lVar2 == 0) { if (*(longlong *)(param_1 + 4) == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } iVar3 = param_1[6]; } else { iVar3 = *(int *)(lVar2 + 0x18); } iVar1 = (int)(*param_1 + (*param_1 >> 0x1f & 7U)) >> 3; if (iVar3 < iVar1 + param_3) { return 0; } if (*(longlong *)(param_1 + 4) == 0) { if (lVar2 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } if (*(int *)(lVar2 + 0x18) == 0) { lVar2 = 0; } else { lVar2 = *(longlong *)(lVar2 + 0x10); } } else { lVar2 = *(longlong *)(param_1 + 4); if (lVar2 == 0) { FUN_14016d300(local_58,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0); /* WARNING: Subroutine does not return */ _CxxThrowException(local_58,(ThrowInfo *)&DAT_1403417f8); } } if (DAT_140344d70 < param_3) { FUN_14016d300(local_58,L"UseExternalBuffer failed due to too large capacity"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_58,(ThrowInfo *)&DAT_1403417f8); } FUN_14016af50(param_2 + 2,iVar1 + lVar2,param_3); if (param_3 * 8 < *param_2) { *param_2 = param_3 * 8; } if (param_3 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (*(longlong *)(param_2 + 4) == 0) { lVar2 = *(longlong *)(param_2 + 2); if (param_3 < 1) { if (lVar2 == 0) goto LAB_14016b7e3; iVar3 = 0; } else { iVar3 = param_3; if (lVar2 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } } FUN_14004f0e0(lVar2,iVar3); } else { if (param_2[7] < param_3) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } param_2[6] = param_3; } LAB_14016b7e3: FUN_14016b600(param_1,param_3); return 1; }