aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MIUtilTermios.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MIUtilTermios.cpp')
-rw-r--r--tools/lldb-mi/MIUtilTermios.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/tools/lldb-mi/MIUtilTermios.cpp b/tools/lldb-mi/MIUtilTermios.cpp
new file mode 100644
index 000000000000..f026436e3fa3
--- /dev/null
+++ b/tools/lldb-mi/MIUtilTermios.cpp
@@ -0,0 +1,69 @@
+//===-- MIUtilTermios.cpp ---------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+//++
+// File: MIUtilTermios.cpp
+//
+// Overview: Terminal setting termios functions.
+//
+// Environment: Compilers: Visual C++ 12.
+// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
+// Libraries: See MIReadmetxt.
+//
+// Copyright: None.
+//--
+
+// Third party headers:
+#include <stdlib.h>
+
+// In-house headers:
+#include "MIUtilTermios.h"
+#include "Platform.h"
+
+namespace MIUtilTermios
+{
+// Instantiations:
+static bool g_bOldStdinTermiosIsValid = false; // True = yes valid, false = no valid
+static struct termios g_sOldStdinTermios;
+
+//++ ------------------------------------------------------------------------------------
+// Details: Reset the terminal settings. This function is added as an ::atexit handler
+// to make sure we clean up. See StdinTerminosSet().
+// Type: Global function.
+// Args: None.
+// Return: None.
+// Throws: None.
+//--
+void StdinTermiosReset( void )
+{
+ if( g_bOldStdinTermiosIsValid )
+ {
+ g_bOldStdinTermiosIsValid = false;
+ ::tcsetattr( STDIN_FILENO, TCSANOW, &g_sOldStdinTermios );
+ }
+}
+
+//++ ------------------------------------------------------------------------------------
+// Details: Set the terminal settings function. StdinTermiosReset() is called when to
+// reset to this to before and application exit.
+// Type: Global function.
+// Args: None.
+// Return: None.
+// Throws: None.
+//--
+void StdinTermiosSet( void )
+{
+ if( ::tcgetattr( STDIN_FILENO, &g_sOldStdinTermios ) == 0 )
+ {
+ g_bOldStdinTermiosIsValid = true;
+ ::atexit( StdinTermiosReset );
+ }
+}
+
+} // namespace MIUtilTermios