This renames the LLDB error class to Status, as discussed on the lldb-dev mailing list. A change of this magnitude cannot easily be done without find and replace, but that has potential to catch unwanted occurrences of common strings such as "Error". Every effort was made to find all the obvious things such as the word "Error" appearing in a string, etc, but it's possible there are still some lingering occurences left around. Hopefully nothing too serious. llvm-svn: 302872
88 lines
2.6 KiB
C++
88 lines
2.6 KiB
C++
//===-- PseudoTerminal.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 1/8/08.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef __PseudoTerminal_h__
|
|
#define __PseudoTerminal_h__
|
|
|
|
#include <fcntl.h>
|
|
#include <string>
|
|
#include <termios.h>
|
|
|
|
class PseudoTerminal {
|
|
public:
|
|
enum { invalid_fd = -1, invalid_pid = -1 };
|
|
|
|
enum Status {
|
|
success = 0,
|
|
err_posix_openpt_failed = -2,
|
|
err_grantpt_failed = -3,
|
|
err_unlockpt_failed = -4,
|
|
err_ptsname_failed = -5,
|
|
err_open_slave_failed = -6,
|
|
err_fork_failed = -7,
|
|
err_setsid_failed = -8,
|
|
err_failed_to_acquire_controlling_terminal = -9,
|
|
err_dup2_failed_on_stdin = -10,
|
|
err_dup2_failed_on_stdout = -11,
|
|
err_dup2_failed_on_stderr = -12
|
|
};
|
|
//------------------------------------------------------------------
|
|
// Constructors and Destructors
|
|
//------------------------------------------------------------------
|
|
PseudoTerminal();
|
|
~PseudoTerminal();
|
|
|
|
void CloseMaster();
|
|
void CloseSlave();
|
|
Status OpenFirstAvailableMaster(int oflag);
|
|
Status OpenSlave(int oflag);
|
|
int MasterFD() const { return m_master_fd; }
|
|
int SlaveFD() const { return m_slave_fd; }
|
|
int ReleaseMasterFD() {
|
|
// Release ownership of the master pseudo terminal file
|
|
// descriptor without closing it. (the destructor for this
|
|
// class will close it otherwise!)
|
|
int fd = m_master_fd;
|
|
m_master_fd = invalid_fd;
|
|
return fd;
|
|
}
|
|
int ReleaseSlaveFD() {
|
|
// Release ownership of the slave pseudo terminal file
|
|
// descriptor without closing it (the destructor for this
|
|
// class will close it otherwise!)
|
|
int fd = m_slave_fd;
|
|
m_slave_fd = invalid_fd;
|
|
return fd;
|
|
}
|
|
|
|
const char *SlaveName() const;
|
|
|
|
pid_t Fork(Status &error);
|
|
|
|
protected:
|
|
//------------------------------------------------------------------
|
|
// Classes that inherit from PseudoTerminal can see and modify these
|
|
//------------------------------------------------------------------
|
|
int m_master_fd;
|
|
int m_slave_fd;
|
|
|
|
private:
|
|
//------------------------------------------------------------------
|
|
// Outlaw copy and assignment constructors
|
|
//------------------------------------------------------------------
|
|
PseudoTerminal(const PseudoTerminal &rhs);
|
|
PseudoTerminal &operator=(const PseudoTerminal &rhs);
|
|
};
|
|
|
|
#endif // #ifndef __PseudoTerminal_h__
|