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