wcstoxlX
INT64 __stdcall wcstoxlX(
localeinfo_struct *plocinfo,
WCHAR *nptr,
WCHAR **endptr,
INT64 ibase,
INT64 flags,
INT64 AllowOverflow){
unsigned int v6;
WCHAR v8;
WCHAR *v9;
unsigned int v10;
int v11;
unsigned int v12;
unsigned int v13;
int v14;
WCHAR *v15;
INT64 result;
v6 = ibase;
if( endptr )
*endptr = nptr;
if( !nptr || (_DWORD)ibase && (unsigned int)(ibase - 2) > 0x22 )
{
xHalTimerWatchdogStop(0i64, 0i64);
return 0i64;
}
v8 = *nptr;
v9 = nptr + 1;
v10 = 0;
while( iswctype_l(v8, 8u, 0i64) )
v8 = *v9++;
v11 = flags;
if( v8 == 45 )
{
v11 = flags | 2;
}
else if( v8 != 43 )
{
goto LABEL_13;
}
v8 = *v9++;
LABEL_13:
if( v6 )
goto LABEL_19;
if( !(unsigned int)wchartodigit(v8) )
{
if( ((*v9 - 88) & 0xFFDF) != 0 )
{
v6 = 8;
goto LABEL_23;
}
v6 = 16;
LABEL_19:
if( v6 == 16 && !(unsigned int)wchartodigit(v8) && ((*v9 - 88) & 0xFFDF) == 0 )
{
v8 = v9[1];
v9 += 2;
}
goto LABEL_23;
}
v6 = 10;
LABEL_23:
v12 = 0xFFFFFFFF / v6;
while( 1 )
{
v13 = wchartodigit(v8);
if( v13 != -1 )
goto LABEL_30;
if( (unsigned __int16)(v8 - 65) > 0x19u && (unsigned __int16)(v8 - 97) > 0x19u )
break;
v14 = v8 - 32;
if( (unsigned __int16)(v8 - 97) > 0x19u )
v14 = v8;
v13 = v14 - 55;
LABEL_30:
if( v13 >= v6 )
break;
v11 |= 8u;
if( (_DWORD)AllowOverflow || v10 < v12 || v10 == v12 && v13 <= 0xFFFFFFFF % v6 )
{
v10 = v13 + v6 * v10;
}
else
{
v11 |= 4u;
if( !endptr )
break;
}
v8 = *v9++;
}
v15 = v9 - 1;
if( (v11 & 8) != 0 )
{
if( (v11 & 4) == 0 )
{
if( (v11 & 1) != 0 )
goto LABEL_52;
if( (v11 & 2) != 0 )
{
if( v10 <= 0x80000000 )
goto LABEL_52;
}
else if( v10 <= 0x7FFFFFFF )
{
goto LABEL_52;
}
}
if( !(_DWORD)AllowOverflow )
{
gbl_errno = 34;
if( (v11 & 1) != 0 )
v10 = -1;
else
v10 = ((v11 & 2) != 0) + 0x7FFFFFFF;
}
}
else
{
if( endptr )
v15 = nptr;
v10 = 0;
}
LABEL_52:
if( endptr )
*endptr = v15;
result = -v10;
if( (v11 & 2) == 0 )
return v10;
return result;
}Referenced by:
wcstol
wcstolX
wcstoul