150 lines
4.6 KiB
C
150 lines
4.6 KiB
C
// 0038fc90 CUtlStringBuilder::InternalPrepareBuffer
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
undefined8 *
|
|
CUtlStringBuilder::InternalPrepareBuffer
|
|
(undefined8 *param_1,ulong param_2,char param_3,ulong param_4)
|
|
|
|
{
|
|
byte bVar1;
|
|
undefined8 uVar2;
|
|
code *pcVar3;
|
|
char cVar4;
|
|
undefined8 *puVar5;
|
|
undefined8 *puVar6;
|
|
ulong uVar7;
|
|
long in_FS_OFFSET;
|
|
long local_48;
|
|
long local_40;
|
|
|
|
local_40 = *(long *)(in_FS_OFFSET + 0x28);
|
|
local_48 = 0;
|
|
if (_g_VProfProfilesRunningCount != 0) {
|
|
local_48 = FUN_00218c20("CUtlStringBuilder::InternalPrepareBuffer",0x14,&local_48);
|
|
}
|
|
uVar7 = (ulong)*(byte *)((long)param_1 + 0x17);
|
|
if ((char)*(byte *)((long)param_1 + 0x17) < '\0') {
|
|
if (param_4 <= *(uint *)((long)param_1 + 0xc)) {
|
|
LAB_0038fe10:
|
|
cVar4 = FUN_00218ab0("../tier1/utlstring.cpp",0x25d,"nMinCapacity > Capacity()");
|
|
if ((cVar4 == '\0') && (cVar4 = FUN_00218b70(), cVar4 != '\0')) {
|
|
pcVar3 = (code *)swi(3);
|
|
puVar5 = (undefined8 *)(*pcVar3)();
|
|
return puVar5;
|
|
}
|
|
}
|
|
if (param_4 < param_2) {
|
|
LAB_0038fd83:
|
|
cVar4 = FUN_00218ab0("../tier1/utlstring.cpp",0x25e,"nMinCapacity >= nChars");
|
|
if ((cVar4 == '\0') && (cVar4 = FUN_00218b70(), cVar4 != '\0')) {
|
|
pcVar3 = (code *)swi(3);
|
|
puVar5 = (undefined8 *)(*pcVar3)();
|
|
return puVar5;
|
|
}
|
|
}
|
|
if (0x7fffffff < param_4) goto LAB_0038fe48;
|
|
bVar1 = *(byte *)((long)param_1 + 0x17);
|
|
uVar7 = (ulong)bVar1;
|
|
if (param_4 < 0x18) {
|
|
*(char *)((long)param_1 + 0x17) = '\x17' - (char)param_2;
|
|
puVar5 = param_1;
|
|
if ((char)bVar1 < '\0') {
|
|
uVar2 = *param_1;
|
|
if (param_3 != '\0') {
|
|
FUN_002197d0(param_1,uVar2,param_2);
|
|
}
|
|
(**(code **)(*_g_pMemAllocSteam + 0x20))(_g_pMemAllocSteam,uVar2,0);
|
|
}
|
|
LAB_0038fd34:
|
|
*(undefined1 *)((long)puVar5 + param_2) = 0;
|
|
goto LAB_0038fd3a;
|
|
}
|
|
if (param_2 < param_4) {
|
|
if (-1 < (char)bVar1) goto LAB_0038fed7;
|
|
LAB_0038fdd1:
|
|
puVar6 = (undefined8 *)*param_1;
|
|
if (param_3 == '\0') {
|
|
uVar7 = (ulong)*(uint *)(param_1 + 1);
|
|
(**(code **)(*_g_pMemAllocSteam + 0x20))(_g_pMemAllocSteam,puVar6,0);
|
|
goto LAB_0038feea;
|
|
}
|
|
puVar5 = (undefined8 *)
|
|
(**(code **)(*_g_pMemAllocSteam + 0x30))
|
|
(_g_pMemAllocSteam,puVar6,param_4 + 1,"../tier1/utlstring.cpp",0x285,0);
|
|
if (puVar5 != (undefined8 *)0x0) goto LAB_0038ff29;
|
|
}
|
|
else {
|
|
param_4 = (param_2 >> 1) + 0x20;
|
|
if (1000000 < param_4) {
|
|
param_4 = 1000000;
|
|
}
|
|
param_4 = param_4 + param_2;
|
|
if ((char)bVar1 < '\0') goto LAB_0038fdd1;
|
|
LAB_0038fed7:
|
|
uVar7 = 0x17 - uVar7;
|
|
puVar6 = param_1;
|
|
LAB_0038feea:
|
|
puVar5 = (undefined8 *)
|
|
(**(code **)(*_g_pMemAllocSteam + 0x28))
|
|
(_g_pMemAllocSteam,param_4 + 1,"../tier1/utlstring.cpp",0x295,0,0);
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
if (param_3 != '\0') {
|
|
FUN_002197d0(puVar5,puVar6,uVar7);
|
|
}
|
|
LAB_0038ff29:
|
|
*(undefined1 *)((long)puVar5 + param_4) = 0;
|
|
*param_1 = puVar5;
|
|
param_1[1] = CONCAT44((int)param_4,(int)param_2);
|
|
*(undefined1 *)((long)param_1 + 0x17) = 0x80;
|
|
goto LAB_0038fd34;
|
|
}
|
|
}
|
|
FUN_0038f690(param_1,1);
|
|
}
|
|
else {
|
|
if (param_4 < 0x18) goto LAB_0038fe10;
|
|
if (param_4 < param_2) goto LAB_0038fd83;
|
|
if (param_4 < 0x80000000) {
|
|
if (param_4 <= param_2) {
|
|
param_4 = (param_2 >> 1) + 0x20;
|
|
if (1000000 < param_4) {
|
|
param_4 = 1000000;
|
|
}
|
|
param_4 = param_4 + param_2;
|
|
}
|
|
goto LAB_0038fed7;
|
|
}
|
|
LAB_0038fe48:
|
|
cVar4 = FUN_00218ab0("../tier1/utlstring.cpp",0x261,"nMinCapacity <= k_nMaxStringSize");
|
|
if ((cVar4 == '\0') && (cVar4 = FUN_00218b70(), cVar4 != '\0')) {
|
|
pcVar3 = (code *)swi(3);
|
|
puVar5 = (undefined8 *)(*pcVar3)();
|
|
return puVar5;
|
|
}
|
|
if ((-1 < (char)*(byte *)((long)param_1 + 0x17)) ||
|
|
((*(byte *)((long)param_1 + 0x17) & 0x40) == 0)) {
|
|
cVar4 = FUN_00218ab0("../tier1/utlstring.cpp",0x557,"Error State on string being set.");
|
|
if ((cVar4 == '\0') && (cVar4 = FUN_00218b70(), cVar4 != '\0')) {
|
|
pcVar3 = (code *)swi(3);
|
|
puVar5 = (undefined8 *)(*pcVar3)();
|
|
return puVar5;
|
|
}
|
|
FUN_0038f890(param_1);
|
|
*(undefined1 *)((long)param_1 + 0x17) = 0xc0;
|
|
}
|
|
}
|
|
puVar5 = (undefined8 *)0x0;
|
|
LAB_0038fd3a:
|
|
if (local_48 != 0) {
|
|
FUN_00218c00();
|
|
}
|
|
if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_00219340();
|
|
}
|
|
return puVar5;
|
|
}
|
|
|
|
|