From: Timo Sirainen Date: Fri, 2 Jul 2010 17:58:55 +0000 (+0100) Subject: module_dir_load(): Ignore duplicates in module names. X-Git-Tag: 2.0.rc1~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=03860500ead019ab880ec8317d2cdb946c68b758;p=thirdparty%2Fdovecot%2Fcore.git module_dir_load(): Ignore duplicates in module names. --HG-- branch : HEAD --- diff --git a/src/lib/module-dir.c b/src/lib/module-dir.c index 7d9bbe1f58..450508a133 100644 --- a/src/lib/module-dir.c +++ b/src/lib/module-dir.c @@ -250,12 +250,20 @@ static bool module_is_loaded(struct module *modules, const char *name) static void module_names_fix(const char **module_names) { - unsigned int i; + unsigned int i, j; /* allow giving the module names also in non-base form. convert them in here. */ for (i = 0; module_names[i] != NULL; i++) module_names[i] = module_file_get_name(module_names[i]); + + /* @UNSAFE: drop duplicates */ + qsort(module_names, i, sizeof(*module_names), i_strcmp_p); + for (i = j = 1; module_names[i] != NULL; i++) { + if (strcmp(module_names[i-1], module_names[i]) != 0) + module_names[j++] = module_names[i]; + } + module_names[j] = NULL; } static bool