From 3bb73eacfc458957da1e5863d497f0bda5c41438 Mon Sep 17 00:00:00 2001 From: Colin Davidson Date: Wed, 20 Nov 2024 12:09:32 -0800 Subject: [PATCH 1/3] fix parsing issue around utc/localtime split --- core/time/timezone/tzif.odin | 17 +++++++---------- tests/core/time/test_core_time.odin | 10 ++++++++++ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/core/time/timezone/tzif.odin b/core/time/timezone/tzif.odin index 609cbda73..bd93f6bb6 100644 --- a/core/time/timezone/tzif.odin +++ b/core/time/timezone/tzif.odin @@ -536,24 +536,21 @@ parse_tzif :: proc(_buffer: []u8, region_name: string, allocator := context.allo buffer = buffer[(int(real_hdr.leapcnt) * size_of(Leapsecond_Record)):] standard_wall_tags := buffer[:int(real_hdr.isstdcnt)] - buffer = buffer[int(real_hdr.isstdcnt):] - - ut_tags := buffer[:int(real_hdr.isutcnt)] - for stdwall_tag, idx in standard_wall_tags { - ut_tag := ut_tags[idx] - if (stdwall_tag != 0 && stdwall_tag != 1) { return } + } + + buffer = buffer[int(real_hdr.isstdcnt):] + + ut_tags := buffer[:int(real_hdr.isutcnt)] + for ut_tag, idx in ut_tags { if (ut_tag != 0 && ut_tag != 1) { return } - - if ut_tag == 1 && stdwall_tag != 1 { - return - } } + buffer = buffer[int(real_hdr.isutcnt):] // Start of footer diff --git a/tests/core/time/test_core_time.odin b/tests/core/time/test_core_time.odin index 3bd4c3151..b72f57387 100644 --- a/tests/core/time/test_core_time.odin +++ b/tests/core/time/test_core_time.odin @@ -574,4 +574,14 @@ test_check_timezone_edgecases :: proc(t: ^testing.T) { expected_tok_dt, _ := dt.components_to_datetime(2024, 10, 4, 9, 47, 0) testing.expectf(t, datetime_eq(ret_dt, expected_tok_dt), "Failed to convert to Tokyo time") + + + tog_tz, tog_load_ok := tz.region_load("Pacific/Tongatapu") + testing.expectf(t, tog_load_ok, "Failed to load Pacific/Tongatapu timezone") + defer tz.region_destroy(tog_tz) + + ret_dt = tz.datetime_to_tz(utc_dt, tog_tz) + expected_tog_dt, _ := dt.components_to_datetime(2024, 10, 4, 9, 47, 0) + + testing.expectf(t, datetime_eq(ret_dt, expected_tog_dt), "Failed to convert to Togatapu time") } From da3a7a25c7ef3dd08600355d416e07c6049776a7 Mon Sep 17 00:00:00 2001 From: Colin Davidson Date: Wed, 20 Nov 2024 14:07:23 -0800 Subject: [PATCH 2/3] oops --- core/time/timezone/tzif.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/time/timezone/tzif.odin b/core/time/timezone/tzif.odin index bd93f6bb6..3fec7be53 100644 --- a/core/time/timezone/tzif.odin +++ b/core/time/timezone/tzif.odin @@ -536,7 +536,7 @@ parse_tzif :: proc(_buffer: []u8, region_name: string, allocator := context.allo buffer = buffer[(int(real_hdr.leapcnt) * size_of(Leapsecond_Record)):] standard_wall_tags := buffer[:int(real_hdr.isstdcnt)] - for stdwall_tag, idx in standard_wall_tags { + for stdwall_tag, _ in standard_wall_tags { if (stdwall_tag != 0 && stdwall_tag != 1) { return } @@ -545,7 +545,7 @@ parse_tzif :: proc(_buffer: []u8, region_name: string, allocator := context.allo buffer = buffer[int(real_hdr.isstdcnt):] ut_tags := buffer[:int(real_hdr.isutcnt)] - for ut_tag, idx in ut_tags { + for ut_tag, _ in ut_tags { if (ut_tag != 0 && ut_tag != 1) { return } From f8586d00517c94e128aff8d0f081f5cca646a23e Mon Sep 17 00:00:00 2001 From: Colin Davidson Date: Wed, 20 Nov 2024 15:33:20 -0800 Subject: [PATCH 3/3] oops, copy-paste-bug --- tests/core/time/test_core_time.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/core/time/test_core_time.odin b/tests/core/time/test_core_time.odin index b72f57387..cd2b19fb8 100644 --- a/tests/core/time/test_core_time.odin +++ b/tests/core/time/test_core_time.odin @@ -581,7 +581,7 @@ test_check_timezone_edgecases :: proc(t: ^testing.T) { defer tz.region_destroy(tog_tz) ret_dt = tz.datetime_to_tz(utc_dt, tog_tz) - expected_tog_dt, _ := dt.components_to_datetime(2024, 10, 4, 9, 47, 0) + expected_tog_dt, _ := dt.components_to_datetime(2024, 10, 4, 13, 47, 0) testing.expectf(t, datetime_eq(ret_dt, expected_tog_dt), "Failed to convert to Togatapu time") }