X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=inittab.c;h=e935ecee36a112eef770d39f31a27275910677e3;hp=2ed1395d884423134d205fd948f385987885e2c5;hb=eb7c76ede8d0d41c7139c704236c6111da56da46;hpb=0c116c65f9bc4132fa0dfc99e875f57e9ee29af1 diff --git a/inittab.c b/inittab.c index 2ed1395..e935ece 100644 --- a/inittab.c +++ b/inittab.c @@ -72,7 +72,7 @@ static void fork_worker(struct init_action *a) } if (a->proc.pid > 0) { - DEBUG(2, "Launched new %s action, pid=%d\n", + DEBUG(4, "Launched new %s action, pid=%d\n", a->handler->name, (int) a->proc.pid); uloop_process_add(&a->proc); @@ -83,7 +83,7 @@ static void child_exit(struct uloop_process *proc, int ret) { struct init_action *a = container_of(proc, struct init_action, proc); - DEBUG(2, "pid:%d\n", proc->pid); + DEBUG(4, "pid:%d\n", proc->pid); uloop_timeout_set(&a->tout, a->respawn); } @@ -116,7 +116,7 @@ static void askfirst(struct init_action *a) i = stat(a->id, &s); chdir("/"); if (i || (console && !strcmp(console, a->id))) { - DEBUG(2, "Skipping %s\n", a->id); + DEBUG(4, "Skipping %s\n", a->id); return; } @@ -139,7 +139,7 @@ static void askconsole(struct init_action *a) regex_t pat_cmdline; regmatch_t matches[2]; - if (!fd) + if (fd < 0) return; r = read(fd, line, sizeof(line) - 1); @@ -156,7 +156,7 @@ static void askconsole(struct init_action *a) i = stat(tty, &s); chdir("/"); if (i) { - DEBUG(2, "skipping %s\n", tty); + DEBUG(4, "skipping %s\n", tty); goto err_out; } console = strdup(tty); @@ -175,6 +175,15 @@ err_out: regfree(&pat_cmdline); } +static void rcrespawn(struct init_action *a) +{ + a->tout.cb = respawn; + a->respawn = 500; + + a->proc.cb = child_exit; + fork_worker(a); +} + static struct init_handler handlers[] = { { .name = "sysinit", @@ -190,6 +199,10 @@ static struct init_handler handlers[] = { .name = "askconsole", .cb = askconsole, .multi = 1, + }, { + .name = "respawn", + .cb = rcrespawn, + .multi = 1, } }; @@ -252,7 +265,7 @@ void procd_inittab(void) if (regexec(&pat_inittab, line, 5, matches, 0)) continue; - DEBUG(2, "Parsing inittab - %s", line); + DEBUG(4, "Parsing inittab - %s", line); for (i = TAG_ID; i <= TAG_PROCESS; i++) { line[matches[i].rm_eo] = '\0';