trace: handle open() return value and make sure string is terminated
[project/procd.git] / inittab.c
index 1cfef2ba78c69f5e26fe4cce66585f9520e314e4..b2ffc9a25e5fc69aa6a581002331c3ab93c1cc3f 100644 (file)
--- a/inittab.c
+++ b/inittab.c
@@ -183,7 +183,18 @@ static void askconsole(struct init_action *a)
        char line[256], *tty, *split;
        int i;
 
+       /* First, try console= on the kernel command line,
+        * then fallback to /sys/class/tty/console/active,
+        * which should work when linux,stdout-path (or equivalent)
+        * is in the device tree
+        */
        tty = get_cmdline_val("console", line, sizeof(line));
+       if (tty == NULL) {
+               if (dev_exist("console"))
+                       tty = "console";
+               else
+                       tty = get_active_console(line, sizeof(line));
+       }
        if (tty != NULL) {
                split = strchr(tty, ',');
                if (split != NULL)
@@ -276,12 +287,9 @@ void procd_inittab_run(const char *handler)
 
        list_for_each_entry(a, &actions, list)
                if (!strcmp(a->handler->name, handler)) {
-                       if (a->handler->multi) {
-                               a->handler->cb(a);
-                               continue;
-                       }
                        a->handler->cb(a);
-                       break;
+                       if (!a->handler->multi)
+                               break;
                }
 }