sandbox: Tidy up terminal restore
For some reason 'u-boot -D' does not restore the terminal correctly when the 'reset' command is used. Call the terminal restore function explicitly in this case. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
d8abb46b37
commit
8939df092e
|
@ -22,6 +22,8 @@ unsigned long map_len;
|
|||
|
||||
void reset_cpu(ulong ignored)
|
||||
{
|
||||
/* Do this here while it still has an effect */
|
||||
os_fd_restore();
|
||||
if (state_uninit())
|
||||
os_exit(2);
|
||||
|
||||
|
|
|
@ -107,10 +107,12 @@ void os_exit(int exit_code)
|
|||
static struct termios orig_term;
|
||||
static bool term_setup;
|
||||
|
||||
static void os_fd_restore(void)
|
||||
void os_fd_restore(void)
|
||||
{
|
||||
if (term_setup)
|
||||
if (term_setup) {
|
||||
tcsetattr(0, TCSANOW, &orig_term);
|
||||
term_setup = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Put tty into raw mode so <tab> and <ctrl+c> work */
|
||||
|
@ -120,7 +122,6 @@ void os_tty_raw(int fd, bool allow_sigs)
|
|||
|
||||
if (term_setup)
|
||||
return;
|
||||
term_setup = true;
|
||||
|
||||
/* If not a tty, don't complain */
|
||||
if (tcgetattr(fd, &orig_term))
|
||||
|
@ -134,6 +135,7 @@ void os_tty_raw(int fd, bool allow_sigs)
|
|||
if (tcsetattr(fd, TCSANOW, &term))
|
||||
return;
|
||||
|
||||
term_setup = true;
|
||||
atexit(os_fd_restore);
|
||||
}
|
||||
|
||||
|
|
|
@ -111,6 +111,14 @@ void os_exit(int exit_code) __attribute__((noreturn));
|
|||
*/
|
||||
void os_tty_raw(int fd, bool allow_sigs);
|
||||
|
||||
/**
|
||||
* Restore the tty to its original mode
|
||||
*
|
||||
* Call this to restore the original terminal mode, after it has been changed
|
||||
* by os_tty_raw(). This is an internal function.
|
||||
*/
|
||||
void os_fd_restore(void);
|
||||
|
||||
/**
|
||||
* Acquires some memory from the underlying os.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue