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