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>
This commit is contained in:
		
							parent
							
								
									c48855e140
								
							
						
					
					
						commit
						0369364be8
					
				
							
								
								
									
										18
									
								
								qemu-char.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								qemu-char.c
									
									
									
									
									
								
							@ -716,7 +716,6 @@ static void stdio_read(void *opaque)
 | 
				
			|||||||
/* init terminal so that we can grab keys */
 | 
					/* init terminal so that we can grab keys */
 | 
				
			||||||
static struct termios oldtty;
 | 
					static struct termios oldtty;
 | 
				
			||||||
static int old_fd0_flags;
 | 
					static int old_fd0_flags;
 | 
				
			||||||
static int term_atexit_done;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void term_exit(void)
 | 
					static void term_exit(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -728,10 +727,7 @@ static void term_init(QemuOpts *opts)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    struct termios tty;
 | 
					    struct termios tty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tcgetattr (0, &tty);
 | 
					    tty = oldtty;
 | 
				
			||||||
    oldtty = tty;
 | 
					 | 
				
			||||||
    old_fd0_flags = fcntl(0, F_GETFL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
 | 
					    tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
 | 
				
			||||||
                          |INLCR|IGNCR|ICRNL|IXON);
 | 
					                          |INLCR|IGNCR|ICRNL|IXON);
 | 
				
			||||||
    tty.c_oflag |= OPOST;
 | 
					    tty.c_oflag |= OPOST;
 | 
				
			||||||
@ -745,11 +741,6 @@ static void term_init(QemuOpts *opts)
 | 
				
			|||||||
    tty.c_cc[VTIME] = 0;
 | 
					    tty.c_cc[VTIME] = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tcsetattr (0, TCSANOW, &tty);
 | 
					    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)
 | 
					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)
 | 
					    if (stdio_nb_clients >= STDIO_MAX_CLIENTS)
 | 
				
			||||||
        return NULL;
 | 
					        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 = qemu_chr_open_fd(0, 1);
 | 
				
			||||||
    chr->chr_close = qemu_chr_close_stdio;
 | 
					    chr->chr_close = qemu_chr_close_stdio;
 | 
				
			||||||
    qemu_set_fd_handler2(0, stdio_read_poll, stdio_read, NULL, chr);
 | 
					    qemu_set_fd_handler2(0, stdio_read_poll, stdio_read, NULL, chr);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user