fix treatment of octal strings in try_u64/s64_from_str8_c_rules

This commit is contained in:
Ryan Fleury
2025-05-20 14:10:34 -07:00
parent 95dbba1144
commit 2f5082fb61
+19 -13
View File
@@ -603,44 +603,50 @@ s32_from_str8(String8 string, U32 radix)
}
internal B32
try_u64_from_str8_c_rules(String8 string, U64 *x){
try_u64_from_str8_c_rules(String8 string, U64 *x)
{
B32 is_integer = 0;
if (str8_is_integer(string, 10)){
if(str8_is_integer(string, 10) && !str8_match(str8_prefix(string, 1), str8_lit("0"), 0))
{
is_integer = 1;
*x = u64_from_str8(string, 10);
}
else{
else
{
String8 hex_string = str8_skip(string, 2);
if (str8_match(str8_prefix(string, 2), str8_lit("0x"), 0) &&
str8_is_integer(hex_string, 0x10)){
if(str8_match(str8_prefix(string, 2), str8_lit("0x"), 0) &&
str8_is_integer(hex_string, 0x10))
{
is_integer = 1;
*x = u64_from_str8(hex_string, 0x10);
}
else if (str8_match(str8_prefix(string, 2), str8_lit("0b"), 0) &&
str8_is_integer(hex_string, 2)){
else if(str8_match(str8_prefix(string, 2), str8_lit("0b"), 0) && str8_is_integer(hex_string, 2))
{
is_integer = 1;
*x = u64_from_str8(hex_string, 2);
}
else{
else
{
String8 oct_string = str8_skip(string, 1);
if (str8_match(str8_prefix(string, 1), str8_lit("0"), 0) &&
str8_is_integer(hex_string, 010)){
if(str8_match(str8_prefix(string, 1), str8_lit("0"), 0) && str8_is_integer(hex_string, 010))
{
is_integer = 1;
*x = u64_from_str8(oct_string, 010);
}
}
}
return(is_integer);
return is_integer;
}
internal B32
try_s64_from_str8_c_rules(String8 string, S64 *x){
try_s64_from_str8_c_rules(String8 string, S64 *x)
{
String8 string_tail = {0};
S64 sign = sign_from_str8(string, &string_tail);
U64 x_u64 = 0;
B32 is_integer = try_u64_from_str8_c_rules(string_tail, &x_u64);
*x = x_u64*sign;
return(is_integer);
return is_integer;
}
//- rjf: integer -> string