From: Michael Poole Date: Tue, 30 Mar 2004 04:11:03 +0000 (+0000) Subject: Multi-language support fixes X-Git-Tag: v1.4.0-rc1~239 X-Git-Url: http://git.pk910.de/?p=srvx.git;a=commitdiff_plain;h=66ddde697db39817efe4f022767dc7658fa1707a 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 --- 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); }