Simplify, drop ifdef: let if: become ifdef

Post audit, concensus is to drop if: and always do post-eval of all
ifdef: statements.  Also, rename ifdef: to if: for completeness.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg committed 2023-03-06 17:03:37 +01:00
1 parent 571250a9b9
commit 44d0d87ad3
4 files changed
+20 -26

No files matched your search

+1 -1
View File
@@ -1070,7 +1070,7 @@ int conf_reload(void)
/* Mark any reverse deps as chenaged. */ /* Mark any reverse deps as chenaged. */
service_update_rdeps(); service_update_rdeps();
/* Prune according to ifdef:[!]ident */ /* Prune according to if:[!]ident or if:<[!]cond> */
service_mark_unavail(); service_mark_unavail();
/* Set up top-level cgroups */ /* Set up top-level cgroups */
+6 -20
View File
@@ -1395,7 +1395,7 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file)
char *id = NULL, *env = NULL, *cgroup = NULL; char *id = NULL, *env = NULL, *cgroup = NULL;
char *pre_script = NULL, *post_script = NULL; char *pre_script = NULL, *post_script = NULL;
char *ready_script = NULL, *conflict = NULL; char *ready_script = NULL, *conflict = NULL;
char *ifdef = NULL, *ifstmt = NULL; char *ifstmt = NULL;
char *notify = NULL; char *notify = NULL;
struct tty tty = { 0 }; struct tty tty = { 0 };
char *dev = NULL; char *dev = NULL;
@@ -1510,8 +1510,6 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file)
conflict = arg; conflict = arg;
else if (MATCH_CMD(cmd, "if:", arg)) else if (MATCH_CMD(cmd, "if:", arg))
ifstmt = arg; ifstmt = arg;
else if (MATCH_CMD(cmd, "ifdef:", arg))
ifdef = arg;
else else
break; break;
@@ -1525,18 +1523,6 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file)
if (!id) if (!id)
id = ""; id = "";
if (ifstmt) {
char ident[MAX_IDENT_LEN];
if (id[0]) {
snprintf(ident, sizeof(ident), "%s:%s", name, id);
} else
strlcpy(ident, name, sizeof(ident));
if (!svc_ifthen(ident, ifstmt))
return 0;
}
levels = conf_parse_runlevels(runlevels); levels = conf_parse_runlevels(runlevels);
if (runlevel > 0 && !ISOTHER(levels, 0)) { if (runlevel > 0 && !ISOTHER(levels, 0)) {
dbg("Skipping %s%s%s, bootstrap is completed.", dbg("Skipping %s%s%s, bootstrap is completed.",
@@ -1727,10 +1713,10 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file)
strlcpy(svc->conflict, conflict, sizeof(svc->conflict)); strlcpy(svc->conflict, conflict, sizeof(svc->conflict));
else else
memset(svc->conflict, 0, sizeof(svc->conflict)); memset(svc->conflict, 0, sizeof(svc->conflict));
if (ifdef) if (ifstmt)
strlcpy(svc->ifdef, ifdef, sizeof(svc->ifdef)); strlcpy(svc->ifstmt, ifstmt, sizeof(svc->ifstmt));
else else
memset(svc->ifdef, 0, sizeof(svc->ifdef)); memset(svc->ifstmt, 0, sizeof(svc->ifstmt));
svc->manual = manual; svc->manual = manual;
svc->respawn = respawn; svc->respawn = respawn;
svc->forking = forking; svc->forking = forking;
@@ -1929,10 +1915,10 @@ void service_mark_unavail(void)
for (svc = svc_iterator(&iter, 1); svc; svc = svc_iterator(&iter, 0)) { for (svc = svc_iterator(&iter, 1); svc; svc = svc_iterator(&iter, 0)) {
char buf[MAX_IDENT_LEN]; char buf[MAX_IDENT_LEN];
if (!svc->ifdef[0]) if (!svc->ifstmt[0])
continue; continue;
if (!svc_ifthen(svc_ident(svc, buf, sizeof(buf)), svc->ifdef)) if (!svc_ifthen(svc_ident(svc, buf, sizeof(buf)), svc->ifstmt))
svc_mark(svc); svc_mark(svc);
} }
} }
+12 -4
View File
@@ -686,6 +686,14 @@ int svc_conflicts(svc_t *svc)
return rc; return rc;
} }
/**
* svc_ifthen - Check if: statement in declaration
* @ident: svc_t identififcation (name:id)
* @stmt: if: statement from .conf file
*
* Returns:
* %TRUE(1) yes, use this svc_t, %FALSE(0) prune
*/
int svc_ifthen(const char *ident, char *stmt) int svc_ifthen(const char *ident, char *stmt)
{ {
int not = 0; int not = 0;
@@ -710,11 +718,11 @@ int svc_ifthen(const char *ident, char *stmt)
cond = cond_get(stmt); cond = cond_get(stmt);
if (not && cond == COND_ON) { if (not && cond == COND_ON) {
dbg("skipping %s, cond %s is on", ident, stmt); logit(LOG_NOTICE, "skipping %s, cond %s is on.", ident, stmt);
return 0; return 0;
} }
if (!not && cond == COND_OFF) { if (!not && cond == COND_OFF) {
dbg("skipping %s, cond %s is off", ident, stmt); logit(LOG_NOTICE, "skipping %s, cond %s is off.", ident, stmt);
return 0; return 0;
} }
return 1; return 1;
@@ -727,11 +735,11 @@ int svc_ifthen(const char *ident, char *stmt)
svc = svc_find_by_str(stmt); svc = svc_find_by_str(stmt);
if (not && svc) { if (not && svc) {
dbg("skipping %s, %s already loaded.", ident, svc_ident(svc, NULL, 0)); logit(LOG_NOTICE, "skipping %s, %s already loaded.", ident, svc_ident(svc, NULL, 0));
return 0; return 0;
} }
if (!not && !svc) { if (!not && !svc) {
dbg("skipping %s, %s not available.", ident, stmt); logit(LOG_NOTICE, "skipping %s, %s not available.", ident, stmt);
return 0; return 0;
} }
+1 -1
View File
@@ -138,7 +138,7 @@ typedef struct svc {
int job; /* For intenal use only, canonical ref is NAME:ID */ int job; /* For intenal use only, canonical ref is NAME:ID */
char name[MAX_ARG_LEN]; char name[MAX_ARG_LEN];
char id[MAX_ID_LEN]; /* :ID */ char id[MAX_ID_LEN]; /* :ID */
char ifdef[MAX_IDENT_LEN]; char ifstmt[MAX_IDENT_LEN];
/* Counters */ /* Counters */
char once; /* run/task, (at least) once per runlevel */ char once; /* run/task, (at least) once per runlevel */