[Lldb-commits] [lldb] r113506 - in /lldb/trunk: include/lldb/API/SBDebugger.h source/API/SBDebugger.cpp tools/driver/Driver.cpp

Caroline Tice ctice at apple.com
Thu Sep 9 10:45:09 PDT 2010


Author: ctice
Date: Thu Sep  9 12:45:09 2010
New Revision: 113506

URL: http://llvm.org/viewvc/llvm-project?rev=113506&view=rev
Log:
Make API calls for setting/getting user settable variables static.
Modify Driver to handle SIGWINCH signals and automatically re-set the
term-width variable.


Modified:
    lldb/trunk/include/lldb/API/SBDebugger.h
    lldb/trunk/source/API/SBDebugger.cpp
    lldb/trunk/tools/driver/Driver.cpp

Modified: lldb/trunk/include/lldb/API/SBDebugger.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBDebugger.h?rev=113506&r1=113505&r2=113506&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBDebugger.h (original)
+++ lldb/trunk/include/lldb/API/SBDebugger.h Thu Sep  9 12:45:09 2010
@@ -142,14 +142,17 @@
     void
     PushInputReader (lldb::SBInputReader &reader);
 
+    const char *
+    GetInstanceName  ();
+
     static SBDebugger
     FindDebuggerWithID (int id);
 
-    lldb::SBError
-    SetInternalVariable (const char *var_name, const char *value);
+    static lldb::SBError
+    SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name);
 
-    lldb::SBStringList
-    GetInternalVariableValue (const char *var_name);
+    static lldb::SBStringList
+    GetInternalVariableValue (const char *var_name, const char *debugger_instance_name);
 
 private:
 

Modified: lldb/trunk/source/API/SBDebugger.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBDebugger.cpp?rev=113506&r1=113505&r2=113506&view=diff
==============================================================================
--- lldb/trunk/source/API/SBDebugger.cpp (original)
+++ lldb/trunk/source/API/SBDebugger.cpp Thu Sep  9 12:45:09 2010
@@ -565,17 +565,19 @@
     return sb_debugger;
 }
 
-SBError
-SBDebugger::SetInternalVariable (const char *var_name, const char *value)
+const char *
+SBDebugger::GetInstanceName()
 {
-    lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
-    
-    const char *debugger_instance_name;
-
     if (m_opaque_sp)
-        debugger_instance_name = m_opaque_sp->GetInstanceName().AsCString();
+        return m_opaque_sp->GetInstanceName().AsCString();
     else
-        debugger_instance_name = "";
+        return NULL;
+}
+
+SBError
+SBDebugger::SetInternalVariable (const char *var_name, const char *value, const char *debugger_instance_name)
+{
+    lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
 
     Error err = root_settings_controller->SetVariable (var_name, value, lldb::eVarSetOperationAssign, false,
                                                        debugger_instance_name);
@@ -586,19 +588,13 @@
 }
 
 lldb::SBStringList
-SBDebugger::GetInternalVariableValue (const char *var_name)
+SBDebugger::GetInternalVariableValue (const char *var_name, const char *debugger_instance_name)
 {
     SBStringList ret_value;
     lldb::SettableVariableType var_type;
-    const char *debugger_instance_name;
 
     lldb::UserSettingsControllerSP root_settings_controller = lldb_private::Debugger::GetSettingsController();
 
-    if (m_opaque_sp)
-        debugger_instance_name = m_opaque_sp->GetInstanceName().AsCString();
-    else
-        debugger_instance_name = "";
-
     StringList value = root_settings_controller->GetVariable (var_name, var_type, debugger_instance_name);
     for (unsigned i = 0; i != value.GetSize(); ++i)
         ret_value.AppendString (value.GetStringAtIndex(i));

Modified: lldb/trunk/tools/driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/driver/Driver.cpp?rev=113506&r1=113505&r2=113506&view=diff
==============================================================================
--- lldb/trunk/tools/driver/Driver.cpp (original)
+++ lldb/trunk/tools/driver/Driver.cpp Thu Sep  9 12:45:09 2010
@@ -39,6 +39,8 @@
 static void reset_stdin_termios ();
 static struct termios g_old_stdin_termios;
 
+static char *g_debugger_name =  (char *) "";
+
 // In the Driver::MainLoop, we change the terminal settings.  This function is
 // added as an atexit handler to make sure we clean them up.
 static void
@@ -90,6 +92,9 @@
     m_option_data (),
     m_waiting_for_command (false)
 {
+    g_debugger_name = (char *) m_debugger.GetInstanceName();
+    if (g_debugger_name == NULL)
+        g_debugger_name = (char *) "";
 }
 
 Driver::~Driver ()
@@ -1263,6 +1268,22 @@
 }
 
 
+void
+sigwinch_handler (int signo)
+{
+    struct winsize window_size;
+    if (isatty (STDIN_FILENO)
+        && ::ioctl (STDIN_FILENO, TIOCGWINSZ, &window_size) == 0)
+    {
+        if ((window_size.ws_col > 0) && (strlen (g_debugger_name) > 0))
+        {
+            char width_str_buffer[25];
+            ::sprintf (width_str_buffer, "%d", window_size.ws_col);
+            SBDebugger::SetInternalVariable ("term-width", width_str_buffer, g_debugger_name);
+        }
+    }
+}
+
 int
 main (int argc, char const *argv[])
 {
@@ -1270,6 +1291,8 @@
     
     SBHostOS::ThreadCreated ("[main]");
 
+    signal (SIGWINCH, sigwinch_handler);
+
     // Create a scope for driver so that the driver object will destroy itself
     // before SBDebugger::Terminate() is called.
     {





More information about the lldb-commits mailing list