[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] xenconsole: Allow non-interactive use
commit 9072240954fc8a7c74ae04d2eb51c98bc0cb3356 Author: Martin Lucina <martin@xxxxxxxxxx> AuthorDate: Fri Jul 24 13:30:48 2015 +0200 Commit: Ian Campbell <ian.campbell@xxxxxxxxxx> CommitDate: Fri Jul 24 12:41:24 2015 +0100 xenconsole: Allow non-interactive use If xenconsole is run with stdin closed or redirected to /dev/null, console_loop() will return immediately due to failure to read from STDIN_FILENO. This patch tests if stdin and stdout are both connected to a TTY and, if not, xenconsole will not attempt to read from stdin or modify stdout terminal attributes. Existing behaviour when xenconsole is run from a terminal does not change. This allows for non-interactive use, eg. running "xl create -c" under systemd or piping the output of "xl console" to another command. Signed-off-by: Martin Lucina <martin@xxxxxxxxxx> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx> Cc: Wei Liu <wei.liu2@xxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- tools/console/client/main.c | 23 ++++++++++++++++------- 1 files changed, 16 insertions(+), 7 deletions(-) diff --git a/tools/console/client/main.c b/tools/console/client/main.c index f4c783b..753b3aa 100644 --- a/tools/console/client/main.c +++ b/tools/console/client/main.c @@ -168,16 +168,19 @@ static void restore_term(int fd, struct termios *old) tcsetattr(fd, TCSANOW, old); } -static int console_loop(int fd, struct xs_handle *xs, char *pty_path) +static int console_loop(int fd, struct xs_handle *xs, char *pty_path, + bool interactive) { - int ret, xs_fd = xs_fileno(xs), max_fd; + int ret, xs_fd = xs_fileno(xs), max_fd = -1; do { fd_set fds; FD_ZERO(&fds); - FD_SET(STDIN_FILENO, &fds); - max_fd = STDIN_FILENO; + if (interactive) { + FD_SET(STDIN_FILENO, &fds); + max_fd = STDIN_FILENO; + } FD_SET(xs_fd, &fds); if (xs_fd > max_fd) max_fd = xs_fd; if (fd != -1) FD_SET(fd, &fds); @@ -284,6 +287,10 @@ int main(int argc, char **argv) struct xs_handle *xs; char *end; console_type type = CONSOLE_INVAL; + bool interactive = 0; + + if (isatty(STDIN_FILENO) && isatty(STDOUT_FILENO)) + interactive = 1; while((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) { switch(ch) { @@ -390,9 +397,11 @@ int main(int argc, char **argv) } init_term(spty, &attr); - init_term(STDIN_FILENO, &stdin_old_attr); - atexit(restore_term_stdin); /* if this fails, oh dear */ - console_loop(spty, xs, path); + if (interactive) { + init_term(STDIN_FILENO, &stdin_old_attr); + atexit(restore_term_stdin); /* if this fails, oh dear */ + } + console_loop(spty, xs, path, interactive); free(path); free(dom_path); -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |