From 44d0d87ad3f04822c917f96f0d0eb80c6207fe9f Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Mon, 6 Mar 2023 16:28:57 +0100 Subject: [PATCH] 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 --- src/conf.c | 2 +- src/service.c | 26 ++++++-------------------- src/svc.c | 16 ++++++++++++---- src/svc.h | 2 +- 4 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/conf.c b/src/conf.c index 6f06fa3f..5d9711c0 100644 --- a/src/conf.c +++ b/src/conf.c @@ -1070,7 +1070,7 @@ int conf_reload(void) /* Mark any reverse deps as chenaged. */ service_update_rdeps(); - /* Prune according to ifdef:[!]ident */ + /* Prune according to if:[!]ident or if:<[!]cond> */ service_mark_unavail(); /* Set up top-level cgroups */ diff --git a/src/service.c b/src/service.c index 87aac7df..19fb8a9a 100644 --- a/src/service.c +++ b/src/service.c @@ -1395,7 +1395,7 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file) char *id = NULL, *env = NULL, *cgroup = NULL; char *pre_script = NULL, *post_script = NULL; char *ready_script = NULL, *conflict = NULL; - char *ifdef = NULL, *ifstmt = NULL; + char *ifstmt = NULL; char *notify = NULL; struct tty tty = { 0 }; char *dev = NULL; @@ -1510,8 +1510,6 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file) conflict = arg; else if (MATCH_CMD(cmd, "if:", arg)) ifstmt = arg; - else if (MATCH_CMD(cmd, "ifdef:", arg)) - ifdef = arg; else break; @@ -1525,18 +1523,6 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file) if (!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); if (runlevel > 0 && !ISOTHER(levels, 0)) { 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)); else memset(svc->conflict, 0, sizeof(svc->conflict)); - if (ifdef) - strlcpy(svc->ifdef, ifdef, sizeof(svc->ifdef)); + if (ifstmt) + strlcpy(svc->ifstmt, ifstmt, sizeof(svc->ifstmt)); else - memset(svc->ifdef, 0, sizeof(svc->ifdef)); + memset(svc->ifstmt, 0, sizeof(svc->ifstmt)); svc->manual = manual; svc->respawn = respawn; svc->forking = forking; @@ -1929,10 +1915,10 @@ void service_mark_unavail(void) for (svc = svc_iterator(&iter, 1); svc; svc = svc_iterator(&iter, 0)) { char buf[MAX_IDENT_LEN]; - if (!svc->ifdef[0]) + if (!svc->ifstmt[0]) 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); } } diff --git a/src/svc.c b/src/svc.c index 92913436..174d9e3f 100644 --- a/src/svc.c +++ b/src/svc.c @@ -686,6 +686,14 @@ int svc_conflicts(svc_t *svc) 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 not = 0; @@ -710,11 +718,11 @@ int svc_ifthen(const char *ident, char *stmt) cond = cond_get(stmt); 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; } 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 1; @@ -727,11 +735,11 @@ int svc_ifthen(const char *ident, char *stmt) svc = svc_find_by_str(stmt); 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; } if (!not && !svc) { - dbg("skipping %s, %s not available.", ident, stmt); + logit(LOG_NOTICE, "skipping %s, %s not available.", ident, stmt); return 0; } diff --git a/src/svc.h b/src/svc.h index bbafdaad..08809db3 100644 --- a/src/svc.h +++ b/src/svc.h @@ -138,7 +138,7 @@ typedef struct svc { int job; /* For intenal use only, canonical ref is NAME:ID */ char name[MAX_ARG_LEN]; char id[MAX_ID_LEN]; /* :ID */ - char ifdef[MAX_IDENT_LEN]; + char ifstmt[MAX_IDENT_LEN]; /* Counters */ char once; /* run/task, (at least) once per runlevel */