[Lldb-commits] [lldb] r200489 - Pressing ^D in a non-empty input terminates LLDB. This was due to the fact that we stack more than one editline instance on top of each other and we still expect CTRL+D to exit the editline instance, but it should only do so when the line is empty. Otherwise it should (and does) delete the character at the cursor.

Greg Clayton gclayton at apple.com
Thu Jan 30 12:59:19 PST 2014


Author: gclayton
Date: Thu Jan 30 14:59:18 2014
New Revision: 200489

URL: http://llvm.org/viewvc/llvm-project?rev=200489&view=rev
Log:
Pressing ^D in a non-empty input terminates LLDB. This was due to the fact that we stack more than one editline instance on top of each other and we still expect CTRL+D to exit the editline instance, but it should only do so when the line is empty. Otherwise it should (and does) delete the character at the cursor.

<rdar://problem/15944703>

Modified:
    lldb/trunk/source/Host/common/Editline.cpp

Modified: lldb/trunk/source/Host/common/Editline.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/Editline.cpp?rev=200489&r1=200488&r2=200489&view=diff
==============================================================================
--- lldb/trunk/source/Host/common/Editline.cpp (original)
+++ lldb/trunk/source/Host/common/Editline.cpp Thu Jan 30 14:59:18 2014
@@ -630,7 +630,21 @@ Editline::GetCharFromInputFileCallback (
     if (editline && editline->m_got_eof == false)
     {
         char ch = ::fgetc(editline->GetInputFile());
-        if (ch == '\x04' || ch == EOF)
+        if (ch == '\x04')
+        {
+            // Only turn a CTRL+D into a EOF if we receive the
+            // CTRL+D an empty line, otherwise it will forward
+            // delete the character at the cursor
+            const LineInfo *line_info = ::el_line(e);
+            if (line_info != NULL &&
+                line_info->buffer == line_info->cursor &&
+                line_info->cursor == line_info->lastchar)
+            {
+                ch = EOF;
+            }
+        }
+    
+        if (ch == EOF)
         {
             editline->m_got_eof = true;
         }





More information about the lldb-commits mailing list