changeset 11980:4b59b19628b1

module_dir_load(): Support multiple binaries for checking dependency
author Timo Sirainen <tss@iki.fi>
date Thu, 12 Aug 2010 13:51:12 +0100
parents a75589746450
children b9bdcfd6eaa7
files src/lib/module-dir.c
diffstat 1 files changed, 16 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/module-dir.c	Thu Aug 12 13:50:01 2010 +0100
+++ b/src/lib/module-dir.c	Thu Aug 12 13:51:12 2010 +0100
@@ -71,20 +71,30 @@
 module_check_wrong_binary_dependency(const struct module_dir_load_settings *set,
 				     struct module *module)
 {
-	const char *symbol_name, *binary_dep;
+	const char *symbol_name, *binary_dep, *const *names;
+	string_t *errstr;
+
+	if (set->binary_name == NULL)
+		return TRUE;
 
 	symbol_name = t_strconcat(module->name, "_binary_dependency", NULL);
 	binary_dep = dlsym(module->handle, symbol_name);
 	if (binary_dep == NULL)
 		return TRUE;
 
-	if (set->binary_name == NULL ||
-	    strcmp(binary_dep, set->binary_name) == 0)
+	names = t_strsplit(binary_dep, " ");
+	if (str_array_find(names, set->binary_name))
 		return TRUE;
 
-	i_error("Can't load plugin %s: "
-		"Plugin is intended to be used only by %s binary (we're %s)",
-		module->name, binary_dep, set->binary_name);
+	errstr = t_str_new(128);
+	str_printfa(errstr, "Can't load plugin %s: "
+		    "Plugin is intended to be used only by ", module->name);
+	if (names[1] == NULL)
+		str_printfa(errstr, "%s binary", binary_dep);
+	else
+		str_printfa(errstr, "binaries: %s", binary_dep);
+	str_printfa(errstr, " (we're %s)", set->binary_name);
+	i_error("%s", str_c(errstr));
 	return FALSE;
 }