From 6834f805776414a3c67bde327b2ca71f52d27b20 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Fri, 10 Nov 2017 19:07:38 +0100 Subject: [PATCH] console: fix console info message Now it will be displayed nicely formatted: a1 login: chb@conventiont|~ > lxc console a1 Connected to tty 0 Type to exit the console, to enter Ctrl+a itself Ubuntu 17.10 a1 console a1 login: Signed-off-by: Christian Brauner --- src/lxc/console.c | 54 +++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/src/lxc/console.c b/src/lxc/console.c index 2d0836617..934e1d132 100644 --- a/src/lxc/console.c +++ b/src/lxc/console.c @@ -777,26 +777,9 @@ int lxc_console(struct lxc_container *c, int ttynum, struct lxc_tty_state *ts; int istty = 0; - istty = isatty(stdinfd); - if (istty) { - ret = lxc_setup_tios(stdinfd, &oldtios); - if (ret < 0) - return -1; - } else { - INFO("File descriptor %d does not refer to a tty device", stdinfd); - } - ttyfd = lxc_cmd_console(c->name, &ttynum, &masterfd, c->config_path); - if (ttyfd < 0) { - ret = ttyfd; - goto restore_tios; - } - - fprintf(stderr, "\n" - "Connected to tty %1$d\n" - "Type to exit the console, " - " to enter Ctrl+%2$c itself\n", - ttynum, 'a' + escape - 1); + if (ttyfd < 0) + return -1; ret = setsid(); if (ret < 0) @@ -812,9 +795,12 @@ int lxc_console(struct lxc_container *c, int ttynum, ts->winch_proxy_lxcpath = c->config_path; ts->stdoutfd = stdoutfd; + istty = isatty(stdinfd); if (istty) { lxc_console_winsz(stdinfd, masterfd); lxc_cmd_console_winch(ts->winch_proxy, ts->winch_proxy_lxcpath); + } else { + INFO("File descriptor %d does not refer to a tty device", stdinfd); } ret = lxc_mainloop_open(&descr); @@ -846,14 +832,34 @@ int lxc_console(struct lxc_container *c, int ttynum, goto close_mainloop; } + fprintf(stderr, "\n" + "Connected to tty %1$d\n" + "Type to exit the console, " + " to enter Ctrl+%2$c itself\n", + ttynum, 'a' + escape - 1); + + if (istty) { + ret = lxc_setup_tios(stdinfd, &oldtios); + if (ret < 0) + goto close_mainloop; + } + ret = lxc_mainloop(&descr, -1); if (ret < 0) { ERROR("The mainloop returned an error"); - goto close_mainloop; + goto restore_tios; } ret = 0; +restore_tios: + if (istty) { + istty = tcsetattr(stdinfd, TCSAFLUSH, &oldtios); + if (istty < 0) + WARN("%s - Failed to restore terminal properties", + strerror(errno)); + } + close_mainloop: lxc_mainloop_close(&descr); @@ -864,13 +870,5 @@ close_fds: close(masterfd); close(ttyfd); -restore_tios: - if (istty) { - istty = tcsetattr(stdinfd, TCSAFLUSH, &oldtios); - if (istty < 0) - WARN("%s - Failed to restore terminal properties", - strerror(errno)); - } - return ret; } -- 2.39.5