From af3ccfeed45dd735cd11c54d30da709605872e7d Mon Sep 17 00:00:00 2001 From: "roberto@precise64" Date: Sat, 25 Feb 2012 09:24:07 +0100 Subject: [PATCH] added negative configlogic --- utils.c | 41 +++++++++++++++++++++++++++++++++++++++++ uwsgi.c | 5 +++++ uwsgi.h | 4 ++++ 3 files changed, 50 insertions(+) diff --git a/utils.c b/utils.c index ad4d631e..fac54401 100644 --- a/utils.c +++ b/utils.c @@ -1816,6 +1816,17 @@ int uwsgi_logic_opt_if_env(char *key, char *value) { return 0; } +int uwsgi_logic_opt_if_not_env(char *key, char *value) { + + char *p = getenv(uwsgi.logic_opt_data); + if (!p) { + add_exported_option(key, uwsgi_substitute(value, "%(_)", p), 0); + return 1; + } + + return 0; +} + int uwsgi_logic_opt_if_file(char *key, char *value) { if (uwsgi_is_file(uwsgi.logic_opt_data)) { @@ -1826,6 +1837,16 @@ int uwsgi_logic_opt_if_file(char *key, char *value) { return 0; } +int uwsgi_logic_opt_if_not_file(char *key, char *value) { + + if (!uwsgi_is_file(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_dir(char *key, char *value) { if (uwsgi_is_dir(uwsgi.logic_opt_data)) { @@ -1836,6 +1857,16 @@ int uwsgi_logic_opt_if_dir(char *key, char *value) { return 0; } +int uwsgi_logic_opt_if_not_dir(char *key, char *value) { + + if (!uwsgi_is_dir(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) { @@ -1847,6 +1878,16 @@ int uwsgi_logic_opt_if_exists(char *key, char *value) { return 0; } +int uwsgi_logic_opt_if_not_exists(char *key, char *value) { + + if (!uwsgi_file_exists(uwsgi.logic_opt_data)) { + add_exported_option(key, uwsgi_substitute(value, "%(_)", uwsgi.logic_opt_data), 0); + return 1; + } + + return 0; +} + int uwsgi_logic_opt_for(char *key, char *value) { diff --git a/uwsgi.c b/uwsgi.c index 32239a73..cfd43e2e 100644 --- a/uwsgi.c +++ b/uwsgi.c @@ -62,13 +62,18 @@ static struct uwsgi_option uwsgi_base_options[] = { {"endfor", optional_argument, 0, "(opt logic) end for cycle", uwsgi_opt_noop, NULL, UWSGI_OPT_IMMEDIATE}, {"if-env", required_argument, 0, "(opt logic) check for environment variable", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_env, UWSGI_OPT_IMMEDIATE}, + {"if-not-env", required_argument, 0, "(opt logic) check for environment variable", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_not_env, UWSGI_OPT_IMMEDIATE}, {"ifenv", required_argument, 0, "(opt logic) check for environment variable", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_env, UWSGI_OPT_IMMEDIATE}, {"if-exists", required_argument, 0, "(opt logic) check for file/directory existance", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_exists, UWSGI_OPT_IMMEDIATE}, + {"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-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}, + {"if-not-dir", required_argument, 0, "(opt logic) check for directory existance", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_not_dir, UWSGI_OPT_IMMEDIATE}, + {"ifdir", required_argument, 0, "(opt logic) check for directory existance", uwsgi_opt_logic, (void *) uwsgi_logic_opt_if_dir, UWSGI_OPT_IMMEDIATE}, {"if-directory", 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 bc9742a7..f60731a8 100644 --- a/uwsgi.h +++ b/uwsgi.h @@ -2619,9 +2619,13 @@ void uwsgi_opt_noop(char *, char *, void *); void uwsgi_opt_logic(char *, char *, void *); int uwsgi_logic_opt_for(char *, char *); int uwsgi_logic_opt_if_env(char *, char *); +int uwsgi_logic_opt_if_not_env(char *, char *); int uwsgi_logic_opt_if_exists(char *, char *); +int uwsgi_logic_opt_if_not_exists(char *, char *); int uwsgi_logic_opt_if_file(char *, char *); +int uwsgi_logic_opt_if_not_file(char *, char *); int uwsgi_logic_opt_if_dir(char *, char *); +int uwsgi_logic_opt_if_not_dir(char *, char *); #ifdef UWSGI_CAP