mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
fix bad 0.9.16 version check in config loading; helpers for building version codes, so they can be compared
This commit is contained in:
@@ -65,6 +65,14 @@
|
||||
# define C_LINKAGE
|
||||
#endif
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Versions
|
||||
|
||||
#define Version(major, minor, patch) (U64)((((U64)(major) & 0xffff) << 32) | ((((U64)(minor) & 0xffff) << 16)) | ((((U64)(patch) & 0xffff) << 0)))
|
||||
#define MajorFromVersion(version) (((version) & 0xffff00000000ull) >> 32)
|
||||
#define MinorFromVersion(version) (((version) & 0x0000ffff0000ull) >> 16)
|
||||
#define PatchFromVersion(version) (((version) & 0x00000000ffffull) >> 0)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Units
|
||||
|
||||
|
||||
@@ -1187,6 +1187,41 @@ str8_array_copy(Arena *arena, String8Array array)
|
||||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String Version Helpers
|
||||
|
||||
internal U64
|
||||
version_from_str8(String8 string)
|
||||
{
|
||||
U64 result = 0;
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
U64 version_major = 0;
|
||||
U64 version_minor = 0;
|
||||
U64 version_patch = 0;
|
||||
String8List version_parts = str8_split(scratch.arena, string, (U8 *)".", 1, 0);
|
||||
if(version_parts.first &&
|
||||
version_parts.first->next &&
|
||||
version_parts.first->next->next)
|
||||
{
|
||||
try_u64_from_str8_c_rules(version_parts.first->string, &version_major);
|
||||
try_u64_from_str8_c_rules(version_parts.first->next->string, &version_minor);
|
||||
try_u64_from_str8_c_rules(version_parts.first->next->next->string, &version_patch);
|
||||
result = Version(version_major, version_minor, version_patch);
|
||||
}
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
str8_from_version(Arena *arena, U64 version)
|
||||
{
|
||||
U64 version_major = MajorFromVersion(version);
|
||||
U64 version_minor = MinorFromVersion(version);
|
||||
U64 version_patch = PatchFromVersion(version);
|
||||
String8 result = push_str8f(arena, "%I64d.%I64d.%I64d", version_major, version_minor, version_patch);
|
||||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String Path Helpers
|
||||
|
||||
|
||||
@@ -293,6 +293,12 @@ internal String8Array str8_array_from_list(Arena *arena, String8List *list);
|
||||
internal String8Array str8_array_reserve(Arena *arena, U64 count);
|
||||
internal String8Array str8_array_copy(Arena *arena, String8Array array);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String Version Helpers
|
||||
|
||||
internal U64 version_from_str8(String8 string);
|
||||
internal String8 str8_from_version(Arena *arena, U64 version);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String Path Helpers
|
||||
|
||||
|
||||
@@ -12825,8 +12825,8 @@ rd_frame(void)
|
||||
RD_CfgList file_cfg_list = {0};
|
||||
if(file_is_okay)
|
||||
{
|
||||
String8 current_version = str8_lit(BUILD_VERSION_STRING_LITERAL);
|
||||
if(!str8_match(file_version, current_version, 0))
|
||||
U64 file_version_code = version_from_str8(file_version);
|
||||
if(file_version_code < Version(0, 9, 16))
|
||||
{
|
||||
RD_CfgList (*legacy_parse_function)(Arena *arena, String8 file_path, String8 data) = rd_cfg_tree_list_from_string__pre_0_9_16;
|
||||
file_cfg_list = legacy_parse_function(scratch.arena, file_path, file_data);
|
||||
|
||||
Reference in New Issue
Block a user