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
+15 -11
View File
@@ -163,16 +163,20 @@ 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)
for section in &catalog.k_v { if catalog == nil {
for key in &catalog.k_v[section] { return
delete(catalog.k_v[section][key])
}
delete(catalog.k_v[section])
}
delete(catalog.k_v)
free(catalog)
} }
for section in &catalog.k_v {
for key in &catalog.k_v[section] {
delete(catalog.k_v[section][key])
}
delete(catalog.k_v[section])
}
delete(catalog.k_v)
strings.intern_destroy(&catalog.intern)
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
+9 -9
View File
@@ -10,13 +10,13 @@
</message> </message>
</context> </context>
<context> <context>
<name>apple_count</name> <name>apple_count</name>
<message numerus="yes"> <message numerus="yes">
<source>%d apple(s)</source> <source>%d apple(s)</source>
<translation> <translation>
<numerusform>%d appel</numerusform> <numerusform>%d appel</numerusform>
<numerusform>%d appels</numerusform> <numerusform>%d appels</numerusform>
</translation> </translation>
</message> </message>
</context> </context>
</TS> </TS>