mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 13:58:40 +00:00
fix treatment of octal strings in try_u64/s64_from_str8_c_rules
This commit is contained in:
+19
-13
@@ -603,44 +603,50 @@ s32_from_str8(String8 string, U32 radix)
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
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;
|
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;
|
is_integer = 1;
|
||||||
*x = u64_from_str8(string, 10);
|
*x = u64_from_str8(string, 10);
|
||||||
}
|
}
|
||||||
else{
|
else
|
||||||
|
{
|
||||||
String8 hex_string = str8_skip(string, 2);
|
String8 hex_string = str8_skip(string, 2);
|
||||||
if (str8_match(str8_prefix(string, 2), str8_lit("0x"), 0) &&
|
if(str8_match(str8_prefix(string, 2), str8_lit("0x"), 0) &&
|
||||||
str8_is_integer(hex_string, 0x10)){
|
str8_is_integer(hex_string, 0x10))
|
||||||
|
{
|
||||||
is_integer = 1;
|
is_integer = 1;
|
||||||
*x = u64_from_str8(hex_string, 0x10);
|
*x = u64_from_str8(hex_string, 0x10);
|
||||||
}
|
}
|
||||||
else if (str8_match(str8_prefix(string, 2), str8_lit("0b"), 0) &&
|
else if(str8_match(str8_prefix(string, 2), str8_lit("0b"), 0) && str8_is_integer(hex_string, 2))
|
||||||
str8_is_integer(hex_string, 2)){
|
{
|
||||||
is_integer = 1;
|
is_integer = 1;
|
||||||
*x = u64_from_str8(hex_string, 2);
|
*x = u64_from_str8(hex_string, 2);
|
||||||
}
|
}
|
||||||
else{
|
else
|
||||||
|
{
|
||||||
String8 oct_string = str8_skip(string, 1);
|
String8 oct_string = str8_skip(string, 1);
|
||||||
if (str8_match(str8_prefix(string, 1), str8_lit("0"), 0) &&
|
if(str8_match(str8_prefix(string, 1), str8_lit("0"), 0) && str8_is_integer(hex_string, 010))
|
||||||
str8_is_integer(hex_string, 010)){
|
{
|
||||||
is_integer = 1;
|
is_integer = 1;
|
||||||
*x = u64_from_str8(oct_string, 010);
|
*x = u64_from_str8(oct_string, 010);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return(is_integer);
|
return is_integer;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
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};
|
String8 string_tail = {0};
|
||||||
S64 sign = sign_from_str8(string, &string_tail);
|
S64 sign = sign_from_str8(string, &string_tail);
|
||||||
U64 x_u64 = 0;
|
U64 x_u64 = 0;
|
||||||
B32 is_integer = try_u64_from_str8_c_rules(string_tail, &x_u64);
|
B32 is_integer = try_u64_from_str8_c_rules(string_tail, &x_u64);
|
||||||
*x = x_u64*sign;
|
*x = x_u64*sign;
|
||||||
return(is_integer);
|
return is_integer;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: integer -> string
|
//- rjf: integer -> string
|
||||||
|
|||||||
Reference in New Issue
Block a user