diff --git a/core/plugins.c b/core/plugins.c index 7c169034..641ba3f4 100644 --- a/core/plugins.c +++ b/core/plugins.c @@ -24,7 +24,7 @@ static void uwsgi_plugin_parse_section(char *filename) { } #endif -static int plugin_already_loaded(const char *plugin) { +int plugin_already_loaded(const char *plugin) { int i; for (i = 0; i < 256; i++) { diff --git a/core/utils.c b/core/utils.c index 61e5976a..644f52b0 100644 --- a/core/utils.c +++ b/core/utils.c @@ -1422,6 +1422,27 @@ int uwsgi_logic_opt_if_not_dir(char *key, char *value) { return 0; } +int uwsgi_logic_opt_if_plugin(char *key, char *value) { + + if (plugin_already_loaded(uwsgi.logic_opt_data)) { + add_exported_option(key, uwsgi_substitute(value, "%(_)", uwsgi.logic_opt_data), 0); + return 1; + } + + return 0; +} + +int uwsgi_logic_opt_if_not_plugin(char *key, char *value) { + + if (!plugin_already_loaded(uwsgi.logic_opt_data)) { + add_exported_option(key, uwsgi_substitute(value, "%(_)", uwsgi.logic_opt_data), 0); + return 1; + } + + return 0; +} + + int uwsgi_logic_opt_if_exists(char *key, char *value) { diff --git a/core/uwsgi.c b/core/uwsgi.c index d69f926d..64efe4fc 100644 --- a/core/uwsgi.c +++ b/core/uwsgi.c @@ -95,6 +95,10 @@ static struct uwsgi_option uwsgi_base_options[] = { {"if-not-exists", required_argument, 0, "(opt logic) check for file/directory existance", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_not_exists, UWSGI_OPT_IMMEDIATE}, {"ifexists", required_argument, 0, "(opt logic) check for file/directory existance", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_exists, UWSGI_OPT_IMMEDIATE}, + {"if-plugin", required_argument, 0, "(opt logic) check for plugin", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_plugin, UWSGI_OPT_IMMEDIATE}, + {"if-not-plugin", required_argument, 0, "(opt logic) check for plugin", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_not_plugin, UWSGI_OPT_IMMEDIATE}, + {"ifplugin", required_argument, 0, "(opt logic) check for plugin", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_plugin, UWSGI_OPT_IMMEDIATE}, + {"if-file", required_argument, 0, "(opt logic) check for file existance", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_file, UWSGI_OPT_IMMEDIATE}, {"if-not-file", required_argument, 0, "(opt logic) check for file existance", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_not_file, UWSGI_OPT_IMMEDIATE}, {"if-dir", required_argument, 0, "(opt logic) check for directory existance", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_dir, UWSGI_OPT_IMMEDIATE}, diff --git a/uwsgi.h b/uwsgi.h index 7c92bbac..68e67e66 100644 --- a/uwsgi.h +++ b/uwsgi.h @@ -3275,6 +3275,8 @@ int uwsgi_logic_opt_if_dir(char *, char *); int uwsgi_logic_opt_if_not_dir(char *, char *); int uwsgi_logic_opt_if_reload(char *, char *); int uwsgi_logic_opt_if_not_reload(char *, char *); +int uwsgi_logic_opt_if_plugin(char *, char *); +int uwsgi_logic_opt_if_not_plugin(char *, char *); #ifdef UWSGI_CAP @@ -3870,6 +3872,8 @@ void uwsgi_exceptions_handler_thread_start(void); struct uwsgi_stats_pusher_instance *uwsgi_stats_pusher_add(struct uwsgi_stats_pusher *, char *); +int plugin_already_loaded(const char *); + #ifdef UWSGI_ZLIB #include int uwsgi_deflate_init(z_stream *, char *, size_t);