From 10c0ef7b8aaae3b7a6210b181544f2f6979d149c Mon Sep 17 00:00:00 2001 From: Greg Clayton Date: Thu, 30 Jan 2014 20:59:18 +0000 Subject: [PATCH] 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. llvm-svn: 200489 --- lldb/source/Host/common/Editline.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lldb/source/Host/common/Editline.cpp b/lldb/source/Host/common/Editline.cpp index 53fa64103abf..7e6a2f55e373 100644 --- a/lldb/source/Host/common/Editline.cpp +++ b/lldb/source/Host/common/Editline.cpp @@ -630,7 +630,21 @@ Editline::GetCharFromInputFileCallback (EditLine *e, char *c) 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; }