[i18n] Fix segfault on destroy on Linux

Forgot to intern the section string in QT TS loader.
This commit is contained in:
Jeroen van Rijn
2022-04-29 18:10:13 +02:00
parent aa681932a9
commit ff0f0c447f
3 changed files with 28 additions and 21 deletions

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(catalog), to clean up a specific catalog.
*/
destroy :: proc(catalog: ^Translation = ACTIVE) {
if catalog != nil {
strings.intern_destroy(&catalog.intern)
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)
free(catalog)
destroy :: proc(catalog: ^Translation = ACTIVE, allocator := context.allocator) {
context.allocator = allocator
if catalog == nil {
return
}
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)
}

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,
}
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 {
translation.k_v[section_name] = {}

View File

@@ -10,13 +10,13 @@
</message>
</context>
<context>
<name>apple_count</name>
<message numerus="yes">
<source>%d apple(s)</source>
<translation>
<numerusform>%d appel</numerusform>
<numerusform>%d appels</numerusform>
</translation>
</message>
</context>
<name>apple_count</name>
<message numerus="yes">
<source>%d apple(s)</source>
<translation>
<numerusform>%d appel</numerusform>
<numerusform>%d appels</numerusform>
</translation>
</message>
</context>
</TS>