[U-Boot] [PATCH] sandbox: Tidy up terminal restore
Simon Glass
sjg at chromium.org
Mon May 11 05:07:27 CEST 2015
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 at chromium.org>
---
arch/sandbox/cpu/cpu.c | 2 ++
arch/sandbox/cpu/os.c | 8 +++++---
include/os.h | 8 ++++++++
3 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/arch/sandbox/cpu/cpu.c b/arch/sandbox/cpu/cpu.c
index b6aae37..02c4cd3 100644
--- a/arch/sandbox/cpu/cpu.c
+++ b/arch/sandbox/cpu/cpu.c
@@ -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);
diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c
index e6dd17e..8a4d719 100644
--- a/arch/sandbox/cpu/os.c
+++ b/arch/sandbox/cpu/os.c
@@ -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);
}
diff --git a/include/os.h b/include/os.h
index ffbdce8..954a48c 100644
--- a/include/os.h
+++ b/include/os.h
@@ -112,6 +112,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.
*
* \param length Number of bytes to be allocated
--
2.2.0.rc0.207.ga3a616c
More information about the U-Boot
mailing list