diff options
Diffstat (limited to 'tools/debugserver/source/TTYState.cpp')
-rw-r--r-- | tools/debugserver/source/TTYState.cpp | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/tools/debugserver/source/TTYState.cpp b/tools/debugserver/source/TTYState.cpp deleted file mode 100644 index 5f10050fcdde..000000000000 --- a/tools/debugserver/source/TTYState.cpp +++ /dev/null @@ -1,94 +0,0 @@ -//===-- TTYState.cpp --------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// Created by Greg Clayton on 3/26/07. -// -//===----------------------------------------------------------------------===// - -#include "TTYState.h" -#include <fcntl.h> -#include <sys/signal.h> -#include <unistd.h> - -TTYState::TTYState() - : m_fd(-1), m_tflags(-1), m_ttystateErr(-1), m_processGroup(-1) {} - -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; - } 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; - } - return false; -} - -TTYStateSwitcher::TTYStateSwitcher() : m_currentState(~0) {} - -TTYStateSwitcher::~TTYStateSwitcher() {} - -bool TTYStateSwitcher::GetState(uint32_t idx, int fd, bool saveProcessGroup) { - if (ValidStateIndex(idx)) - return m_ttystates[idx].GetTTYState(fd, saveProcessGroup); - 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; -} |