CmpGetToken
VOID __fastcall CmpGetToken(const CHAR **a1, UINT64 a2, INT64 a3){
UINT8 *i;
int v7;
INT8 *v8;
UINT8 *v9;
UINT8 *v10;
__int64 v11;
__int64 v12;
VOID **PoolWithTag;
VOID **v14;
char v15;
UINT8 *v16;
UINT8 *v17;
__int64 v18;
int v19;
*(_QWORD *)(a3 + 8) = 0i64;
*(_BYTE *)(a3 + 16) = 0;
while( 1 )
{
for( i = (UINT8 *)*a1; (unsigned __int64)i < a2 && *i != 10 && isspace(*i); ++i )
;
if( (unsigned __int64)i >= a2 )
break;
if( *i == 59 || *i == 35 )
{
do
{
if( *i == 10 )
break;
++i;
}
while( (unsigned __int64)i < a2 );
}
if( (unsigned __int64)i >= a2 )
break;
v7 = (char)*i;
if( *i == 26 )
break;
switch( v7 )
{
case 10:
*(_DWORD *)a3 = 1;
break;
case 34:
v17 = ++i;
while( (unsigned __int64)i < a2 )
{
strchr((UINT8 *)&byte_140A97E4E, *i);
if( v18 )
break;
++i;
}
if( (unsigned __int64)i < a2 && *i == 34 )
{
*i = 0;
v19 = 4;
++i;
*(_QWORD *)(a3 + 8) = v17;
}
else
{
v19 = 7;
}
*(_DWORD *)a3 = v19;
goto LABEL_29;
case 44:
*(_DWORD *)a3 = 6;
break;
case 61:
*(_DWORD *)a3 = 5;
break;
case 91:
*(_DWORD *)a3 = 2;
break;
case 92:
v16 = ++i;
if( (unsigned __int64)i < a2 )
{
do
{
if( *v16 == 10 )
break;
if( !isspace(*v16) )
break;
++v16;
}
while( (unsigned __int64)v16 < a2 );
}
if( *v16 == 59 || *v16 == 35 )
{
v16 = ++i;
if( (unsigned __int64)i < a2 )
{
do
{
if( *v16 == 10 )
break;
++v16;
}
while( (unsigned __int64)v16 < a2 );
}
}
if( (unsigned __int64)v16 < a2 )
{
if( *v16 == 10 )
{
i = v16 + 1;
v15 = 0;
goto LABEL_30;
}
LABEL_19:
v8 = (INT8 *)i;
v9 = i;
if( (unsigned __int64)i < a2 )
{
v10 = i;
do
{
v9 = v10;
strchr((UINT8 *)&StringTerminators, *i);
if( v11 )
break;
i = v10 + 1;
v10 = i;
v9 = i;
}
while( (unsigned __int64)i < a2 );
if( v9 != (UINT8 *)v8 )
{
v12 = (unsigned int)((_DWORD)i - (_DWORD)v8);
if( (int)v12 + 1 >= (unsigned int)v12
&& (PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)(v12 + 1), 1768967491i64),
(v14 = PoolWithTag) != 0i64) )
{
strncpy_s((INT8 *)PoolWithTag, (unsigned int)(v12 + 1), v8, (unsigned int)v12);
*((_BYTE *)v14 + v12) = 0;
*(_DWORD *)a3 = 4;
*(_QWORD *)(a3 + 8) = v14;
*(_BYTE *)(a3 + 16) = 1;
}
else
{
*(_DWORD *)a3 = 8;
}
goto LABEL_29;
}
}
i = v9 + 1;
}
*(_DWORD *)a3 = 7;
goto LABEL_29;
case 93:
*(_DWORD *)a3 = 3;
break;
default:
goto LABEL_19;
}
++i;
LABEL_29:
v15 = 1;
LABEL_30:
*a1 = (const CHAR *)i;
if( v15 )
return;
}
*(_DWORD *)a3 = 0;
*(_QWORD *)(a3 + 8) = 0i64;
*a1 = (const CHAR *)i;
}Referenced by:
CmpParseInfBuffer