rc: fix and improve script scanning START and STOP
authorChristian Marangi <ansuelsmth@gmail.com>
Tue, 31 Jan 2023 14:28:17 +0000 (15:28 +0100)
committerChristian Marangi <ansuelsmth@gmail.com>
Tue, 31 Jan 2023 15:11:17 +0000 (16:11 +0100)
Currently we stop searching at the first occurence of START or STOP
entry. This is wrong since we totally miss the other data (START or
STOP) in the occurence of the other.

Fix and improve script scanning by:
- Increase the line max length to 255 char to read it in one go.
- Scan only the first 10 lines.
- Don't stop at the first occurence and try to search also for the other
  data.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
rc.c

diff --git a/rc.c b/rc.c
index 45fdc1aa33d7951f7045c72a7cad1d50d49ee759..431d3a50d86a013a46af615e7956c3b78d506e55 100644 (file)
--- a/rc.c
+++ b/rc.c
@@ -187,17 +187,20 @@ static void rc_list_readdir(struct rc_list_context *c)
        if (fp) {
                struct stat s;
                char path[PATH_MAX];
-               char line[32];
+               char line[255];
                bool beginning;
+               int count = 0;
 
                beginning = true;
-               while (c->entry.start < 0 && c->entry.stop < 0 && fgets(line, sizeof(line), fp)) {
+               while ((c->entry.start < 0 || c->entry.stop < 0) &&
+                      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);
                                }
+                               count++;
                        }
 
                        beginning = !!strchr(line, '\n');