Merge pull request #1754 from Kelimion/i18n

[i18n] Fix segfault on cleanup on Linux
This commit is contained in:
Jeroen van Rijn
2022-04-29 18:20:54 +02:00
committed by GitHub
4 changed files with 33 additions and 23 deletions
+8 -4
View File
@@ -163,9 +163,13 @@ get_by_slot :: proc{get_by_slot_single_section, get_by_slot_by_section}
- destroy(), to clean up the currently active catalog catalog i18n.ACTIVE - destroy(), to clean up the currently active catalog catalog i18n.ACTIVE
- destroy(catalog), to clean up a specific catalog. - destroy(catalog), to clean up a specific catalog.
*/ */
destroy :: proc(catalog: ^Translation = ACTIVE) { destroy :: proc(catalog: ^Translation = ACTIVE, allocator := context.allocator) {
if catalog != nil { context.allocator = allocator
strings.intern_destroy(&catalog.intern)
if catalog == nil {
return
}
for section in &catalog.k_v { for section in &catalog.k_v {
for key in &catalog.k_v[section] { for key in &catalog.k_v[section] {
delete(catalog.k_v[section][key]) delete(catalog.k_v[section][key])
@@ -173,6 +177,6 @@ destroy :: proc(catalog: ^Translation = ACTIVE) {
delete(catalog.k_v[section]) delete(catalog.k_v[section])
} }
delete(catalog.k_v) delete(catalog.k_v)
strings.intern_destroy(&catalog.intern)
free(catalog) free(catalog)
} }
}
+4 -1
View File
@@ -59,7 +59,10 @@ parse_qt_linguist_from_slice :: proc(data: []u8, options := DEFAULT_PARSE_OPTION
return translation, .TS_File_Expected_Context_Name, return translation, .TS_File_Expected_Context_Name,
} }
section_name := "" if options.merge_sections else ts.elements[section_name_id].value section_name := strings.intern_get(&translation.intern, "")
if !options.merge_sections {
section_name = strings.intern_get(&translation.intern, ts.elements[section_name_id].value)
}
if section_name not_in translation.k_v { if section_name not_in translation.k_v {
translation.k_v[section_name] = {} translation.k_v[section_name] = {}
+4 -1
View File
@@ -2,7 +2,7 @@ ODIN=../../odin
PYTHON=$(shell which python3) PYTHON=$(shell which python3)
all: download_test_assets image_test compress_test strings_test hash_test crypto_test noise_test encoding_test \ all: download_test_assets image_test compress_test strings_test hash_test crypto_test noise_test encoding_test \
math_test linalg_glsl_math_test filepath_test reflect_test os_exit_test math_test linalg_glsl_math_test filepath_test reflect_test os_exit_test i18n_test
download_test_assets: download_test_assets:
$(PYTHON) download_assets.py $(PYTHON) download_assets.py
@@ -45,3 +45,6 @@ reflect_test:
os_exit_test: os_exit_test:
$(ODIN) run os/test_core_os_exit.odin -file -out:test_core_os_exit && exit 1 || exit 0 $(ODIN) run os/test_core_os_exit.odin -file -out:test_core_os_exit && exit 1 || exit 0
i18n_test:
$(ODIN) run text/i18n -out:test_core_i18n