201 lines
5.8 KiB
C
201 lines
5.8 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401bc440 FUN_1401bc440
|
|
* Pseudocode, not original source. */
|
|
|
|
int FUN_1401bc440(byte *param_1,byte *param_2,int *param_3,uint param_4,uint param_5)
|
|
|
|
{
|
|
short sVar1;
|
|
int iVar2;
|
|
byte *pbVar3;
|
|
byte bVar4;
|
|
short sVar5;
|
|
uint uVar6;
|
|
size_t _MaxCount;
|
|
uint uVar7;
|
|
size_t sVar8;
|
|
byte *pbVar9;
|
|
int iVar10;
|
|
size_t sVar11;
|
|
byte *local_res8;
|
|
byte *local_res10;
|
|
int *local_res18;
|
|
uint local_58;
|
|
uint local_54;
|
|
byte *local_50;
|
|
byte *local_48;
|
|
|
|
local_res10 = param_2;
|
|
local_res18 = param_3;
|
|
if (param_1 == (byte *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
if (param_2 == (byte *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
if (param_1 == param_2) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
_MaxCount = 0;
|
|
bVar4 = *param_1;
|
|
local_50 = param_2 + param_4;
|
|
uVar6 = 0;
|
|
local_58 = 0;
|
|
iVar2 = 1;
|
|
iVar10 = 1;
|
|
local_54 = 0;
|
|
sVar8 = _MaxCount;
|
|
sVar11 = _MaxCount;
|
|
local_48 = param_2;
|
|
if (bVar4 != 0) {
|
|
do {
|
|
uVar7 = (uint)sVar8;
|
|
pbVar9 = param_1 + 1;
|
|
uVar6 = (uint)_MaxCount;
|
|
iVar2 = 0;
|
|
if (uVar6 == param_4) {
|
|
iVar10 = iVar2;
|
|
}
|
|
local_res8 = pbVar9;
|
|
if (bVar4 == 0x3a) {
|
|
if ((char)param_5 < '\0') {
|
|
if ((int)sVar11 == 0) {
|
|
if (iVar10 != 0) {
|
|
*param_2 = (byte)sVar11;
|
|
pbVar3 = param_2 + -_MaxCount;
|
|
if ((pbVar3 < local_48) || (local_50 < pbVar3)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
FUN_1401bc180(pbVar3,local_50 + (1 - (longlong)pbVar3));
|
|
uVar7 = local_54;
|
|
if (uVar6 == 4) {
|
|
iVar2 = strncmp("file",(char *)(param_2 + -4),_MaxCount);
|
|
sVar11 = 5;
|
|
uVar7 = local_54;
|
|
if (iVar2 == 0) {
|
|
local_54 = 1;
|
|
uVar7 = 1;
|
|
}
|
|
goto LAB_1401bc659;
|
|
}
|
|
}
|
|
sVar11 = (size_t)(uVar6 + 1);
|
|
}
|
|
goto LAB_1401bc659;
|
|
}
|
|
LAB_1401bc6e5:
|
|
iVar2 = FUN_1401bc260(bVar4);
|
|
if ((((iVar2 == 0) || ((param_5 & 2) != 0)) ||
|
|
((((param_5 & 0x10) != 0 && (bVar4 != 0x20)) ||
|
|
(((param_5 & 8) != 0 && (bVar4 == 0x2e)))))) ||
|
|
(((param_5 & 0x40) == 0 && (bVar4 == 0x25)))) {
|
|
if (iVar10 != 0) {
|
|
*param_2 = bVar4;
|
|
param_2 = param_2 + 1;
|
|
local_res10 = param_2;
|
|
}
|
|
}
|
|
else if (uVar6 < param_4 - 3) {
|
|
if (iVar10 != 0) {
|
|
*param_2 = 0x25;
|
|
pbVar3 = param_2 + 1;
|
|
if (bVar4 < 0x10) {
|
|
*pbVar3 = 0x30;
|
|
pbVar3 = param_2 + 2;
|
|
}
|
|
FUN_1401bc1d0(bVar4,pbVar3,(longlong)local_50 - (longlong)pbVar3,0x10);
|
|
param_2 = param_2 + 3;
|
|
local_res10 = param_2;
|
|
}
|
|
uVar6 = uVar6 + 2;
|
|
}
|
|
else {
|
|
iVar10 = 0;
|
|
uVar6 = uVar6 + 2;
|
|
}
|
|
local_58 = uVar6 + 1;
|
|
local_res8 = pbVar9;
|
|
}
|
|
else {
|
|
if (bVar4 == 0x25) {
|
|
if ((param_5 & 4) != 0) {
|
|
bVar4 = *pbVar9;
|
|
if (bVar4 == 0) goto LAB_1401bc7f5;
|
|
param_3 = local_res18;
|
|
if ((byte)(bVar4 - 0x30) < 10) {
|
|
sVar5 = bVar4 - 0x30;
|
|
}
|
|
else if ((byte)(bVar4 + 0xbf) < 6) {
|
|
sVar5 = bVar4 - 0x37;
|
|
}
|
|
else {
|
|
if (5 < (byte)(bVar4 + 0x9f)) goto LAB_1401bc7b4;
|
|
sVar5 = bVar4 - 0x57;
|
|
}
|
|
if (sVar5 < 0) goto LAB_1401bc7b4;
|
|
bVar4 = param_1[2];
|
|
if (bVar4 == 0) goto LAB_1401bc7f5;
|
|
pbVar9 = param_1 + 3;
|
|
if ((byte)(bVar4 - 0x30) < 10) {
|
|
sVar1 = bVar4 - 0x30;
|
|
}
|
|
else if ((byte)(bVar4 + 0xbf) < 6) {
|
|
sVar1 = bVar4 - 0x37;
|
|
}
|
|
else {
|
|
if (5 < (byte)(bVar4 + 0x9f)) goto LAB_1401bc7b4;
|
|
sVar1 = bVar4 - 0x57;
|
|
}
|
|
if (sVar1 < 0) goto LAB_1401bc7b4;
|
|
bVar4 = (char)sVar5 * '\x10' + (char)sVar1;
|
|
local_res8 = pbVar9;
|
|
}
|
|
}
|
|
else if (((bVar4 == 0x3f) || (bVar4 == 0x23)) && ((param_5 & 0x20) != 0)) {
|
|
param_5 = param_5 | 2;
|
|
}
|
|
LAB_1401bc659:
|
|
if ((-1 < (char)param_5) || ((param_5 & 2) != 0)) goto LAB_1401bc6e5;
|
|
if (bVar4 == 0x5c) {
|
|
if ((((int)sVar11 != 0) || ((param_5 >> 8 & 1) != 0)) &&
|
|
((iVar10 != 0 && ((uVar7 == 0 || (uVar6 < 7)))))) {
|
|
bVar4 = 0x2f;
|
|
}
|
|
goto LAB_1401bc6e5;
|
|
}
|
|
if ((((bVar4 != 0x2e) || (uVar6 == 0)) || ((param_5 & 8) != 0)) ||
|
|
(iVar2 = FUN_1401bc310(&local_res10,param_2 + -1,_MaxCount,&local_res8,&local_58,param_5,
|
|
(int)sVar11), param_2 = local_res10, pbVar9 = local_res8,
|
|
uVar6 = local_58, iVar2 == 0)) goto LAB_1401bc6e5;
|
|
}
|
|
_MaxCount = (size_t)local_58;
|
|
bVar4 = *local_res8;
|
|
uVar6 = local_58;
|
|
if (bVar4 == 0) goto LAB_1401bc7f5;
|
|
sVar8 = (size_t)local_54;
|
|
param_1 = local_res8;
|
|
} while( true );
|
|
}
|
|
LAB_1401bc802:
|
|
if (uVar6 < param_4) {
|
|
*param_2 = 0;
|
|
}
|
|
LAB_1401bc7b4:
|
|
if (param_3 != (int *)0x0) {
|
|
*param_3 = uVar6 + 1;
|
|
}
|
|
if (param_4 < uVar6 + 1) {
|
|
iVar2 = 0;
|
|
}
|
|
return iVar2;
|
|
LAB_1401bc7f5:
|
|
iVar2 = iVar10;
|
|
param_3 = local_res18;
|
|
if (iVar2 == 0) goto LAB_1401bc7b4;
|
|
goto LAB_1401bc802;
|
|
}
|
|
|