From 66ddde697db39817efe4f022767dc7658fa1707a Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Tue, 30 Mar 2004 04:11:03 +0000 Subject: [PATCH] Multi-language support fixes * Copy keys in per-language message tables so that they don't point to free()d memory. * Only warn about missing/extra messages if there are any. * In language_read_list(), do not allocate languages "." or "..". git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-37 --- src/helpfile.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/helpfile.c b/src/helpfile.c index 709e37c..d7edfbe 100644 --- a/src/helpfile.c +++ b/src/helpfile.c @@ -137,7 +137,7 @@ static void language_set_messages(struct language *lang, dict_t dict) log_module(MAIN_LOG, LOG_WARNING, "Unsupported record type for message %s in language %s", msgid, lang->name); continue; } - dict_insert(lang->messages, msgid, msg); + dict_insert(lang->messages, strdup(msgid), msg); it = iter_next(it); it2 = iter_next(it2); } @@ -145,7 +145,8 @@ static void language_set_messages(struct language *lang, dict_t dict) missing++; it2 = iter_next(it2); } - log_module(MAIN_LOG, LOG_WARNING, "In language %s, %d extra and %d missing messages", lang->name, extra, missing); + if (extra || missing) + log_module(MAIN_LOG, LOG_WARNING, "In language %s, %d extra and %d missing messages.", lang->name, extra, missing); } static struct language *language_read(const char *name) @@ -188,6 +189,7 @@ static struct language *language_read(const char *name) /* (Re-)initialize the language's dicts. */ dict_delete(lang->messages); lang->messages = dict_new(); + dict_set_free_keys(lang->messages, free); dict_set_free_data(lang->messages, free); lang->helpfiles = dict_new(); dict_set_free_data(lang->helpfiles, language_free_helpfile); @@ -219,8 +221,11 @@ static void language_read_list(void) if (!(dir = opendir("languages"))) return; - while ((dirent = readdir(dir))) + while ((dirent = readdir(dir))) { + if (!strcmp(dirent->d_name, ".") || !strcmp(dirent->d_name, "..")) + continue; language_alloc(dirent->d_name); + } closedir(dir); } -- 2.20.1