diff options
Diffstat (limited to 'lldb/tools/debugserver/source/TTYState.cpp')
-rw-r--r-- | lldb/tools/debugserver/source/TTYState.cpp | 152 |
1 files changed, 62 insertions, 90 deletions
diff --git a/lldb/tools/debugserver/source/TTYState.cpp b/lldb/tools/debugserver/source/TTYState.cpp index 28bc956dc28..5f10050fcdd 100644 --- a/lldb/tools/debugserver/source/TTYState.cpp +++ b/lldb/tools/debugserver/source/TTYState.cpp @@ -13,110 +13,82 @@ #include "TTYState.h" #include <fcntl.h> -#include <unistd.h> #include <sys/signal.h> +#include <unistd.h> -TTYState::TTYState() : - m_fd(-1), - m_tflags(-1), - m_ttystateErr(-1), - m_processGroup(-1) -{ -} +TTYState::TTYState() + : m_fd(-1), m_tflags(-1), m_ttystateErr(-1), m_processGroup(-1) {} -TTYState::~TTYState() -{ -} +TTYState::~TTYState() {} -bool -TTYState::GetTTYState (int fd, bool saveProcessGroup) -{ - if (fd >= 0 && ::isatty (fd)) - { - m_fd = fd; - m_tflags = fcntl (fd, F_GETFL, 0); - m_ttystateErr = tcgetattr (fd, &m_ttystate); - if (saveProcessGroup) - m_processGroup = tcgetpgrp (0); - else - m_processGroup = -1; - } +bool TTYState::GetTTYState(int fd, bool saveProcessGroup) { + if (fd >= 0 && ::isatty(fd)) { + m_fd = fd; + m_tflags = fcntl(fd, F_GETFL, 0); + m_ttystateErr = tcgetattr(fd, &m_ttystate); + if (saveProcessGroup) + m_processGroup = tcgetpgrp(0); else - { - m_fd = -1; - m_tflags = -1; - m_ttystateErr = -1; - m_processGroup = -1; - } - return m_ttystateErr == 0; + m_processGroup = -1; + } else { + m_fd = -1; + m_tflags = -1; + m_ttystateErr = -1; + m_processGroup = -1; + } + return m_ttystateErr == 0; } -bool -TTYState::SetTTYState () const -{ - int result = 0; - if (IsValid()) - { - if (TFlagsValid()) - result = fcntl (m_fd, F_SETFL, m_tflags); - - if (TTYStateValid()) - result = tcsetattr (m_fd, TCSANOW, &m_ttystate); - - if (ProcessGroupValid()) - { - // Save the original signal handler. - void (*saved_sigttou_callback) (int) = NULL; - saved_sigttou_callback = (void (*)(int)) signal (SIGTTOU, SIG_IGN); - // Set the process group - result = tcsetpgrp (m_fd, m_processGroup); - // Restore the original signal handler. - signal (SIGTTOU, saved_sigttou_callback); - } - return true; +bool TTYState::SetTTYState() const { + int result = 0; + if (IsValid()) { + if (TFlagsValid()) + result = fcntl(m_fd, F_SETFL, m_tflags); + + if (TTYStateValid()) + result = tcsetattr(m_fd, TCSANOW, &m_ttystate); + + if (ProcessGroupValid()) { + // Save the original signal handler. + void (*saved_sigttou_callback)(int) = NULL; + saved_sigttou_callback = (void (*)(int))signal(SIGTTOU, SIG_IGN); + // Set the process group + result = tcsetpgrp(m_fd, m_processGroup); + // Restore the original signal handler. + signal(SIGTTOU, saved_sigttou_callback); } - return false; + return true; + } + return false; } +TTYStateSwitcher::TTYStateSwitcher() : m_currentState(~0) {} +TTYStateSwitcher::~TTYStateSwitcher() {} -TTYStateSwitcher::TTYStateSwitcher() : - m_currentState(~0) -{ +bool TTYStateSwitcher::GetState(uint32_t idx, int fd, bool saveProcessGroup) { + if (ValidStateIndex(idx)) + return m_ttystates[idx].GetTTYState(fd, saveProcessGroup); + return false; } -TTYStateSwitcher::~TTYStateSwitcher() -{ -} - -bool -TTYStateSwitcher::GetState(uint32_t idx, int fd, bool saveProcessGroup) -{ - if (ValidStateIndex(idx)) - return m_ttystates[idx].GetTTYState(fd, saveProcessGroup); +bool TTYStateSwitcher::SetState(uint32_t idx) const { + if (!ValidStateIndex(idx)) return false; -} - -bool -TTYStateSwitcher::SetState(uint32_t idx) const -{ - if (!ValidStateIndex(idx)) - return false; - - // See if we already are in this state? - if (ValidStateIndex(m_currentState) && (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].SetTTYState()) - { - m_currentState = idx; - return true; - } - - // We failed to set the state. The tty state was invalid or not - // initialized. - return false; + // See if we already are in this state? + if (ValidStateIndex(m_currentState) && (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].SetTTYState()) { + m_currentState = idx; + return true; + } + + // We failed to set the state. The tty state was invalid or not + // initialized. + return false; } - |