From: Christian Marangi Date: Tue, 31 Jan 2023 14:32:59 +0000 (+0100) Subject: rc: add support for scanning USE_PROCD and skip running if not supported X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=5577db9208e179e18cfe2e5e8376d58fd9111140;p=project%2Frpcd.git 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 --- 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++; }