diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2010-12-23 13:42:49 +0100 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2011-02-01 16:50:43 -0600 |
commit | 0369364be871f9c4b4429a69ddcd2ba21be34ea3 (patch) | |
tree | 848376039d63e36e8798d7a742855b7c7acc5849 /qemu-char.c | |
parent | c48855e1404e9b5857e07b7839f806fa98b4abdc (diff) | |
download | qemu-0369364be871f9c4b4429a69ddcd2ba21be34ea3.zip qemu-0369364be871f9c4b4429a69ddcd2ba21be34ea3.tar.gz qemu-0369364be871f9c4b4429a69ddcd2ba21be34ea3.tar.bz2 |
move atexit(term_exit) and O_NONBLOCK to qemu_chr_open_stdio
In the next patch, term_init will be changed to enable or disable
echo at will. Move extraneous stuff out of it.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'qemu-char.c')
-rw-r--r-- | qemu-char.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/qemu-char.c b/qemu-char.c index b95cfdc..a6ea516 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -716,7 +716,6 @@ static void stdio_read(void *opaque) /* init terminal so that we can grab keys */ static struct termios oldtty; static int old_fd0_flags; -static int term_atexit_done; static void term_exit(void) { @@ -728,10 +727,7 @@ static void term_init(QemuOpts *opts) { struct termios tty; - tcgetattr (0, &tty); - oldtty = tty; - old_fd0_flags = fcntl(0, F_GETFL); - + tty = oldtty; tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP |INLCR|IGNCR|ICRNL|IXON); tty.c_oflag |= OPOST; @@ -745,11 +741,6 @@ static void term_init(QemuOpts *opts) tty.c_cc[VTIME] = 0; tcsetattr (0, TCSANOW, &tty); - - if (!term_atexit_done++) - atexit(term_exit); - - fcntl(0, F_SETFL, O_NONBLOCK); } static void qemu_chr_close_stdio(struct CharDriverState *chr) @@ -766,6 +757,13 @@ static CharDriverState *qemu_chr_open_stdio(QemuOpts *opts) if (stdio_nb_clients >= STDIO_MAX_CLIENTS) return NULL; + if (stdio_nb_clients == 0) { + old_fd0_flags = fcntl(0, F_GETFL); + tcgetattr (0, &oldtty); + fcntl(0, F_SETFL, O_NONBLOCK); + atexit(term_exit); + } + chr = qemu_chr_open_fd(0, 1); chr->chr_close = qemu_chr_close_stdio; qemu_set_fd_handler2(0, stdio_read_poll, stdio_read, NULL, chr); |