[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