[lxc-devel] [lxc/master] console: fix console info message

brauner on Github lxc-bot at linuxcontainers.org
Fri Nov 10 18:09:08 UTC 2017


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 598 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20171110/0fcd3248/attachment.bin>
-------------- next part --------------
From 6834f805776414a3c67bde327b2ca71f52d27b20 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
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 at conventiont|~
> lxc console a1

Connected to tty 0
Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself

Ubuntu 17.10 a1 console

a1 login:

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 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 <Ctrl+%2$c q> to exit the console, "
-			"<Ctrl+%2$c Ctrl+%2$c> 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 <Ctrl+%2$c q> to exit the console, "
+			"<Ctrl+%2$c Ctrl+%2$c> 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 @@ int lxc_console(struct lxc_container *c, int ttynum,
 	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;
 }


More information about the lxc-devel mailing list