Typing "gui" will crash programs that don't give LLDB a real terminal. 

We now verify that the debugger's input file is a valid terminal file descriptor before allowing the "gui" command to try to run. 

Xcode would crash if you typed "gui" at the command line prior to this fix.

<rdar://problem/18775851>

llvm-svn: 226027
diff --git a/lldb/source/Commands/CommandObjectGUI.cpp b/lldb/source/Commands/CommandObjectGUI.cpp
index 3d05335..359d6d2 100644
--- a/lldb/source/Commands/CommandObjectGUI.cpp
+++ b/lldb/source/Commands/CommandObjectGUI.cpp
@@ -42,10 +42,22 @@
     if (args.GetArgumentCount() == 0)
     {
         Debugger &debugger = m_interpreter.GetDebugger();
-        IOHandlerSP io_handler_sp (new IOHandlerCursesGUI (debugger));
-        if (io_handler_sp)
-            debugger.PushIOHandler(io_handler_sp);
-        result.SetStatus (eReturnStatusSuccessFinishResult);
+
+        lldb::StreamFileSP input_sp = debugger.GetInputFile();
+        if (input_sp &&
+            input_sp->GetFile().GetIsRealTerminal() &&
+            input_sp->GetFile().GetIsInteractive())
+        {
+            IOHandlerSP io_handler_sp (new IOHandlerCursesGUI (debugger));
+            if (io_handler_sp)
+                debugger.PushIOHandler(io_handler_sp);
+            result.SetStatus (eReturnStatusSuccessFinishResult);
+        }
+        else
+        {
+            result.AppendError("the gui command requires an interactive terminal.");
+            result.SetStatus (eReturnStatusFailed);
+        }
     }
     else
     {