int sobj_xstream_read_tokens(undefined4 param_1,int param_2,char param_3,char *param_4)
{
char cVar1;
bool bVar2;
int iVar3;
int iVar4;
int *piVar5;
int iVar6;
int *piVar7;
char *pcVar8;
int iVar9;
undefined1 auStack_38 [8];
undefined1 *local_30;
iVar3 = sobj_new();
iVar9 = (int)param_3;
if (iVar3 != 0) {
iVar4 = sobj_add_string(iVar3,param_4);
if ((iVar4 < 0) || ((iVar9 != 0 && (iVar4 = sobj_add_char(iVar3,iVar9), iVar4 < 0)))) {
iVar4 = 0;
LAB_0041f3e8:
bVar2 = true;
}
else {
local_30 = auStack_38;
iVar4 = 0;
do {
piVar5 = (int *)sobj_new();
if (piVar5 == (int *)0x0) goto LAB_0041f3e8;
sobj_xstream_eatwhite(param_1);
pcVar8 = *(char **)(iVar3 + 0x14);
if (pcVar8 == (char *)0x0) {
pcVar8 = "";
}
iVar4 = sobj_xstream_read(param_1,piVar5,pcVar8,local_30) //possible issue identified - semgrep
if (iVar4 == 0) {
LAB_0041f3d4:
sobj_del(piVar5);
bVar2 = true;
break;
}
if (piVar5[4] == 0) {
sobj_del(piVar5);
}
else {
piVar7 = *(int **)(param_2 + 4);
*piVar5 = param_2;
*(int **)(param_2 + 4) = piVar5;
*piVar7 = (int)piVar5;
piVar5[1] = (int)piVar7;
}
bVar2 = false;
if (iVar4 == iVar9) break;
pcVar8 = param_4;
if (param_4 != (char *)0x0) {
do {
cVar1 = *pcVar8;
if (cVar1 == '\0') goto LAB_0041f374;
pcVar8 = pcVar8 + 1;
} while (cVar1 != (char)iVar4);
piVar5 = (int *)sobj_new();
if (piVar5 == (int *)0x0) goto LAB_0041f3e8;
iVar6 = sobj_add_char(piVar5,iVar4);
if (iVar6 < 0) goto LAB_0041f3d4;
piVar7 = *(int **)(param_2 + 4);
*piVar5 = param_2;
*(int **)(param_2 + 4) = piVar5;
*piVar7 = (int)piVar5;
piVar5[1] = (int)piVar7;
}
LAB_0041f374:
bVar2 = false;
} while (iVar4 != -1);
}
sobj_del(iVar3);
if (!bVar2) {
return iVar4;
}
}
solist_free(param_2);
return 0;
}