diff options
author | Christian Marangi <ansuelsmth@gmail.com> | 2023-01-31 15:32:59 +0100 |
---|---|---|
committer | Christian Marangi <ansuelsmth@gmail.com> | 2023-01-31 16:11:23 +0100 |
commit | 5577db9208e179e18cfe2e5e8376d58fd9111140 (patch) | |
tree | 314d1d430dd15df41ec41f6b5e6a5d2be5af44aa | |
parent | 4de3f02e3124994ad30600a69711150f1e9c9956 (diff) | |
download | rpcd-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.c | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -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++; } |