strtoxlX
UINT64 __stdcall strtoxlX(
localeinfo_struct *plocinfo,
PSTR nptr,
PSTR *endptr,
INT64 ibase,
INT64 flags,
INT64 AllowOverFlow){
unsigned int v6;
__int64 v9;
PSTR v10;
unsigned int i;
int v12;
unsigned int v13;
unsigned int v14;
int v15;
CHAR *v16;
UINT64 result;
v6 = ibase;
if( endptr )
*endptr = nptr;
if( !nptr || (_DWORD)ibase && (unsigned int)(ibase - 2) > 0x22 )
{
xHalTimerWatchdogStop(0i64, 0i64);
return 0i64;
}
v9 = (unsigned __int8)*nptr;
v10 = nptr + 1;
for( i = 0; (_pctype_func()[v9] & 8) != 0; ++v10 )
v9 = (unsigned __int8)*v10;
v12 = flags;
if( (_BYTE)v9 == 45 )
{
v12 = flags | 2;
}
else if( (_BYTE)v9 != 43 )
{
goto LABEL_12;
}
LOBYTE(v9) = *v10++;
LABEL_12:
if( v6 )
{
if( v6 - 2 > 0x22 )
{
if( endptr )
*endptr = nptr;
return 0i64;
}
if( v6 == 16 && (_BYTE)v9 == 48 )
goto LABEL_24;
}
else if( (_BYTE)v9 == 48 )
{
if( ((*v10 - 88) & 0xDF) == 0 )
{
v6 = 16;
LABEL_24:
if( ((*v10 - 88) & 0xDF) == 0 )
{
LOBYTE(v9) = v10[1];
v10 += 2;
}
goto LABEL_26;
}
v6 = 8;
}
else
{
v6 = 10;
}
LABEL_26:
v13 = 0xFFFFFFFF / v6;
while( 1 )
{
if( (_pctype_func()[(unsigned __int8)v9] & 4) != 0 )
{
v14 = (char)v9 - 48;
}
else
{
if( (_pctype_func()[(unsigned __int8)v9] & 0x103) == 0 )
break;
v15 = (char)v9 - 32;
if( (unsigned __int8)(v9 - 97) > 0x19u )
v15 = (char)v9;
v14 = v15 - 55;
}
if( v14 >= v6 )
break;
v12 |= 8u;
if( (_DWORD)AllowOverFlow || i < v13 || i == v13 && v14 <= 0xFFFFFFFF % v6 )
{
i = v14 + v6 * i;
}
else
{
v12 |= 4u;
if( !endptr )
break;
}
LOBYTE(v9) = *v10++;
}
v16 = v10 - 1;
if( (v12 & 8) == 0 )
{
if( endptr )
v16 = nptr;
i = 0;
goto LABEL_55;
}
if( (v12 & 4) != 0 )
goto LABEL_51;
if( (v12 & 1) == 0 )
{
if( (v12 & 2) != 0 )
{
if( i <= 0x80000000 )
goto LABEL_55;
LABEL_51:
if( !(_DWORD)AllowOverFlow )
{
gbl_errno = 34;
if( (v12 & 1) != 0 )
i = -1;
else
i = ((v12 & 2) != 0) + 0x7FFFFFFF;
}
goto LABEL_55;
}
if( i > 0x7FFFFFFF )
goto LABEL_51;
}
LABEL_55:
if( endptr )
*endptr = v16;
result = -i;
if( (v12 & 2) == 0 )
return i;
return result;
}Referenced by:
strtol
strtolX
strtoul