Merge pull request #135 from mknos/str2i64_forever

Str2I64(): rewrite radix detection loop as while
This commit is contained in:
Arsenic Blood 2023-10-31 13:16:56 -04:00 committed by GitHub
commit ea49d4aaf2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -15,24 +15,19 @@ I64 Str2I64(U8 *st, I64 radix=10, U8 **_end_ptr=NULL)
st++; st++;
if (*st == '+' || *st == '-') if (*st == '+' || *st == '-')
neg = *st++ == '-'; neg = *st++ == '-';
while (TRUE) while (*st == '0')
switch (*st) {
{ st++;
case '0': ch = ToUpper(*st);
st++; if (ch >= 'B' && (radix <= 10 || ch > 'A' + radix - 11))
ch = ToUpper(*st); switch (ch)
if (ch >= 'B' && (radix <= 10 || ch > 'A' + radix - 11)) {
switch (ch) case 'B': radix = 2; st++; break;
{ case 'O': radix = 8; st++; break;
case 'B': radix = 2; st++; break; case 'D': radix = 10; st++; break;
case 'O': radix = 8; st++; break; case 'X': radix = 16; st++; break;
case 'D': radix = 10; st++; break; }
case 'X': radix = 16; st++; break; }
}
default:
goto ai_cont;
}
ai_cont:
while (ch = ToUpper(*st++)) while (ch = ToUpper(*st++))
{ {
if (radix > 10) if (radix > 10)