forked from OSchip/llvm-project
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:
parent
5d9d417a08
commit
046bbafdf2
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue