bool doveadm_has_unloaded_plugin(const char *name) { struct module *module; DIR *dir; struct dirent *d; const char *plugin_name; unsigned int name_len = strlen(name); bool found = FALSE; /* first check that it's not actually loaded */ for (module = modules; module != NULL; module = module->next) { if (strcmp(module_get_plugin_name(module), name) == 0) return FALSE; } dir = opendir(DOVEADM_MODULEDIR); if (dir == NULL) return FALSE; while ((d = readdir(dir)) != NULL) { plugin_name = module_file_get_name(d->d_name); if (strncmp(plugin_name, "doveadm_", 8) == 0) plugin_name += 8; if (strncmp(plugin_name, name, name_len) == 0 && (plugin_name[name_len] == '\0' || strcmp(plugin_name + name_len, "_plugin") == 0)) { found = TRUE; break; } } (void)closedir(dir); return found; }
static struct module *sieve_plugin_module_find(const char *name) { struct module *module; module = sieve_modules; while ( module != NULL ) { const char *mod_name; /* Strip module names */ mod_name = module_get_plugin_name(module); if ( strcmp(mod_name, name) == 0 ) return module; module = module->next; } return NULL; }