summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Marangi <ansuelsmth@gmail.com>2023-01-31 15:32:59 +0100
committerChristian Marangi <ansuelsmth@gmail.com>2023-01-31 16:11:23 +0100
commit5577db9208e179e18cfe2e5e8376d58fd9111140 (patch)
tree314d1d430dd15df41ec41f6b5e6a5d2be5af44aa
parent4de3f02e3124994ad30600a69711150f1e9c9956 (diff)
downloadrpcd-5577db9208e179e18cfe2e5e8376d58fd9111140.tar.gz
rc: add support for scanning USE_PROCD and skip running if not supported
Running check is supported only in procd scripts. This cause prolonged execution time since the function needs to timeout. To fix this check if the script USE_PROCD and run running check only if supported. Also provide running info only if the running check is supported. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
-rw-r--r--rc.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/rc.c b/rc.c
index 431d3a5..35b47e9 100644
--- a/rc.c
+++ b/rc.c
@@ -47,6 +47,7 @@ struct rc_list_context {
int stop;
bool enabled;
bool running;
+ bool use_procd;
} entry;
};
@@ -81,7 +82,8 @@ static void rc_list_add_table(struct rc_list_context *c)
if (c->entry.stop >= 0)
blobmsg_add_u16(c->buf, "stop", c->entry.stop);
blobmsg_add_u8(c->buf, "enabled", c->entry.enabled);
- blobmsg_add_u8(c->buf, "running", c->entry.running);
+ if (c->entry.use_procd)
+ blobmsg_add_u8(c->buf, "running", c->entry.running);
blobmsg_close_table(c->buf, e);
}
@@ -112,6 +114,9 @@ static int rc_list_exec(struct rc_list_context *c, const char *action, uloop_pro
case -1:
return -errno;
case 0:
+ if (!c->entry.use_procd)
+ exit(-EOPNOTSUPP);
+
/* Set stdin, stdout & stderr to /dev/null */
fd = open("/dev/null", O_RDWR);
if (fd >= 0) {
@@ -192,13 +197,15 @@ static void rc_list_readdir(struct rc_list_context *c)
int count = 0;
beginning = true;
- while ((c->entry.start < 0 || c->entry.stop < 0) &&
+ while ((c->entry.start < 0 || c->entry.stop < 0 || !c->entry.use_procd) &&
count <= 10 && fgets(line, sizeof(line), fp)) {
if (beginning) {
if (!strncmp(line, "START=", 6)) {
c->entry.start = strtoul(line + 6, NULL, 0);
} else if (!strncmp(line, "STOP=", 5)) {
c->entry.stop = strtoul(line + 5, NULL, 0);
+ } else if (!c->skip_running_check && !strncmp(line, "USE_PROCD=", 10)) {
+ c->entry.use_procd = !!strtoul(line + 10, NULL, 0);
}
count++;
}