[rpcd PATCH 2/4] rc: add support for scanning USE_PROCD and skip running if not supported

Christian Marangi ansuelsmth at gmail.com
Tue Jan 31 07:14:29 PST 2023


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 at gmail.com>
---
 rc.c | 11 +++++++++--
 1 file 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++;
 			}
-- 
2.38.1




More information about the openwrt-devel mailing list