[Lldb-commits] [lldb] r235887 - Improve handling of ctrl-c with MSVC.
Hafiz Abid Qadeer
hafiz_abid at mentor.com
Mon Apr 27 08:04:43 PDT 2015
Author: abidh
Date: Mon Apr 27 10:04:42 2015
New Revision: 235887
URL: http://llvm.org/viewvc/llvm-project?rev=235887&view=rev
Log:
Improve handling of ctrl-c with MSVC.
Currently hitting Ctrl-C in Windows LLDB-MI just exits MI. But according to test_lldbmi_stopped_when_interrupt() in TestMiSignal.py Ctrl-C should send a SIGINT signal to the inferior.
Patch adds this functionality to Windows so SIGINT is sent on Ctrl-C.
Patch from EwanCrawford. Reviewed in http://reviews.llvm.org/D9248.
Modified:
lldb/trunk/tools/lldb-mi/MICmnStreamStdin.cpp
lldb/trunk/tools/lldb-mi/Platform.cpp
Modified: lldb/trunk/tools/lldb-mi/MICmnStreamStdin.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnStreamStdin.cpp?rev=235887&r1=235886&r2=235887&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnStreamStdin.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnStreamStdin.cpp Mon Apr 27 10:04:42 2015
@@ -7,6 +7,12 @@
//
//===----------------------------------------------------------------------===//
+// Third Party Headers
+#ifdef _MSC_VER
+#include <Windows.h>
+#endif
+#include <string.h> // For std::strerror()
+
// In-house headers:
#include "MICmnStreamStdin.h"
#include "MICmnStreamStdout.h"
@@ -14,7 +20,6 @@
#include "MICmnLog.h"
#include "MIDriver.h"
#include "MIUtilSingletonHelper.h"
-#include <string.h> // For std::strerror()
//++ ------------------------------------------------------------------------------------
// Details: CMICmnStreamStdin constructor.
@@ -206,6 +211,13 @@ CMICmnStreamStdin::ReadLine(CMIUtilStrin
const MIchar *pText = ::fgets(&m_pCmdBuffer[0], m_constBufferSize, stdin);
if (pText == nullptr)
{
+#ifdef _MSC_VER
+ // Was Ctrl-C hit?
+ // On Windows, Ctrl-C gives an ERROR_OPERATION_ABORTED as error on the command-line.
+ // The end-of-file indicator is also set, so without this check we will exit next if statement.
+ if (::GetLastError() == ERROR_OPERATION_ABORTED)
+ return nullptr;
+#endif
if (::feof(stdin))
{
const bool bForceExit = true;
Modified: lldb/trunk/tools/lldb-mi/Platform.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/Platform.cpp?rev=235887&r1=235886&r2=235887&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/Platform.cpp (original)
+++ lldb/trunk/tools/lldb-mi/Platform.cpp Mon Apr 27 10:04:42 2015
@@ -23,7 +23,7 @@ BOOL WINAPI CtrlHandler(DWORD ctrlType)
{
if (_ctrlHandler != NULL)
{
- _ctrlHandler(0);
+ _ctrlHandler(SIGINT);
return TRUE;
}
return FALSE;
More information about the lldb-commits
mailing list