aboutsummaryrefslogtreecommitdiff
path: root/tools/debugserver/source/TTYState.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/debugserver/source/TTYState.h')
-rw-r--r--tools/debugserver/source/TTYState.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/tools/debugserver/source/TTYState.h b/tools/debugserver/source/TTYState.h
new file mode 100644
index 000000000000..c01d51255439
--- /dev/null
+++ b/tools/debugserver/source/TTYState.h
@@ -0,0 +1,61 @@
+//===-- TTYState.h ----------------------------------------------*- 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.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef __TTYState_h__
+#define __TTYState_h__
+
+#include <termios.h>
+#include <stdint.h>
+
+class TTYState
+{
+public:
+ TTYState();
+ ~TTYState();
+
+ bool GetTTYState (int fd, bool saveProcessGroup);
+ bool SetTTYState () const;
+
+ bool IsValid() const { return FileDescriptorValid() && TFlagsValid() && TTYStateValid(); }
+ bool FileDescriptorValid() const { return m_fd >= 0; }
+ bool TFlagsValid() const { return m_tflags != -1; }
+ bool TTYStateValid() const { return m_ttystateErr == 0; }
+ bool ProcessGroupValid() const { return m_processGroup != -1; }
+
+protected:
+ int m_fd; // File descriptor
+ int m_tflags;
+ int m_ttystateErr;
+ struct termios m_ttystate;
+ pid_t m_processGroup;
+
+};
+
+
+class TTYStateSwitcher
+{
+public:
+ TTYStateSwitcher();
+ ~TTYStateSwitcher();
+
+ bool GetState(uint32_t idx, int fd, bool saveProcessGroup);
+ bool SetState(uint32_t idx) const;
+ uint32_t NumStates() const { return sizeof(m_ttystates)/sizeof(TTYState); }
+ bool ValidStateIndex(uint32_t idx) const { return idx < NumStates(); }
+
+protected:
+ mutable uint32_t m_currentState;
+ TTYState m_ttystates[2];
+};
+
+#endif \ No newline at end of file