diff options
author | John Crispin <blogic@openwrt.org> | 2013-11-22 13:13:54 +0100 |
---|---|---|
committer | John Crispin <blogic@openwrt.org> | 2013-11-22 15:04:07 +0100 |
commit | dc3988c38546c37a02030af8201048272caa7ded (patch) | |
tree | 359f49364a9ac5ca4f792076a1a6b91d4d786cd3 | |
parent | 21d307367eb991f7494ce43087a5edb94288d08f (diff) | |
download | unitd-dc3988c38546c37a02030af8201048272caa7ded.tar unitd-dc3988c38546c37a02030af8201048272caa7ded.zip |
cleanup debug level handover
Signed-off-by: John Crispin <blogic@openwrt.org>
-rw-r--r-- | initd/preinit.c | 29 | ||||
-rw-r--r-- | procd.c | 6 |
2 files changed, 30 insertions, 5 deletions
diff --git a/initd/preinit.c b/initd/preinit.c index c5f7ada..fb94527 100644 --- a/initd/preinit.c +++ b/initd/preinit.c @@ -31,11 +31,28 @@ static struct uloop_process preinit_proc; static struct uloop_process plugd_proc; static void +check_dbglvl(void) +{ + FILE *fp = fopen("/tmp/debug_level", "r"); + int lvl = 0; + + if (!fp) + return; + fscanf(fp, "%d", &lvl); + fclose(fp); + unlink("/tmp/debug_level"); + + if (lvl > 0 && lvl < 5) + debug = lvl; +} + +static void spawn_procd(struct uloop_process *proc, int ret) { char *wdt_fd = watchdog_fd(); - char *argv[] = { "/sbin/procd", "-d", "0", NULL }; + char *argv[] = { "/sbin/procd", NULL}; struct stat s; + char dbg[2]; if (plugd_proc.pid > 0) kill(plugd_proc.pid, SIGKILL); @@ -49,10 +66,12 @@ spawn_procd(struct uloop_process *proc, int ret) DEBUG(2, "Exec to real procd now\n"); if (wdt_fd) setenv("WDTFD", wdt_fd, 1); - if (debug) - snprintf(argv[2], 2, "%d", debug & 0xf); - else - argv[1] = NULL; + check_dbglvl(); + if (debug > 0) { + snprintf(dbg, 2, "%d", debug); + setenv("DBGLVL", dbg, 1); + } + execvp(argv[0], argv); } @@ -40,6 +40,12 @@ static int usage(const char *prog) int main(int argc, char **argv) { int ch; + char *dbglvl = getenv("DBGLVL"); + + if (dbglvl) { + debug = atoi(dbglvl); + unsetenv("DBGLVL"); + } while ((ch = getopt(argc, argv, "d:s:h:")) != -1) { switch (ch) { |