Files

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;
}