summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/tools/lldb/source/Host/common/Terminal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Host/common/Terminal.cpp')
-rw-r--r--contrib/llvm/tools/lldb/source/Host/common/Terminal.cpp334
1 files changed, 137 insertions, 197 deletions
diff --git a/contrib/llvm/tools/lldb/source/Host/common/Terminal.cpp b/contrib/llvm/tools/lldb/source/Host/common/Terminal.cpp
index 9f3abb7..022b3fa 100644
--- a/contrib/llvm/tools/lldb/source/Host/common/Terminal.cpp
+++ b/contrib/llvm/tools/lldb/source/Host/common/Terminal.cpp
@@ -8,6 +8,8 @@
//===----------------------------------------------------------------------===//
#include "lldb/Host/Terminal.h"
+
+#include "lldb/Host/PosixApi.h"
#include "llvm/ADT/STLExtras.h"
#include <fcntl.h>
@@ -17,120 +19,91 @@
#include <termios.h>
#endif
-
using namespace lldb_private;
-bool
-Terminal::IsATerminal () const
-{
-
- return m_fd >= 0 && ::isatty (m_fd);
-}
-
+bool Terminal::IsATerminal() const { return m_fd >= 0 && ::isatty(m_fd); }
-bool
-Terminal::SetEcho (bool enabled)
-{
- if (FileDescriptorIsValid())
- {
+bool Terminal::SetEcho(bool enabled) {
+ if (FileDescriptorIsValid()) {
#ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- if (IsATerminal ())
- {
- struct termios fd_termios;
- if (::tcgetattr(m_fd, &fd_termios) == 0)
- {
- bool set_corectly = false;
- if (enabled)
- {
- if (fd_termios.c_lflag & ECHO)
- set_corectly = true;
- else
- fd_termios.c_lflag |= ECHO;
- }
- else
- {
- if (fd_termios.c_lflag & ECHO)
- fd_termios.c_lflag &= ~ECHO;
- else
- set_corectly = true;
- }
-
- if (set_corectly)
- return true;
- return ::tcsetattr (m_fd, TCSANOW, &fd_termios) == 0;
- }
+ if (IsATerminal()) {
+ struct termios fd_termios;
+ if (::tcgetattr(m_fd, &fd_termios) == 0) {
+ bool set_corectly = false;
+ if (enabled) {
+ if (fd_termios.c_lflag & ECHO)
+ set_corectly = true;
+ else
+ fd_termios.c_lflag |= ECHO;
+ } else {
+ if (fd_termios.c_lflag & ECHO)
+ fd_termios.c_lflag &= ~ECHO;
+ else
+ set_corectly = true;
}
-#endif // #ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
+
+ if (set_corectly)
+ return true;
+ return ::tcsetattr(m_fd, TCSANOW, &fd_termios) == 0;
+ }
}
- return false;
+#endif // #ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
+ }
+ return false;
}
-bool
-Terminal::SetCanonical (bool enabled)
-{
- if (FileDescriptorIsValid())
- {
+bool Terminal::SetCanonical(bool enabled) {
+ if (FileDescriptorIsValid()) {
#ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- if (IsATerminal ())
- {
- struct termios fd_termios;
- if (::tcgetattr(m_fd, &fd_termios) == 0)
- {
- bool set_corectly = false;
- if (enabled)
- {
- if (fd_termios.c_lflag & ICANON)
- set_corectly = true;
- else
- fd_termios.c_lflag |= ICANON;
- }
- else
- {
- if (fd_termios.c_lflag & ICANON)
- fd_termios.c_lflag &= ~ICANON;
- else
- set_corectly = true;
- }
-
- if (set_corectly)
- return true;
- return ::tcsetattr (m_fd, TCSANOW, &fd_termios) == 0;
- }
+ if (IsATerminal()) {
+ struct termios fd_termios;
+ if (::tcgetattr(m_fd, &fd_termios) == 0) {
+ bool set_corectly = false;
+ if (enabled) {
+ if (fd_termios.c_lflag & ICANON)
+ set_corectly = true;
+ else
+ fd_termios.c_lflag |= ICANON;
+ } else {
+ if (fd_termios.c_lflag & ICANON)
+ fd_termios.c_lflag &= ~ICANON;
+ else
+ set_corectly = true;
}
-#endif // #ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
+
+ if (set_corectly)
+ return true;
+ return ::tcsetattr(m_fd, TCSANOW, &fd_termios) == 0;
+ }
}
- return false;
+#endif // #ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
+ }
+ return false;
}
//----------------------------------------------------------------------
// Default constructor
//----------------------------------------------------------------------
-TerminalState::TerminalState() :
- m_tty(),
- m_tflags(-1),
+TerminalState::TerminalState()
+ : m_tty(), m_tflags(-1),
#ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- m_termios_ap(),
+ m_termios_ap(),
#endif
- m_process_group(-1)
-{
+ m_process_group(-1) {
}
//----------------------------------------------------------------------
// Destructor
//----------------------------------------------------------------------
-TerminalState::~TerminalState()
-{
-}
+TerminalState::~TerminalState() {}
-void
-TerminalState::Clear ()
-{
- m_tty.Clear();
- m_tflags = -1;
+void TerminalState::Clear() {
+ m_tty.Clear();
+ m_tflags = -1;
#ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- m_termios_ap.reset();
+ m_termios_ap.reset();
#endif
- m_process_group = -1;
+ m_process_group = -1;
}
//----------------------------------------------------------------------
@@ -138,142 +111,114 @@ TerminalState::Clear ()
// and if "save_process_group" is true, attempt to save the process
// group info for the TTY.
//----------------------------------------------------------------------
-bool
-TerminalState::Save (int fd, bool save_process_group)
-{
- m_tty.SetFileDescriptor(fd);
- if (m_tty.IsATerminal())
- {
+bool TerminalState::Save(int fd, bool save_process_group) {
+ m_tty.SetFileDescriptor(fd);
+ if (m_tty.IsATerminal()) {
#ifndef LLDB_DISABLE_POSIX
- m_tflags = ::fcntl (fd, F_GETFL, 0);
+ m_tflags = ::fcntl(fd, F_GETFL, 0);
#endif
#ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- if (m_termios_ap.get() == NULL)
- m_termios_ap.reset (new struct termios);
- int err = ::tcgetattr (fd, m_termios_ap.get());
- if (err != 0)
- m_termios_ap.reset();
+ if (m_termios_ap.get() == NULL)
+ m_termios_ap.reset(new struct termios);
+ int err = ::tcgetattr(fd, m_termios_ap.get());
+ if (err != 0)
+ m_termios_ap.reset();
#endif // #ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
#ifndef LLDB_DISABLE_POSIX
- if (save_process_group)
- m_process_group = ::tcgetpgrp (0);
- else
- m_process_group = -1;
-#endif
- }
+ if (save_process_group)
+ m_process_group = ::tcgetpgrp(0);
else
- {
- m_tty.Clear();
- m_tflags = -1;
+ m_process_group = -1;
+#endif
+ } else {
+ m_tty.Clear();
+ m_tflags = -1;
#ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- m_termios_ap.reset();
+ m_termios_ap.reset();
#endif
- m_process_group = -1;
- }
- return IsValid();
+ m_process_group = -1;
+ }
+ return IsValid();
}
//----------------------------------------------------------------------
// Restore the state of the TTY using the cached values from a
// previous call to Save().
//----------------------------------------------------------------------
-bool
-TerminalState::Restore () const
-{
+bool TerminalState::Restore() const {
#ifndef LLDB_DISABLE_POSIX
- if (IsValid())
- {
- const int fd = m_tty.GetFileDescriptor();
- if (TFlagsIsValid())
- fcntl (fd, F_SETFL, m_tflags);
+ if (IsValid()) {
+ const int fd = m_tty.GetFileDescriptor();
+ if (TFlagsIsValid())
+ fcntl(fd, F_SETFL, m_tflags);
#ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- if (TTYStateIsValid())
- tcsetattr (fd, TCSANOW, m_termios_ap.get());
+ if (TTYStateIsValid())
+ tcsetattr(fd, TCSANOW, m_termios_ap.get());
#endif // #ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- if (ProcessGroupIsValid())
- {
- // Save the original signal handler.
- void (*saved_sigttou_callback) (int) = NULL;
- saved_sigttou_callback = (void (*)(int)) signal (SIGTTOU, SIG_IGN);
- // Set the process group
- tcsetpgrp (fd, m_process_group);
- // Restore the original signal handler.
- signal (SIGTTOU, saved_sigttou_callback);
- }
- return true;
+ if (ProcessGroupIsValid()) {
+ // Save the original signal handler.
+ void (*saved_sigttou_callback)(int) = NULL;
+ saved_sigttou_callback = (void (*)(int))signal(SIGTTOU, SIG_IGN);
+ // Set the process group
+ tcsetpgrp(fd, m_process_group);
+ // Restore the original signal handler.
+ signal(SIGTTOU, saved_sigttou_callback);
}
+ return true;
+ }
#endif
- return false;
+ return false;
}
-
-
-
//----------------------------------------------------------------------
// Returns true if this object has valid saved TTY state settings
// that can be used to restore a previous state.
//----------------------------------------------------------------------
-bool
-TerminalState::IsValid() const
-{
- return m_tty.FileDescriptorIsValid () && (TFlagsIsValid() || TTYStateIsValid());
+bool TerminalState::IsValid() const {
+ return m_tty.FileDescriptorIsValid() &&
+ (TFlagsIsValid() || TTYStateIsValid());
}
//----------------------------------------------------------------------
// Returns true if m_tflags is valid
//----------------------------------------------------------------------
-bool
-TerminalState::TFlagsIsValid() const
-{
- return m_tflags != -1;
-}
+bool TerminalState::TFlagsIsValid() const { return m_tflags != -1; }
//----------------------------------------------------------------------
// Returns true if m_ttystate is valid
//----------------------------------------------------------------------
-bool
-TerminalState::TTYStateIsValid() const
-{
+bool TerminalState::TTYStateIsValid() const {
#ifdef LLDB_CONFIG_TERMIOS_SUPPORTED
- return m_termios_ap.get() != 0;
+ return m_termios_ap.get() != 0;
#else
- return false;
+ return false;
#endif
}
//----------------------------------------------------------------------
// Returns true if m_process_group is valid
//----------------------------------------------------------------------
-bool
-TerminalState::ProcessGroupIsValid() const
-{
- return static_cast<int32_t>(m_process_group) != -1;
+bool TerminalState::ProcessGroupIsValid() const {
+ return static_cast<int32_t>(m_process_group) != -1;
}
//------------------------------------------------------------------
// Constructor
//------------------------------------------------------------------
-TerminalStateSwitcher::TerminalStateSwitcher () :
- m_currentState(UINT32_MAX)
-{
-}
+TerminalStateSwitcher::TerminalStateSwitcher() : m_currentState(UINT32_MAX) {}
//------------------------------------------------------------------
// Destructor
//------------------------------------------------------------------
-TerminalStateSwitcher::~TerminalStateSwitcher ()
-{
-}
+TerminalStateSwitcher::~TerminalStateSwitcher() {}
//------------------------------------------------------------------
// Returns the number of states that this switcher contains
//------------------------------------------------------------------
-uint32_t
-TerminalStateSwitcher::GetNumberOfStates() const
-{
- return llvm::array_lengthof(m_ttystates);
+uint32_t TerminalStateSwitcher::GetNumberOfStates() const {
+ return llvm::array_lengthof(m_ttystates);
}
//------------------------------------------------------------------
@@ -281,28 +226,26 @@ TerminalStateSwitcher::GetNumberOfStates() const
//
// Returns true if the restore was successful, false otherwise.
//------------------------------------------------------------------
-bool
-TerminalStateSwitcher::Restore (uint32_t idx) const
-{
- const uint32_t num_states = GetNumberOfStates();
- if (idx >= num_states)
- return false;
-
- // See if we already are in this state?
- if (m_currentState < num_states && (idx == m_currentState) && m_ttystates[idx].IsValid())
- return true;
-
- // Set the state to match the index passed in and only update the
- // current state if there are no errors.
- if (m_ttystates[idx].Restore())
- {
- m_currentState = idx;
- return true;
- }
-
- // We failed to set the state. The tty state was invalid or not
- // initialized.
+bool TerminalStateSwitcher::Restore(uint32_t idx) const {
+ const uint32_t num_states = GetNumberOfStates();
+ if (idx >= num_states)
return false;
+
+ // See if we already are in this state?
+ if (m_currentState < num_states && (idx == m_currentState) &&
+ m_ttystates[idx].IsValid())
+ return true;
+
+ // Set the state to match the index passed in and only update the
+ // current state if there are no errors.
+ if (m_ttystates[idx].Restore()) {
+ m_currentState = idx;
+ return true;
+ }
+
+ // We failed to set the state. The tty state was invalid or not
+ // initialized.
+ return false;
}
//------------------------------------------------------------------
@@ -311,13 +254,10 @@ TerminalStateSwitcher::Restore (uint32_t idx) const
//
// Returns true if the restore was successful, false otherwise.
//------------------------------------------------------------------
-bool
-TerminalStateSwitcher::Save (uint32_t idx, int fd, bool save_process_group)
-{
- const uint32_t num_states = GetNumberOfStates();
- if (idx < num_states)
- return m_ttystates[idx].Save(fd, save_process_group);
- return false;
+bool TerminalStateSwitcher::Save(uint32_t idx, int fd,
+ bool save_process_group) {
+ const uint32_t num_states = GetNumberOfStates();
+ if (idx < num_states)
+ return m_ttystates[idx].Save(fd, save_process_group);
+ return false;
}
-
-
OpenPOWER on IntegriCloud