Fix crash in PseudoTerminal on Windows.

Patch by Rudy Pons
Differential Revision: https://reviews.llvm.org/D25681

llvm-svn: 285843
This commit is contained in:
Zachary Turner 2016-11-02 17:42:12 +00:00
parent 5d9d417a08
commit 046bbafdf2
1 changed files with 9 additions and 6 deletions

View File

@ -50,11 +50,7 @@ PseudoTerminal::~PseudoTerminal() {
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void PseudoTerminal::CloseMasterFileDescriptor() { void PseudoTerminal::CloseMasterFileDescriptor() {
if (m_master_fd >= 0) { if (m_master_fd >= 0) {
// Don't call 'close' on m_master_fd for Windows as a dummy implementation of
// posix_openpt above always gives it a 0 value.
#ifndef _WIN32
::close(m_master_fd); ::close(m_master_fd);
#endif
m_master_fd = invalid_fd; m_master_fd = invalid_fd;
} }
} }
@ -81,13 +77,14 @@ void PseudoTerminal::CloseSlaveFileDescriptor() {
// file descriptor after this object is out of scope or destroyed. // file descriptor after this object is out of scope or destroyed.
// //
// RETURNS: // RETURNS:
// Zero when successful, non-zero indicating an error occurred. // True when successful, false indicating an error occurred.
//---------------------------------------------------------------------- //----------------------------------------------------------------------
bool PseudoTerminal::OpenFirstAvailableMaster(int oflag, char *error_str, bool PseudoTerminal::OpenFirstAvailableMaster(int oflag, char *error_str,
size_t error_len) { size_t error_len) {
if (error_str) if (error_str)
error_str[0] = '\0'; error_str[0] = '\0';
#if !defined(LLDB_DISABLE_POSIX)
// Open the master side of a pseudo terminal // Open the master side of a pseudo terminal
m_master_fd = ::posix_openpt(oflag); m_master_fd = ::posix_openpt(oflag);
if (m_master_fd < 0) { if (m_master_fd < 0) {
@ -113,6 +110,12 @@ bool PseudoTerminal::OpenFirstAvailableMaster(int oflag, char *error_str,
} }
return true; return true;
#else
if (error_str)
::snprintf(error_str, error_len, "%s",
"pseudo terminal not supported");
return false;
#endif
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -124,7 +127,7 @@ bool PseudoTerminal::OpenFirstAvailableMaster(int oflag, char *error_str,
// ReleaseSlaveFileDescriptor() member function. // ReleaseSlaveFileDescriptor() member function.
// //
// RETURNS: // RETURNS:
// Zero when successful, non-zero indicating an error occurred. // True when successful, false indicating an error occurred.
//---------------------------------------------------------------------- //----------------------------------------------------------------------
bool PseudoTerminal::OpenSlave(int oflag, char *error_str, size_t error_len) { bool PseudoTerminal::OpenSlave(int oflag, char *error_str, size_t error_len) {
if (error_str) if (error_str)