wcstoxq
UINT64 __fastcall wcstoxq(
localeinfo_struct *plocinfo,
WCHAR *nptr,
WCHAR **endptr,
INT64 ibase,
INT64 flags,
INT64 *error){
int v6;
unsigned __int16 v9;
WCHAR *v10;
UINT64 v11;
WCHAR i;
int v13;
unsigned __int64 v14;
unsigned int v15;
int v16;
__int64 v17;
WCHAR *v18;
UINT64 result;
v6 = ibase;
if( endptr )
*endptr = nptr;
if( !nptr || (_DWORD)ibase && (unsigned int)(ibase - 2) > 0x22 )
{
xHalTimerWatchdogStop(0i64, 0i64);
return 0i64;
}
v9 = *nptr;
v10 = nptr + 1;
v11 = 0i64;
for( i = *nptr; iswctype_l(i, 8u, 0i64); v9 = i )
{
do
i = *v10++;
while( i == v9 );
}
v13 = flags;
if( v9 == 45 )
{
v13 = flags | 2;
LABEL_13:
v9 = *v10++;
goto LABEL_14;
}
if( v9 == 43 )
goto LABEL_13;
LABEL_14:
if( v6 && (unsigned int)(v6 - 2) > 0x22 )
{
if( endptr )
*endptr = nptr;
return 0i64;
}
if( v6 )
goto LABEL_24;
if( !(unsigned int)wchartodigit(v9) )
{
if( ((*v10 - 88) & 0xFFDF) != 0 )
{
v6 = 8;
goto LABEL_28;
}
v6 = 16;
LABEL_24:
if( v6 == 16 && !(unsigned int)wchartodigit(v9) && ((*v10 - 88) & 0xFFDF) == 0 )
{
v9 = v10[1];
v10 += 2;
}
goto LABEL_28;
}
v6 = 10;
LABEL_28:
v14 = 0xFFFFFFFFFFFFFFFFui64 / v6;
while( 1 )
{
v15 = wchartodigit(v9);
if( v15 != -1 )
goto LABEL_35;
if( (unsigned __int16)(v9 - 65) > 0x19u && (unsigned __int16)(v9 - 97) > 0x19u )
break;
v16 = v9 - 32;
if( (unsigned __int16)(v9 - 97) > 0x19u )
v16 = v9;
v15 = v16 - 55;
LABEL_35:
if( v15 >= v6 )
break;
v13 |= 8u;
if( v11 < v14 )
{
v17 = v15;
LABEL_45:
v11 = v17 + v6 * v11;
goto LABEL_46;
}
if( v11 == v14 )
{
v17 = v15;
if( v15 <= 0xFFFFFFFFFFFFFFFFui64 % v6 )
goto LABEL_45;
}
v13 |= 4u;
if( !endptr )
break;
LABEL_46:
v9 = *v10++;
}
v18 = v10 - 1;
if( (v13 & 8) != 0 )
{
if( (v13 & 4) == 0 )
{
if( (v13 & 1) != 0 )
goto LABEL_59;
if( (v13 & 2) != 0 )
{
if( v11 <= 0x8000000000000000ui64 )
goto LABEL_59;
}
else if( v11 <= 0x7FFFFFFFFFFFFFFFi64 )
{
goto LABEL_59;
}
}
if( error )
*(_DWORD *)error = 34;
else
gbl_errno = 34;
if( (v13 & 1) != 0 )
v11 = -1i64;
else
v11 = ((v13 & 2) != 0) + 0x7FFFFFFFFFFFFFFFi64;
}
else
{
if( endptr )
v18 = nptr;
v11 = 0i64;
}
LABEL_59:
if( endptr )
*endptr = v18;
result = -(__int64)v11;
if( (v13 & 2) == 0 )
return v11;
return result;
}Referenced by:
GetOperandValue
LocalGetRelativeAttributeForString
LocalpConvertStringSidToSid
RtlUnicodeStringToInt64