aboutsummaryrefslogtreecommitdiff
path: root/source/os_specific/service_layers/osunixxf.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/os_specific/service_layers/osunixxf.c')
-rw-r--r--source/os_specific/service_layers/osunixxf.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/source/os_specific/service_layers/osunixxf.c b/source/os_specific/service_layers/osunixxf.c
index 224f345599eb..dd151eee9551 100644
--- a/source/os_specific/service_layers/osunixxf.c
+++ b/source/os_specific/service_layers/osunixxf.c
@@ -93,6 +93,7 @@ typedef void* (*PTHREAD_CALLBACK) (void *);
#include <termios.h>
struct termios OriginalTermAttributes;
+int TermAttributesWereSet = 0;
ACPI_STATUS
AcpiUtReadLine (
@@ -146,7 +147,7 @@ OsEnterLineEditMode (
if (tcgetattr (STDIN_FILENO, &OriginalTermAttributes))
{
- fprintf (stderr, "Could not get/set terminal attributes!\n");
+ fprintf (stderr, "Could not get terminal attributes!\n");
return;
}
@@ -159,16 +160,32 @@ OsEnterLineEditMode (
LocalTermAttributes.c_cc[VMIN] = 1;
LocalTermAttributes.c_cc[VTIME] = 0;
- tcsetattr (STDIN_FILENO, TCSANOW, &LocalTermAttributes);
+ if (tcsetattr (STDIN_FILENO, TCSANOW, &LocalTermAttributes))
+ {
+ fprintf (stderr, "Could not set terminal attributes!\n");
+ return;
+ }
+
+ TermAttributesWereSet = 1;
}
+
static void
OsExitLineEditMode (
void)
{
+
+ if (!TermAttributesWereSet)
+ {
+ return;
+ }
+
/* Set terminal attributes back to the original values */
- tcsetattr (STDIN_FILENO, TCSANOW, &OriginalTermAttributes);
+ if (tcsetattr (STDIN_FILENO, TCSANOW, &OriginalTermAttributes))
+ {
+ fprintf (stderr, "Could not restore terminal attributes!\n");
+ }
}