From e2ca52a754ea3b4d236e0ba736b2277268f0d21d Mon Sep 17 00:00:00 2001 From: Albert Cervin Date: Fri, 23 Feb 2024 16:09:26 +0100 Subject: Fix language path bug Caused by previous commit --- src/dged/lang.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'src/dged/lang.c') diff --git a/src/dged/lang.c b/src/dged/lang.c index c6b33ba..4a2247c 100644 --- a/src/dged/lang.c +++ b/src/dged/lang.c @@ -57,14 +57,15 @@ void lang_destroy(struct language *lang) { } static struct language lang_from_settings(const char *id) { - struct language l; - l.id = strdup(id); // name struct setting *name = _lang_setting(id, "name"); - l.name = name != NULL ? name->value.string_value : "Unknown"; + const char *name_value = name != NULL ? name->value.string_value : "Unknown"; - return l; + return (struct language){ + .id = strdup(id), + .name = name_value, + }; } static void next_ext(const char *curr, const char **nxt, const char **end) { @@ -93,6 +94,8 @@ static struct setting *_lang_setting(const char *id, const char *key) { const char *setting_key = setting_join_key(id, key); struct setting *res = settings_get(setting_key); free((void *)setting_key); + + return res; } struct setting *lang_setting(struct language *lang, const char *key) { @@ -153,9 +156,9 @@ struct language lang_from_filename(const char *filename) { regexec(®ex, filename, 0, NULL, 0) == 0) { // len of "languages." - size_t id_len = setting_name - (setting->path + 10); + size_t id_len = setting_name - setting->path; char lang_id[128] = {0}; - memcpy(lang_id, setting->path + 10, id_len); + memcpy(lang_id, setting->path, id_len); lang_id[id_len] = '\0'; regfree(®ex); @@ -184,13 +187,15 @@ struct language lang_from_id(const char *id) { const char *lang_path = setting_join_key("languages", id); settings_get_prefix(lang_path, &settings, &nsettings); - free((void *)lang_path); free(settings); if (nsettings > 0) { - return lang_from_settings(id); + struct language l = lang_from_settings(lang_path); + free((void *)lang_path); + return l; } else { minibuffer_echo_timeout(4, "failed to find language \"%s\"", id); + free((void *)lang_path); return g_fundamental; } } -- cgit v1.2.3