[systemd-devel] [PATCH resend] getty-generator: Enable getty on all active serial consoles.

Michael Marineau michael.marineau at coreos.com
Wed Aug 28 13:12:31 PDT 2013


This enables a getty on active kernel consoles even when they are not
the last one specified on the kernel command line and mapped to
/dev/console. Now the order "console=ttyS0 console=tty0" works in
addition to "console=tty0 console=ttyS0".
---
 src/getty-generator/getty-generator.c | 37 ++++++++++++++++++++++-------------
 1 file changed, 23 insertions(+), 14 deletions(-)

diff --git a/src/getty-generator/getty-generator.c b/src/getty-generator/getty-generator.c
index 4b7a60a..6c93806 100644
--- a/src/getty-generator/getty-generator.c
+++ b/src/getty-generator/getty-generator.c
@@ -122,33 +122,42 @@ int main(int argc, char *argv[]) {
         }
 
         if (read_one_line_file("/sys/class/tty/console/active", &active) >= 0) {
-                const char *tty;
-
-                tty = strrchr(active, ' ');
-                if (tty)
-                        tty ++;
-                else
-                        tty = active;
-
-                /* Automatically add in a serial getty on the kernel
-                 * console */
-                if (isempty(tty) || tty_is_vc(tty))
-                        free(active);
-                else {
+                char *w, *state;
+                size_t l;
+
+                /* Automatically add in a serial getty on all active
+                 * kernel consoles */
+                FOREACH_WORD(w, l, active, state) {
+                        char *tty;
                         int k;
 
+                        tty = strndup(w, l);
+                        if (!tty) {
+                            log_oom();
+                            free(active);
+                            r = EXIT_FAILURE;
+                            goto finish;
+                        }
+
+                        if (isempty(tty) || tty_is_vc(tty)) {
+                                free(tty);
+                                continue;
+                        }
+
                         /* We assume that gettys on virtual terminals are
                          * started via manual configuration and do this magic
                          * only for non-VC terminals. */
 
                         k = add_serial_getty(tty);
-                        free(active);
 
                         if (k < 0) {
+                                free(tty);
+                                free(active);
                                 r = EXIT_FAILURE;
                                 goto finish;
                         }
                 }
+                free(active);
         }
 
         /* Automatically add in a serial getty on the first
-- 
1.8.1.5



More information about the systemd-devel mailing list